;****** PunktMatrix 4.0 (c) Oliver Mezger 7.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;Zaehler fuer Zeichenwechsel .def itmp = R21 ;tmp-Register bei Interrupt .def led = R22 ;RGB-LED animieren jmp reset ;Einsprung nach Reset .org OVF0addr ;Einsprung nach Timer0 Ueberlauf jmp isr_timer ;nach ISR .org $2a ;folgender Code ab Adresse $2a isr_timer: in itmp,SREG ;SREG retten push itmp sbrs spalte,5 ;wenn nicht Spalte 6 rjmp nspalte ;dann naechste Spalte 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 itmp,5 ;5 Byte pro Zeichen mul itmp,zeichen ;Position in der Tabelle add ZL,R0 ;Addiere Position adc ZH,R1 nspalte: lpm itmp, z+ ;lade Daten aus Flash out PORTA,itmp ;ausgeben Spalte in itmp, PORTC andi itmp,0b11100000 or itmp,spalte out PORTC,itmp ;Spalte einschalten rol spalte ;naechste Spalte pop itmp out SREG,itmp reti ;return from Interrupt reset: ;Hauptprogramm 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 ldi tmp,3 ;Systemtakt / 64 out TCCR0,tmp in tmp,TIMSK ;Timerinterrupt einschalten ori tmp, 1 << TOIE0 out TIMSK,tmp sei ;globale Interruptfreigabe loop: inc led ;naechste Farbe andi led,7 ;nur von 0 bis 7 mov tmp,led swap tmp ;vertausche Nibble lsl tmp ;und noch einmal schieben in tmp2,PORTC ;schreibe auf PORTC andi tmp2,0b00011111 or tmp2,tmp out PORTC,tmp2 rcall wait rjmp loop wait: ldi tmp,150 ;aeusseren Zaehler laden 150 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