1 | .include "m16def.inc" ;Definitionen für den ATMega16 einbinden
|
2 | .org 0x0000 ;Die Interruptvektortabelle beginnt bei 0x0000
|
3 |
|
4 |
|
5 | rjmp RESET ;1 POWER ON RESET
|
6 | rjmp INT0_HANDLER ;2 Int0-Interrupt
|
7 | rjmp INT1_HANDLER ;3 Int1-Interrupt
|
8 | reti ;4
|
9 | reti ;5
|
10 | reti ;6
|
11 | reti ;7
|
12 | reti ;8
|
13 | reti ;9
|
14 | reti ;10
|
15 | reti ;11
|
16 | reti ;12
|
17 | reti ;13
|
18 | reti ;14
|
19 | reti ;15
|
20 | reti ;16
|
21 | reti ;17
|
22 | reti ;18
|
23 | reti ;19
|
24 | reti ;20
|
25 | reti ;21
|
26 |
|
27 | RESET: ;RESET Label
|
28 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
29 | ldi r16, high(RAMEND) ;Initialisierung des Stackpointers
|
30 | out SPH, r16 ;erst das High - Byte
|
31 | ldi r16, low(RAMEND)
|
32 | out SPL, r16 ;dann das Low - Byte
|
33 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
34 |
|
35 |
|
36 |
|
37 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
38 |
|
39 | in R16,MCUCSR ; Read MCUCSR
|
40 | ori R16,1 << JTD ; Set jtag disable flag
|
41 | out MCUCSR, R16 ; Write MCUCSR
|
42 | out MCUCSR, R16 ; and again as per datasheet
|
43 |
|
44 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
45 |
|
46 |
|
47 | ldi r16, 0xFF ;PORTC als Ausgang konfigurieren
|
48 | out DDRC, r16
|
49 |
|
50 | ldi r16, 0x00 ;PORTD als Eingang konfigurieren
|
51 | out DDRD, r16
|
52 | ldi r16, 0xFF ;Pull-up Widerstände für PORTD
|
53 | out PORTD, r16 ;einschalten
|
54 | ldi r16, 0b00001010 ;INT0 und INT1 einstellen für fallenden flanke
|
55 | out MCUCR, r16 ;FALLENDE Flanke löst den Interrupt aus
|
56 | ldi r16, (1<<INT0) | (1<<INT1) ; hier nur int0 und int1 aktivieren
|
57 | out GICR, r16 ; hier freigabe für int0 und int1
|
58 |
|
59 |
|
60 | ; in der m16def.inc in Zeile 219 -220 findet man folgendes:
|
61 | ;.equ INT0 = 6 ; External Interrupt Request 0 Enable
|
62 | ;.equ INT1 = 7 ; External Interrupt Request 1 Enable
|
63 |
|
64 |
|
65 |
|
66 | sei ; globale Interruptfreigabe
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | ;;;;;;;;;;;;;;;;;;;;;;;;; test
|
72 | ;ldi r19, 0b11111111
|
73 | ;out PORTC, r19
|
74 |
|
75 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
76 |
|
77 | WDH:
|
78 | rjmp WDH ;Hauptprogrammschleife macht nichts
|
79 |
|
80 | INT0_HANDLER: ;macht die led an
|
81 | push r16 ;Inhalt von r16 retten
|
82 | in r16, SREG ;Inhalt des Statusregisters retten
|
83 | push r16
|
84 | ldi r16, 0b11111111
|
85 | out PORTC, r16
|
86 | pop r16 ;Statusregister wieder herstellen
|
87 | out SREG, r16
|
88 | pop r16 ;r16 wieder herstellen
|
89 | reti ;Rückkehr von der ISR
|
90 |
|
91 | INT1_HANDLER: ;macht die led aus
|
92 | push r16 ;Inhalt von r16 retten
|
93 | in r16, SREG ;Inhalt des Statusregisters retten
|
94 | push r16
|
95 | ldi r16, 0b00000000
|
96 | out PORTC, r16
|
97 | pop r16 ;Statusregister wieder herstellen
|
98 | out SREG, r16
|
99 | pop r16 ;r16 wieder herstellen
|
100 | reti ;Rückkehr von der ISR
|