1 | .include "m128def.inc"
|
2 |
|
3 | ;-------Macros-------------------------------------------------------------
|
4 |
|
5 | ; Pin Toggeln
|
6 | .macro TogPin
|
7 | SBIS @0,@1 ; Wenn Bit (@1) in I/O-Reg. (@2) gesetzt, überspringe nächsten Befehl
|
8 | rjmp SetPin
|
9 | ClrPin: cbi @0,@1
|
10 | rjmp TogPinx
|
11 | SetPin: SBI @0,@1
|
12 | TogPinx:
|
13 | .endmacro
|
14 |
|
15 |
|
16 | .def akku = r16 ; r16 als Rechenregister "akku" definieren
|
17 | .def msTimer = r23 ; r23 als Zeit-Einstellungsregister
|
18 | ; r24 als Zählregister
|
19 | .def templ = r17 ; Zwischenspeicher 1
|
20 | .def temp2 = r18 ; Zwischenspeicher 2
|
21 | .def PulsCounter = r19
|
22 | .equ key_pin = PINA ; Tasterpins
|
23 | .equ key_port = PORTA ; Datenregister (Taster)
|
24 | .equ key_ddr = DDRA ; Datenrichtungsregister (Taster)
|
25 |
|
26 | .equ led_port = PORTB ; Datenregister (LED)
|
27 | .equ led_pin = PINB
|
28 | .equ led_ddr = DDRB ; Datenrichtungsregister (LED)
|
29 |
|
30 |
|
31 | jmp RESET ; Reset
|
32 | jmp EXT_INT0 ; IRQ0 Request
|
33 | jmp EXT_INT1 ; IRQ1 Request
|
34 | jmp EXT_INT2 ; IRQ2 Request
|
35 | jmp EXT_INT3 ; IRQ3 Request
|
36 | jmp EXT_INT4 ; IRQ4 Request
|
37 | jmp EXT_INT5 ; IRQ5 Request
|
38 | jmp EXT_INT6 ; IRQ6 Request
|
39 | jmp EXT_INT7 ; IRQ7 Request
|
40 | jmp TIMER2_COMP ; Timer2 Compare
|
41 | jmp TIMER2_OVF ; Timer2 Overflow
|
42 | jmp TIMER1_CAPT ; Timer1 Capture
|
43 | jmp TIMER1_COMPA ; Timer1 CompareA
|
44 | jmp TIMER1_COMPB ; Timer CompareB
|
45 | jmp TIMER1_OVF ; Timer1 Overflow
|
46 | jmp TIMER0_COMP ; Timer0 Compare
|
47 | jmp TIMER0_OVF ; Timer0 Overflow
|
48 | jmp SPI_STC ; SPI Serial Transfer Complete
|
49 | jmp USART0_RXC ; USART0, Rx Complete
|
50 | jmp USART0_UDRE ; USART0 Data Register Empty
|
51 | jmp USART0_TXC ; USART0, Tx Complete
|
52 | jmp ADC_COMP ; ADC Conversion Complete
|
53 | jmp EE_READY ; EEPROM Ready
|
54 | jmp ANALOG_COMP ; Analog Comparator
|
55 | jmp TIMER1_COMPC ; Timer1 CompareC
|
56 | jmp TIMER3_CAPT ; Timer3 Capture
|
57 | jmp TIMER3_COMPA ; Timer3 CompareA
|
58 | jmp TIMER3_COMPB ; Timer3 CompareB
|
59 | jmp TIMER3_COMPC ; Timer3 CompareC
|
60 | jmp TIMER3_OVF ; Timer3 Overflow
|
61 | jmp USART1_RXC ; USART1, Rx Complete
|
62 | jmp USART1_UDRE ; USART1, Data Register Empty
|
63 | jmp USART1_TXC ; USART1, Tx Complete
|
64 | jmp TWI ; 2-wire Serial Interface
|
65 | jmp SPM_READY ; Store Program Memory Read
|
66 |
|
67 | RESET: ldi r16,high(RAMEND)
|
68 | out SPH,r16
|
69 | ldi r16,Low(RAMEND)
|
70 | out SPL,r16
|
71 |
|
72 | ;***************** PORTA ********************
|
73 | ldi r16,$00
|
74 | out DDRA,r16
|
75 |
|
76 | ldi r16,$00
|
77 | out PORTA,r16
|
78 |
|
79 | ;***************** PORTB ********************
|
80 | ldi r16,$FF
|
81 | out DDRB,r16
|
82 |
|
83 | ldi r16,$00
|
84 | out PORTB,r16
|
85 |
|
86 | ;************ TIMER_COUNTER_1 ***************
|
87 | ldi r16,$00 ;TICIE1,OCIE1A,TOIE1
|
88 | out TIMSK,r16
|
89 |
|
90 | ldi r16,1<<WGM12|1<<CS12 ;ICNC1,ICES1,WGM13,WGM12,CS12,CS11,CS10
|
91 | out TCCR1B,r16
|
92 |
|
93 | ldi r16,High($0099) ;
|
94 | out OCR1AH,r16
|
95 |
|
96 | ldi r16,Low($0099) ;
|
97 | out OCR1AL,r16
|
98 |
|
99 | loop: in templ,TIFR
|
100 | SBRC templ,4
|
101 | rcall Count
|
102 | rjmp loop
|
103 |
|
104 |
|
105 | Count: out led_port,PulsCounter
|
106 | inc PulsCounter
|
107 | ; breq CountExit ; wenn du Zählen willst falsch,beim nächsten inc wieder 0
|
108 | ; ldi PulsCounter,0xFF ; auch
|
109 |
|
110 | CountExit: in akku,TIFR
|
111 | cbr akku,1<<OCF1A ; ~ gehört da nicht hin
|
112 | out TIFR,akku
|
113 | ret
|
114 |
|
115 | ;=================================== Interrupt Handler ===================================
|
116 | EXT_INT0: reti ; IRQ0 Request
|
117 | EXT_INT1: reti ; IRQ1 Request
|
118 | EXT_INT2: reti ; IRQ2 Request
|
119 | EXT_INT3: reti ; IRQ3 Request
|
120 | EXT_INT4: reti ; IRQ4 Request
|
121 | EXT_INT5: reti ; IRQ5 Request
|
122 | EXT_INT6: reti ; IRQ6 Request
|
123 | EXT_INT7: reti ; IRQ7 Request
|
124 | TIMER2_COMP: reti ; Timer2 Compare
|
125 | TIMER2_OVF: reti ; Timer2 Overflow
|
126 | TIMER1_CAPT: reti ; Timer1 Capture
|
127 | TIMER1_COMPA: reti ; Timer1 CompareA
|
128 | TIMER1_COMPB: reti ; Timer CompareB
|
129 | TIMER1_OVF: reti ; Timer1 Overflow
|
130 | TIMER0_COMP: reti ; Timer0 Compare
|
131 | TIMER0_OVF: reti ; Timer0 Overflow
|
132 | SPI_STC: reti ; SPI Serial Transfer Complete
|
133 | USART0_RXC: reti ; USART0, Rx Complete
|
134 | USART0_UDRE: reti ; USART0 Data Register Empty
|
135 | USART0_TXC: reti ; USART0, Tx Complete
|
136 | ADC_COMP: reti ; ADC Conversion Complete
|
137 | EE_READY: reti ; EEPROM Ready
|
138 | ANALOG_COMP: reti ; Analog Comparator
|
139 | TIMER1_COMPC: reti ; Timer1 CompareC
|
140 | TIMER3_CAPT: reti ; Timer3 Capture
|
141 | TIMER3_COMPA: reti ; Timer3 CompareA
|
142 | TIMER3_COMPB: reti ; Timer3 CompareB
|
143 | TIMER3_COMPC: reti ; Timer3 CompareC
|
144 | TIMER3_OVF: reti ; Timer3 Overflow
|
145 | USART1_RXC: reti ; USART1, Rx Complete
|
146 | USART1_UDRE: reti ; USART1, Data Register Empty
|
147 | USART1_TXC: reti ; USART1, Tx Complete
|
148 | TWI: reti ; 2-wire Serial Interface
|
149 | SPM_READY: reti ; Store Program Memory Read
|
150 | ;=================================== End of Interrupts ===================================
|
151 |
|
152 | ;====================================== End of File ======================================
|