;****** PunktMatrix 1.0 (c) Oliver Mezger 6.7.2009 ; Balken wandert von Spalte 1 bis Spalte 5 .include "m16def.inc" .def tmp = R16 ;tmp-Register zum Arbeiten .def tmp2 = R17 .def spalte = R18 ;Spalte für Darstellung .def zeichen = R19 ;Index des Zeichens .def durchlauf = R20 jmp reset ;Einsprung nach Reset .org $2a ;folgender Code ab Adresse $2a reset: ldi tmp,high(RAMEND);Oberste RAM-Adresse holen out SPH, tmp ;Stack-Pointer initialisieren ldi tmp,low(RAMEND) out SPL, tmp ldi tmp,$ff out DDRA,tmp ;PA als Ausgang out DDRC,tmp ;PC als Ausgang spalte1: inc durchlauf ;weiterer Durchlauf cpi durchlauf,50;nach 50 Durchlauf brlo nix clr durchlauf inc zeichen ;neues Zeichen andi zeichen,1 nix: ldi spalte,1 ;Spalte1 initialisieren ldi ZH, high(daten*2) ;Datenzeiger initialisieren ldi ZL, low(daten*2) ldi tmp,5 ;5 Byte pro Zeichen mul tmp,zeichen ;Position in der Tabelle add ZL,R0 ;Addiere Position adc ZH,R1 nspalte: lpm tmp, z+ ;lade Daten aus Flash out PORTA,tmp ;ausgeben Spalte out PORTC,spalte;Spalte einschalten rcall wait ;warte zum Anzeigen rol spalte ;naechste Spalte sbrc spalte,5 ;wenn Spalte 6 rjmp spalte1 ;dann wieder Spalte 1 rjmp nspalte ;sonst naechste Spalte wait: ldi tmp,10 ;aeusseren Zaehler laden 10 ms wl1: ldi tmp2,250 ;inneren Zaehler 1ms bei 1Mhz wl2: nop dec tmp2 ;tmp2-- brne wl2 ;Sprung wenn nicht null dec tmp ;tmp-- brne wl1 ;Sprung wenn nicht null ret daten: .db $08,$04,$7E,$04,$08,$10,$20,$7E,$20,$10