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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.