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 ) | ( 1 << 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/25
|
35 |
|
36 | ldi temp4, 1 << TOIE0 ; TOIE0: Interrupt bei Timer0Overflow einschalten
|
37 | out TIMSK, temp4
|
38 | ldi temp4, 7 ; 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 | ;schieben:
|
45 | ; mov temp4, temp5 ; sichere den Wert der ausgegebenen Zeichen!
|
46 |
|
47 | ;schieben_1:
|
48 | ; rcall lcd_shift_left
|
49 | ; rcall delay500ms
|
50 | ; dec temp4
|
51 | ; cpi temp4, 0
|
52 | ; brne schieben_1
|
53 | ;schieben_2:
|
54 | ; mov temp4, temp5
|
55 | ;schieben_3:
|
56 | ; rcall lcd_shift_right
|
57 | ; rcall delay500ms
|
58 | ; dec temp4
|
59 | ; cpi temp4, 0
|
60 | ; brne schieben_3
|
61 | ; rjmp schieben
|
62 | ;
|
63 | ;
|
64 | ;delay500ms:
|
65 | ; ldi temp3, 100
|
66 | ;delay500ms_1:
|
67 | ; rcall delay5ms
|
68 | ; dec temp3
|
69 | ; cpi temp3, 0
|
70 | ; brne delay500ms_1
|
71 | ; ret
|
72 |
|
73 | ;**************************************************
|
74 |
|
75 | timer0_shift:
|
76 | dec temp4 ; dekrementiert die Zählvariable
|
77 | cpi temp4, 0
|
78 | brsh timer0_shift_1
|
79 | rcall lcd_shift_left
|
80 | ldi temp4, 7
|
81 | timer0_shift_1:
|
82 | reti
|
83 |
|
84 |
|
85 | text:
|
86 | .db "Das Programmieren macht mir noch grossen Spass",0 ; Stringkonstante, durch eine 0
|
87 | ; abgeschlossen
|