Port beim Atmel 89c51cc03 invertieren

Gast #1132825
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
#1132869
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
Gast #1132940
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren