LCD_interrupt_schieben.asm


1
.include "m8def.inc"
2
3
 
4
.def temp1 = r16
5
.def temp2 = r17
6
.def temp3 = r18
7
.def temp4 = r19
8
.def temp5 = r20
9
10
.org 0x0000
11
           rjmp   main                    ; Reset Handler
12
.org OVF0addr
13
           rjmp   timer0_shift            ; gibt an, welche ISR bei Auslösen des Timer0-Overflow-Interrupts aufgerufen werden soll
14
 
15
.include "lcdroutines.asm"
16
17
18
main: 
19
           ldi    temp1, LOW(RAMEND)      ; LOW-Byte der obersten RAM-Adresse
20
           out    SPL, temp1
21
           ldi    temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten RAM-Adresse
22
           out    SPH, temp1
23
 
24
           rcall  lcd_init                ; Display initialisieren
25
           rcall  lcd_clear               ; Display löschen
26
 
27
           ldi    ZL, LOW(text*2)         ; Adresse des Strings in den
28
           ldi    ZH, HIGH(text*2)        ; Z-Pointer laden
29
        ldi    temp5, 0          ; initialisiere das Register temp5 als Zählvariable für die Anzahl der auszugebenden Zeichen
30
       
31
           rcall  lcd_flash_string        ; Unterprogramm gibt String aus der
32
                                          ; durch den Z-Pointer adressiert wird
33
           ldi    temp4, ( 1 << CS02 ) | ( 0 << CS01 ) | ( 1 << CS00 ) ;setze den Vorteiler des Timers auf 1024
34
           out    TCCR0, temp4        ; ein Interrupt wird nun 15mal pro Sekunde ausgelöst 4MHz/1024/255
35
 
36
           ldi    temp4, (1 << TOIE0 )       ; TOIE0: Interrupt bei Timer0Overflow einschalten
37
           out    TIMSK, temp4
38
           ldi    temp4, 0          ; soll die Anzahl der Interrupts zählen nach 7 Interrupts soll etwas geschehen
39
       sei                ; generelle Aktivierung von Interrupts         
40
                        
41
loop:
42
       rjmp   loop
43
44
45
timer0_shift:
46
       inc    temp4         ; dekrementiert die Zählvariable
47
       cpi    temp4, 7
48
       brne   timer0_shift_1
49
           rcall  lcd_shift_left
50
       ldi    temp4, 0
51
timer0_shift_1:
52
           reti
53
54
55
text:
56
           .db "Das Programmieren macht mir noch grossen Spass",0                ; Stringkonstante, durch eine 0
57
                                       ; abgeschlossen