Forum: Mikrocontroller und Digitale Elektronik Port beim Atmel 89c51cc03 invertieren


von Marcel (Gast)


Lesenswert?

Hallo Leute,


ich fange gerade mit der Assembler-Programmierung an.

Ich habe mir eine Kiste gebaut mit einem LCD-Display, einem 8-Fach 
Mäuse-Klavier und 8 LED's die fest auf High gelegt sind ( das heist ich 
muss Low mit dem µC schalten damit die leuchten ).

Da die LED's jetzt so verschaltet sind, ist meine Programmierung jetzt 
verkehrt herum, man kann den Port bestimmt am Anfang des Programms 
einfach invertieren. In der Befehlsliste habe ich den Befehl /bit 
gefunden, ist der dafür? Wenn ja, wie wende ich den an.

Das LCD-Display möchte ich gerne über PWM dimmen, wie muss ich das 
Programmieren?

Ich danke euch schon mal für eure Hilfe!


Gruß Marcel

von Peter D. (peda)


Lesenswert?

Marcel wrote:
> Da die LED's jetzt so verschaltet sind, ist meine Programmierung jetzt
> verkehrt herum, man kann den Port bestimmt am Anfang des Programms
> einfach invertieren.

LED an: CLR Portpin
LED aus: SETB Portpin

Druck Dir am besten den Befehlssatz aus.


> Das LCD-Display möchte ich gerne über PWM dimmen, wie muss ich das
> Programmieren?

Abschnitt PCA im Datenblatt


Peter

von Ralf (Gast)


Lesenswert?

> ...man kann den Port bestimmt am Anfang des Programms einfach invertieren.
Jein. Port invertieren geht so nicht. Aber wenn dein Assembler Macros 
unterstützt, kannst du dir separate Kommandos erzeugen, die wie ein 
Befehl aussehen, aber wie mehrere wirken, ähnlich dem #define in C.

Also in etwa so (Pseudo-Code):
1
.beginmacro LED0_ON
2
clr P0.0
3
.endmacro
4
.beginmacro LED1_ON
5
clr P0.1
6
.endmacro
7
...
8
.beginmacro LED6_OFF
9
setb P0.6
10
.endmacro
11
.beginmacro LED7_OFF
12
setb P0.7
13
.endmacro

Die genaue Implementation ist natürlich vom verwendeten Assembler 
abhängig. Es muss nicht unbedingt ein Makro sein, je nachdem was der 
Assembler alles kann. Im Fall eines Makros kann es sogar sein, dass 
Makro-Parameter unterstützt werden, d.h. wenn du es geschickt 
implementierst, brauchst du nur zwei Makros (ON und OFF) und kannst über 
einen Parameter bestimmen, welches Portbit es betrifft.

> In der Befehlsliste habe ich den Befehl /bit gefunden, ist der dafür? Wenn
> ja, wie wende ich den an.
Wie Peter oben schon geschrieben hat, CLR und SETB sind dein Freund.

Eine Befehlsreferenz gibts hier (alles zusammen wird gerne die 
8051-Bibel genannt):

http://www.semiconductors.philips.com/acrobat/various/80C51_FAM_ARCH_1.pdf
http://www.semiconductors.philips.com/acrobat/various/80C51_FAM_HARDWARE_1.pdf
http://www.semiconductors.philips.com/acrobat/various/80C51_FAM_HARDWARE_1.pdf

Ralf

von F. B. (isicon)


Lesenswert?

warum nicht einfach eine XOR verknüpfung von Port mit 0xFF ?

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.