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
|
16 |
|
17 | SJMP Loop3 ;....wird die Schleife neu gestartet
|
18 |
|
19 |
|
20 |
|
21 | ende:
|
22 |
|
23 | LCALL Start_DMX
|
24 | ret
|