1 | ;
|
2 | ;
|
3 | ; Target ATmega8515 @ 8MHz
|
4 | ;
|
5 | ; Status LED = PortE,0 - PE0
|
6 | ;
|
7 | ; Feste DMX Adresse: 1
|
8 |
|
9 |
|
10 |
|
11 | .include "m8515def.inc"
|
12 |
|
13 | ; Register and Pin definitions
|
14 |
|
15 | .def temp =r16
|
16 | .def tempH =r17
|
17 | .def dmx_byte =r19
|
18 | .def DELAY_01 =r21
|
19 | .def DELAY_02 =r22
|
20 | .def DELAY_03 =r23
|
21 | .def null =r1
|
22 |
|
23 | ; interrupt vectors
|
24 |
|
25 | rjmp init ; reset vector address
|
26 | reti ; External Interrupt0 Vector Address
|
27 | reti ; External Interrupt1 Vector Address
|
28 | reti ; Input Capture1 Interrupt Vector Address
|
29 | reti ; Output Compare1A Interrupt Vector Address
|
30 | reti ; Output Compare1B Interrupt Vector Address
|
31 | reti ; Overflow1 Interrupt Vector Address
|
32 | reti ; Overflow0 Interrupt Vector Address
|
33 | reti ; SPI Interrupt Vector Address
|
34 | reti ; UART Recive Complete Interrupt Vector Address
|
35 | reti ; UART Data Register Empty Interrupt Vector Address
|
36 | reti ; UART Transmit Complete Interrupt Vector Address
|
37 | reti ; Analog Comparator Interrupt Vector Address
|
38 | reti ; External Interrupt2 Vector Address
|
39 | reti ; Output Compare0 Interrupt Vector Address
|
40 | reti ; EEPROM Interrupt Vector Address
|
41 | reti ; SPM complete Interrupt Vector Address
|
42 | reti ; SPM complete Interrupt Vector Address
|
43 |
|
44 | ; init
|
45 | init:
|
46 |
|
47 | ldi temp, 0b00000000
|
48 | out DDRD, temp
|
49 |
|
50 | sbi PortD,2
|
51 |
|
52 |
|
53 | ; Stackpointer
|
54 | ldi temp, LOW(RAMEND)
|
55 | out SPL, temp
|
56 | ldi temp, HIGH(RAMEND)
|
57 | out SPH, temp
|
58 |
|
59 | ; Baudrate einstellen
|
60 | ldi temp, 0x01 ; 250 kbbaud @ 8Mhz
|
61 | out UBRRL, temp
|
62 | ldi temp, 0x00
|
63 | out UBRRL, temp
|
64 | ; Frame-Format
|
65 | ldi temp, (1<<URSEL)|(3<<UCSZ0)
|
66 | out UCSRC, temp
|
67 | ; U2X MPCM
|
68 | ldi temp, 0x00
|
69 | out UCSRB, temp
|
70 |
|
71 |
|
72 | Delay_Short: ret
|
73 |
|
74 |
|
75 | DELAY_0: ldi DELAY_01,255
|
76 | DELAY_JUMP_0: dec DELAY_01
|
77 | nop
|
78 | brbc 1,DELAY_JUMP_0
|
79 | ret
|
80 |
|
81 |
|
82 | DELAY_1:
|
83 | DELAY_JUMP_1: ldi DELAY_02,128
|
84 | dec DELAY_02
|
85 | brbc 1,DELAY_JUMP_1
|
86 | ret
|
87 |
|
88 |
|
89 | SEND_DMX_BYTE: sbi UCSRB,0
|
90 | sbi UCSRB,3
|
91 | out UDR,DMX_BYTE
|
92 |
|
93 | WAIT_SENDING: sbis UCSRB,6
|
94 | rjmp WAIT_SENDING
|
95 | cbi UCSRB,3
|
96 | sbi UCSRB,6
|
97 | ret
|
98 |
|
99 | ; Main
|
100 |
|
101 | MAIN:
|
102 | rcall DELAY_0
|
103 | cbi PORTD,1 ; TxD -> Low Send Break
|
104 | rcall DELAY_0
|
105 | sbi PORTD,1 ; TxD -> High
|
106 | rcall DELAY_1
|
107 | ldi DMX_BYTE,0x00 ; Send Startbyte
|
108 | rcall SEND_DMX_BYTE
|
109 | rcall DELAY_1
|
110 | ldi DMX_BYTE,0xFF ; Send 1. Data Byte with DMX String
|
111 | rcall SEND_DMX_BYTE
|
112 | rcall DELAY_1
|
113 |
|
114 | rjmp MAIN
|