mewtodmx.asm


1
.include "m324pdef.inc"
2
3
4
.def rmp =     R16
5
.def templ =   R17
6
.def temph =  R18
7
.def status =  R25
8
9
.equ ch0out = $0100
10
.equ ch1out = $0101
11
.equ ch512out=$0301
12
13
;*********************************Bit Positionen Status*********************************
14
15
.equ start = 0
16
.equ brk   = 1
17
18
.cseg
19
.org $0000
20
        rjmp init
21
        reti
22
        reti ;IRQ 0
23
        reti
24
        reti ;IRQ 1
25
        reti
26
        reti ;IRQ 2
27
        reti 
28
        reti ;PCINT 0
29
        reti
30
        reti ;PCINT 1
31
        reti
32
        reti ;PCINT 2
33
        reti
34
        reti ;PCINT 3
35
        reti
36
        reti ;Watchdog timeout
37
        reti
38
        reti ;TIM2 COMPA
39
        reti
40
        reti ;TIM2 COMPB
41
        reti
42
        reti ;TIM2 OVF
43
        reti
44
        reti ;TIM1 CAPT
45
        reti
46
        reti ;TIM1 COMPA
47
        reti
48
        reti ;TIM1 COMPB
49
        reti 
50
        reti ;TIM1 OVF
51
        reti
52
        rjmp breakend ;TIM0 COMPA
53
        reti
54
        reti ;TIM0 COMPB
55
        reti
56
        reti ;TIM0 OVF
57
        reti
58
        reti ;SPI Transfer Complete
59
        reti
60
        reti ;USART0 RX Complete
61
        reti
62
        reti;USART0 UDR empty
63
        reti
64
        rjmp breaksend;USART0 TX Complete
65
        reti
66
        reti ;Analog Comparator
67
        reti
68
        reti ;ADC Conversion complete
69
        reti
70
        reti ;EE_RDY
71
        reti
72
        reti ;TWI
73
        reti
74
        reti ;SPM_RDY
75
        reti
76
        reti ;USART1 RX Complete
77
        reti
78
        reti ;USART1 UDR Empty
79
        reti
80
        reti ;USART1 TX Complete
81
             
82
83
84
85
init:      ldi zl, low($0100)
86
        ldi zh, high($0100)
87
        ldi templ,low(ramend)
88
        ldi temph,high(ramend)
89
        ldi rmp,128
90
ramreset:    st Z+,rmp
91
        cp zl,templ
92
        cp zh,temph
93
        brlo ramreset
94
        ldi rmp,HIGH(RAMEND)   
95
              out SPH,rmp
96
        ldi rmp,LOW(RAMEND)
97
        out SPL,rmp
98
        ldi rmp,1
99
        sts ubrr0l,rmp
100
        clr rmp
101
        sts ubrr0h,rmp
102
        ldi rmp,0b01011000  ;rx compete IE, Txcomplete IE,UDR empty IE, RXE,TXE,size,not used
103
        sts ucsr0b,rmp
104
        ldi rmp,0b00001110  ; asynchronus,no parity, 2stoppbit,8bit,polarity
105
        sts ucsr0C,rmp
106
        ldi rmp,0b00000000  ; no pwm no oc
107
        out TCCR0A,rmp
108
        ldi rmp,0b00000010  ; no pwm no oc prescaler 8
109
        out TCCR0B,rmp
110
        ldi rmp,83
111
        out ocr0a,rmp
112
        clr status
113
        clr XL
114
        clr XH
115
        ldi rmp,0b00000010
116
        out ddrd,rmp
117
        sbr status,1<<start
118
        lds rmp,udr0
119
        sei
120
121
122
loop:      rcall dmxsend
123
        rjmp loop
124
125
126
dmxsend:     sbrc status,brk
127
        ret
128
        sbrs status,start
129
        rjmp dmxsend1
130
        cbr status,1<<start
131
        ldi XL,low(ch0out)
132
        ldi XH,high(ch0out)
133
        ldi rmp,(1<<TXC0)
134
        sts UCSR0A,rmp
135
        lds rmp,udr0
136
137
        
138
139
dmxsend1:    lds rmp,ucsr0a
140
        sbrs rmp,udre0
141
        ret
142
        ldi templ,low(ch512out)
143
        ldi temph,high(ch512out)
144
        cp xl,templ
145
        cpc xh,temph
146
        brsh makebrake
147
        ld rmp,x+
148
        sts udr0,rmp
149
        ret
150
                    
151
152
153
makebrake:     sbr status,1<<brk
154
        ret
155
        
156
157
158
159
160
;******************************TX Complete Intr. (Breakon)**************************************
161
162
breaksend:    push rmp
163
        in rmp,sreg
164
        push rmp
165
166
        out tcnt0,rmp    ;Timer auf null setzen
167
        ldi rmp,0b00000010  ;OC0a Intr enablen
168
        sts timsk0,rmp
169
        ldi rmp,0b00000111
170
        out tifr0,rmp
171
        
172
        pop rmp
173
        out sreg,rmp
174
        pop rmp
175
        reti
176
177
178
;*****************************OC0A Intr. (Breakoff) ********************************************
179
180
breakend:    push rmp
181
        in rmp,sreg
182
        push rmp
183
184
        cbr status,1<<brk
185
        sbr status,1<<start
186
        ldi rmp,0b00000000
187
        sts timsk0,rmp
188
189
        pop rmp
190
        out sreg,rmp
191
        pop rmp
192
        reti