1 | INIT:
|
2 | .DEF Temp1 = r16
|
3 | .DEF Mask = r17
|
4 | .DEF WL = r24
|
5 | .DEF WH = r25
|
6 |
|
7 | .EQU LEDPin = 0
|
8 | .EQU T0Pin = 0
|
9 | .EQU T1Pin = 1
|
10 |
|
11 | ;Def. Ausgaenge
|
12 | ldi Temp1, 0x00
|
13 | out DDRB, Temp1
|
14 | sbi DDRB, LEDPin ;LEDPin Bit in PORTB als Ausgang (1) setzen
|
15 | sbi PORTB, LEDPin ;Ausgang auf HIGH setzen (LED gegen VCC - STK500)
|
16 |
|
17 | ldi Mask, 0x01
|
18 |
|
19 | ;Def. Eingaenge
|
20 | ldi Temp1, 0x00
|
21 | out DDRD, Temp1 ;PORTD alle Pins als Eingang def.
|
22 | ldi Temp1, 0x03 ;0b0000 0011
|
23 | out PORTD, Temp1
|
24 |
|
25 | ;-------------------------------------------------------------------------------------------------------
|
26 | ; Hauptprogramm
|
27 | ;-------------------------------------------------------------------------------------------------------
|
28 | MAIN: in Temp1, PORTB
|
29 | eor Temp1, Mask
|
30 |
|
31 | out PORTB, Temp1
|
32 |
|
33 | in Temp1, PIND ;Register PIND einlesen (Zustaende der Taster)
|
34 | cpi Temp1, 0x03
|
35 | breq F100HZ ;PIND = 0b0000 0011 => springe zu F100HZ
|
36 | cpi Temp1, 0x02
|
37 | breq F50HZ ;PIND = 0b0000 0010 => springe zu F50HZ
|
38 | cpi Temp1, 0x01
|
39 | breq F5HZ ;PIND = 0b0000 0001 => springe zu F5HZ
|
40 | cpi Temp1, 0x00
|
41 | breq F1HZ ;PIND = 0b0000 0000 => springe zu F1HZ
|
42 |
|
43 | F100HZ: ;Schleife fuer 100Hz LED Blinkfrequenz (5ms an / 5ms aus)
|
44 | ldi XL, 0x05
|
45 | ldi XH, 0x00 ;Startwert der aeusseren Wiederhol-Schleife
|
46 | LOOP100HZ2:
|
47 | ldi WL, 0xD0
|
48 | ldi WH, 0x07 ;Startwert entspr. 1ms bei 8MHz
|
49 | LOOP100HZ1:
|
50 | sbiw WL, 1 ;Dekrmentieren des Register W um 1
|
51 |
|
52 | brne LOOP100HZ1 ;Zeitschleife bis W = 0
|
53 |
|
54 | sbiw X, 1
|
55 | brne LOOP100HZ2 ;Zeitschleife bis X = 0
|
56 |
|
57 | rjmp MAIN ;Endlosschleife
|
58 |
|
59 |
|
60 | F50HZ: ;Schleife fuer 50Hz LED Blinkfrequenz (10ms an / 10ms aus)
|
61 | ldi XL, 0x0A
|
62 | ldi XH, 0x00 ;Startwert der aeusseren Wiederhol-Schleife
|
63 | LOOP50HZ2:
|
64 | ldi WL, 0xD0
|
65 | ldi WH, 0x07 ;Startwert 1ms bei 8MHz
|
66 | LOOP50HZ1:
|
67 | sbiw WL, 1 ;Dekrmentieren des Register W um 1
|
68 |
|
69 | brne LOOP50HZ1 ;Zeitschleife bis W = 0
|
70 |
|
71 | sbiw X, 1
|
72 | brne LOOP50HZ2 ;Zeitschleife bis X = 0
|
73 |
|
74 | rjmp MAIN ;Endlosschleife
|
75 |
|
76 |
|
77 | F5HZ: ;Schleife fuer 5Hz LED Blinkfrequenz (25ms an / 25ms aus)
|
78 | ldi XL, 0x19
|
79 | ldi XH, 0x00 ;Startwert der aeusseren Wiederhol-Schleife
|
80 | LOOP5HZ2:
|
81 | ldi WL, 0xD0
|
82 | ldi WH, 0x07 ;Startwert 1ms bei 8MHz
|
83 | LOOP5HZ1: sbiw WL, 1 ;Dekrmentieren des Register W um 1
|
84 |
|
85 | brne LOOP5HZ1 ;Zeitschleife bis W = 0
|
86 |
|
87 | sbiw X, 1
|
88 | brne LOOP5HZ2 ;Zeitschleife bis X = 0
|
89 |
|
90 | rjmp MAIN ;Endlosschleife
|
91 |
|
92 |
|
93 | F1HZ: ;Schleife fuer 1Hz LED Blinkfrequenz (500ms an / 500ms aus)
|
94 | ldi XL, 0xF4
|
95 | ldi XH, 0x01 ;Startwert der aeusseren Wiederhol-Schleife
|
96 | LOOP1HZ2:
|
97 | ldi WL, 0xD0
|
98 | ldi WH, 0x07 ;Startwert 1ms bei 8MHz
|
99 | LOOP1HZ1: sbiw WL, 1 ;Dekrmentieren des Register W um 1
|
100 |
|
101 | brne LOOP1HZ1 ;Zeitschleife bis W = 0
|
102 |
|
103 | sbiw X, 1
|
104 | brne LOOP1HZ2 ;Zeitschleife bis X = 0
|
105 |
|
106 | rjmp MAIN ;Endlosschleife
|