Forum: Mikrocontroller und Digitale Elektronik Alle Pins eines Ports als 1 definieren (8051)


von Daniel K. (pocket7)


Lesenswert?

Hey..
ich versuche gerade das Programmieren mit dem FX2 (8051) und einem 
Zusatzboard mit 8 LEDs am Port B und 4 Tasten am Port A zu lernen und 
hab auch schon "erste Erfolge" und zwar soll das folgende Programm bei 
betätigen der Taste am PA0 alle LEDs zum leuchten bringen, was übrigens 
auch so funktioniert wie es unten ist. Jedoch sollte das doch auch viel 
einfacher funktionieren oder?? kann man nicht irgendwie einen ganzen 
Port als 1 definieren oder so? Ich hoffe Ihr wisst was ich meine. Danke 
schonmal im Voraus für eure HILFE!!!!

#define EIN 0
#define AUS 1
#define ZU 0
#define OFFEN 1

sbit LED1 = IOB^0;
sbit LED2 = IOB^1;
sbit LED3 = IOB^2;
sbit LED4 = IOB^3;
sbit LED5 = IOB^4;
sbit LED6 = IOB^5;
sbit LED7 = IOB^6;
sbit LED8 = IOB^7;

sbit TASTE1 = IOA^0;
sbit TASTE2 = IOA^1;
sbit TASTE3 = IOA^2;
sbit TASTE4 = IOA^3;

void main(void)
{
  OEB = 0xFF;
  OEA = 0x00;

  while(1)
  {
    if(TASTE1 == OFFEN)

    {
      LED1 = AUS;
      LED2 = AUS;
      LED3 = AUS;
      LED4 = AUS;
      LED5 = AUS;
      LED6 = AUS;
      LED7 = AUS;
      LED8 = AUS;
    }
    else
    {

      LED1 = EIN;
      LED2 = EIN;
      LED3 = EIN;
      LED4 = EIN;
      LED5 = EIN;
      LED6 = EIN;
      LED7 = EIN;
      LED8 = EIN;
    }
  }
}

von Peter D. (peda)


Lesenswert?

Hast Du mal die vollständige Bezeichnung Deines 8051.

Üblicher Weise heißen die Ports P0,P1,P2,P3 und die kann man natürlich 
Byteweise zugreifen.
1
P0 = 0;
2
P0 = 0xFF;

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

in der 8051-Architektur sind alle bit-ansprechbaren Ports auch als 
normales Port (als Byte) im Port-Adressraum verfügbar, das machst du ja 
auch (OEB = 0xFF;). Dann must du aber die Bits selber 
zusammenkombinieren.

Gruss Reinhard

von Jim M. (turboj)


Lesenswert?

Daniel K. schrieb:
> einen ganzen
> Port als 1 definieren

Ein ganzer Port hat 256 mögliche Zustände. Wenn Du 8 high Bits haben 
möchtest, dann kann man das so schreiben:
1
IOB = 0xFF;

von Winner (Gast)


Lesenswert?

#define ALL_LEDS  IOB

If(taste...)
  ALL_LEDS = 0xFF;

von Daniel K. (pocket7)


Lesenswert?

Okay danke das mit "IOB=0xFF" hat nun funktioniert! aber wie kann ich 
jetzt zum Beispiel alle Pins mit dem Namen All_LEDs definieren, so wie 
ich es zuvor mit jeder einzelnen LED gemacht hab ( sbit LED1 = IOB^0 )??
Danke nochmal an alle die hier einen Beitrag geleistet haben!!

von Daniel K. (pocket7)


Lesenswert?

Peter Dannegger schrieb:
> Hast Du mal die vollständige Bezeichnung Deines 8051.
>
> Üblicher Weise heißen die Ports P0,P1,P2,P3 und die kann man natürlich
> Byteweise zugreifen.
>
1
> P0 = 0;
2
> P0 = 0xFF;
3
>

ja die vollständige Bezeichnung lautet CY7C68013A-56PVXC

von Bernhard S. (b_spitzer)


Lesenswert?

Daniel K. schrieb:
> CY7C68013A
wieder was ziemlich Krudes... 8051-Kern, aber Pin-Bezeichnungen wie ein 
AVR. Wer denkt sich denn so was aus?

Ansonsten: mit
1
sbit Name = Bit;
 definiert man Bits um, mit
1
sfr All_LEDs = IOB;
 sollte es da für den Port gehen.
Alternativ auch die Definition über die Port-Adresse mit
1
sfr at IOB All_LEDs;
ebenso funktionieren.

: Bearbeitet durch User
von htl? (Gast)


Lesenswert?

erinnert mich stark an mein erstes projekt in der htl stp kann das sein? 
^^

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.