Hallo,
ich bin dabei eine Lichsteuerung für den DMX Bus mit einem 80C517A zu
programmieren.
Die DMX Ausgabe funktioniert. Ich kann beliebige Werte auf 512 Kanälen
ausgeben. Die Werte der Kanäle speichere ich auf einem ext.Ram.
Mein Problem war das ich anfangs Datenmüll im Speicher stehen hatte.
Ich habe ein Unterprogramm zum 0 setzen geschrieben. Dies wird einmalig
nach dem einschalten aufgerufen. Schein auch alles zu funktionieren.
Meine Frage an Euch: Kan ich das so machen oder gibt es
Verbesserungsmöglichkeiten, oder sogar eine Fehler den ich nicht finde?
Hier werden nur 255 Kanäle genutzt, da nicht mehr benötigt werden.
Hier mal der Code:
1
dmx_clear:
2
mov DPTR,#00fah ; Datenpointer Adresse 0000
3
4
mov a,#0000h ; zu speichernde Wert setzen
5
Loop3:
6
movx @DPTR,a ; Wert in die Speicherstelle (auf die der
7
; DPTR zeigt) speichern, Anfangsadresse=0000h
8
9
INC DPTR ;Adresse um 1 erhöhen
10
11
mov a,dpl ;Adresse in Akku schreiben
12
13
jz ende ;Der Inhalt des Akku wird auf 0 abgefragt.Wenn Ja Schleife beenden, wenn Nein....
14
15
mov a,#0000h ;den zu speichernden Wert wiederherstellen
Gewöhnlich ließt man ja nicht Daten aus einem RAM, was nach Einschaltung
zufällige Daten enthält. Entweder initialisiert man es komplett, oder
den Bereich, den man nutzt. Compiler machen das teils auch automatisch
während der Initialisierung.
Mit DPTR und MOVX-Befehlen wird es schon richtig sein. Man setzt den
DPTR auf die gewünschte Anfangsadresse, und vergleicht nach jedem Byte
DPH und DPL mit der Endadresse.
Nur mal so eine Frage am Rande, wieso benutzt du #0000h und nicht #00h
als Konstante für den Akkumulator?
Der Akku ist 8Bit breit, weshalb es sinnvoll wäre auch die Notation
dementsprechend anzupassen. Das Ergebnis ist zwar das Gleiche, aber
zumindest wäre dann die Schreibweise korrekt.
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.