1 | ;PWM
|
2 |
|
3 | .NOLIST
|
4 | .INCLUDE "m32def.inc"
|
5 | .LIST
|
6 |
|
7 |
|
8 |
|
9 | .CSEG
|
10 | .org 0
|
11 |
|
12 | ; Interupt Vektoren ATmega32
|
13 | rjmp init ; Reset Handler
|
14 | reti ; IRQ0 Handler
|
15 | reti ; IRQ1 Handler
|
16 | reti ; IRQ2 Handler
|
17 | reti ; Timer2 Compare Handler
|
18 | reti ; Timer2 Overflow Handler
|
19 | reti ; Timer1 Capture Handler
|
20 | rjmp T1int ; Timer1 CompareA Handler
|
21 | reti ; Timer1 CompareB Handler
|
22 | reti ; Timer1 Overflow Handler
|
23 | reti ; Timer0 Compare Handler
|
24 | reti ; Timer0 Overflow Handler
|
25 | reti ; SPI Transfer Complete Handler
|
26 | reti ; USART RX Complete Handler
|
27 | reti ; UDR Empty Handler
|
28 | reti ; USART TX Complete Handler
|
29 | reti ; ADC Conversion Complete Handler
|
30 | reti ; EEPROM Ready Handler
|
31 | reti ; Analog Comparator Handler
|
32 | reti ; Two-wire Serial Interface Handler
|
33 | reti ; Store Program Memory Ready Handler
|
34 |
|
35 |
|
36 | ;=============================================================
|
37 | ;Initialisierung
|
38 | ;=============================================================
|
39 | init:
|
40 | ;Stackpointer
|
41 | ldi r16, LOW(RAMEND)
|
42 | out SPL, r16
|
43 | ldi r16, HIGH(RAMEND)
|
44 | out SPH, r16
|
45 |
|
46 |
|
47 | ;Aus/Eingänge
|
48 |
|
49 | ; PORTA
|
50 | ; PortPins 76543210
|
51 | ldi r20, 0b00000000 ; 0 Input, 1 Output
|
52 | out DDRD, r20 ; Port D IO
|
53 |
|
54 | ; PORTB
|
55 | ; PortPins 76543210
|
56 | ldi r20, 0b11111000 ; 0 Input, 1 Output
|
57 | out DDRB, r20 ; Port B IO
|
58 |
|
59 | sbi PORTB, 6 ; B6 auf High, CW
|
60 | sbi PORTB, 5 ; B5 auf High, Reset
|
61 | sbi PORTB, 4 ; B4 auf High, Half
|
62 |
|
63 | ; PORTC
|
64 | ; PortPins 76543210
|
65 | ldi r20, 0b00000000 ; 0 Input, 1 Output
|
66 | out DDRD, r20 ; Port D IO
|
67 |
|
68 | ; PORTD
|
69 | ; PortPins 76543210
|
70 | ldi r20, 0b10110011 ; 0 Input, 1 Output
|
71 | out DDRD, r20 ; Port D IO
|
72 |
|
73 | sbi PORTD, 0 ; D0 auf High, Half
|
74 | sbi PORTD, 1 ; D1 auf High, Reset
|
75 | sbi PORTD, 4 ; D4 auf High, CW
|
76 |
|
77 |
|
78 | ;PWM0 - Drehteller
|
79 |
|
80 | ldi r20, 38 ; CompareWert
|
81 | out OCR0, r20
|
82 |
|
83 | ldi r20, 0b00011100 ; Timer0 Mode: CTC, Toggle OCO, Prescaler256
|
84 | out TCCR0, r20
|
85 |
|
86 |
|
87 | ;PWM2 - Behälter
|
88 |
|
89 | ldi r20, 38 ;CompareWert
|
90 | out OCR2, r20
|
91 |
|
92 | ldi r20, 0b00011100 ;Timer2 Mode: CTC, Toggle OC2, Prescaler 256
|
93 | out TCCR2, r20
|
94 |
|
95 |
|
96 | ; Timer1 - Sekundentakt
|
97 |
|
98 | ldi r20, 0x0F ;CompareWert High Byte
|
99 | ldi r21, 0x41 ;CompareWert Low Byte (3905)
|
100 | out OCR1AH, r20
|
101 | out OCR1AL, r21
|
102 |
|
103 | ldi r20, 0b00000000 ;Timer1 Mode: kein Ausgang
|
104 | out TCCR1A, r20
|
105 | ldi r20, 0b00001101 ;Timer1 Mode: CTC, Prescaler 1024
|
106 | out TCCR1B, r20
|
107 |
|
108 | ldi r20, 0b00010000 ;Interruptfreigabe CompareMatch
|
109 | out TIMSK, r20
|
110 |
|
111 | ;Interrupt Freigabe
|
112 | sei ; Globale Interruptfreigabe
|
113 |
|
114 | sbi PORTD, 5 ; D5 auf High, Enable
|
115 | sbi PORTB, 7 ; B7 auf High, Enable
|
116 |
|
117 | ;=============================================================
|
118 | ;Hauptprogramm
|
119 | ;=============================================================
|
120 | Main:
|
121 | nop
|
122 | rjmp Main
|
123 |
|
124 |
|
125 | ;=============================================================
|
126 | ;Timer1 ISR
|
127 | ;=============================================================
|
128 | T1int:
|
129 | sbic PORTB, 7
|
130 | rjmp clearB7
|
131 | sbi PORTB, 7
|
132 | reti
|
133 |
|
134 | clearB7:
|
135 | cbi PORTB, 7
|
136 | reti
|