www.mikrocontroller.net

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


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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):
.beginmacro LED0_ON
clr P0.0
.endmacro
.beginmacro LED1_ON
clr P0.1
.endmacro
...
.beginmacro LED6_OFF
setb P0.6
.endmacro
.beginmacro LED7_OFF
setb P0.7
.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/vari...
http://www.semiconductors.philips.com/acrobat/vari...
http://www.semiconductors.philips.com/acrobat/vari...

Ralf

Autor: F. Barbarossa (isicon)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.