stepper.asm


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