main.asm


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