1 | .include "m16M1def.inc"
|
2 | .def temp =R16
|
3 | .def temp2 =R17
|
4 | .def daten =R18
|
5 | .def status =R19
|
6 | .def aufgabe =R20
|
7 | .def status_1 =R21
|
8 | .def status_2 =R22
|
9 | .def status_3 =R23
|
10 | .def EEPROM_Adresse =R24
|
11 | .def Zaehler1 =R25
|
12 |
|
13 | .DSEG ;Reserve jeweils 1 Byte / Variabl eim SRAM
|
14 | temp3: .byte 1
|
15 | temp4: .byte 1
|
16 | Status_alt: .byte 1
|
17 | Status_neu: .byte 1
|
18 | Identifier1H: .byte 1
|
19 | Identifier1L: .byte 1
|
20 | Identifier2H: .byte 1
|
21 | Identifier2L: .byte 1
|
22 | Identifier3H: .byte 1
|
23 | Identifier3L: .byte 1
|
24 | Identifier4H: .byte 1
|
25 | Identifier4L: .byte 1
|
26 |
|
27 | .CSEG
|
28 | .ORG 0x0000
|
29 | jmp RESET ; Reset Handler
|
30 | reti; jmp ANA_COMP_0 ; Analog Comparator 0 Handler
|
31 | nop
|
32 | reti; jmp ANA_COMP_1 ; Analog Comparator 1 Handler
|
33 | nop
|
34 | reti; jmp ANA_COMP_2 ; Analog Comparator 2 Handler
|
35 | nop
|
36 | reti; jmp ANA_COMP_3 ; Analog Comparator 3 Handler
|
37 | nop
|
38 | reti; jmp PSC_FAULT ; PSC Fault Handler
|
39 | nop
|
40 | reti; jmp PSC_EC ; PSC End of Cycle Handler
|
41 | nop
|
42 | reti; jmp EXT_INT0 ; IRQ0 Handler
|
43 | nop
|
44 | reti; jmp EXT_INT1 ; IRQ1 Handler
|
45 | nop
|
46 | reti; jmp EXT_INT2 ; IRQ2 Handler
|
47 | nop
|
48 | reti; jmp EXT_INT3 ; IRQ3 Handler
|
49 | nop
|
50 | reti; jmp TIM1_CAPT ; Timer1 Capture Handler
|
51 | nop
|
52 | reti; jmp TIM1_COMPA ; Timer1 Compare A Handler
|
53 | nop
|
54 | reti; jmp TIM1_COMPB ; Timer1 Compare B Handler
|
55 | nop
|
56 | reti; jmp TIM1_OVF ; Timer1 Overflow Handler
|
57 | nop
|
58 | reti; jmp TIM0_COMPA ; Timer0 Compare A Handler
|
59 | nop
|
60 | reti; jmp TIM0_COMPB ; Timer0 Compare B Handler
|
61 | nop
|
62 | reti; jmp TIM0_OVF ; Timer0 Overflow Handler
|
63 | nop
|
64 | reti; jmp CAN_INT ; CAN MOB,Burst,General Errors Handler
|
65 | nop
|
66 | reti; jmp CAN_TOVF ; CAN Timer Overflow Handler
|
67 | nop
|
68 | reti; jmp LIN_TC ; LIN Transfer Complete Handler
|
69 | nop
|
70 | reti; jmp LIN_ERR ; LIN Error Handler
|
71 | nop
|
72 | reti; jmp PCINT0 ; Pin Change Int Request 0 Handler
|
73 | nop
|
74 | reti; jmp PCINT1 ; Pin Change Int Request 1 Handler
|
75 | nop
|
76 | reti; jmp PCINT2 ; Pin Change Int Request 2 Handler
|
77 | nop
|
78 | reti; jmp PCINT3 ; Pin Change Int Request 3 Handler
|
79 | nop
|
80 | reti; jmp SPI_STC ; SPI Transfer Complete Handler
|
81 | nop
|
82 | reti; jmp ADC ; ADC Conversion Complete Handler
|
83 | nop
|
84 | reti; jmp WDT ; Watchdog Timer Handler
|
85 | nop
|
86 | reti; jmp EE_RDY ; EEPROM Ready Handler
|
87 | nop
|
88 | reti; jmp SPM_RDY ; Store Program Memory Ready Handler
|
89 |
|
90 | RESET:
|
91 | Stack_init: ; Stackpointer initialisieren
|
92 | ldi r16, high(RAMEND)
|
93 | out SPH,r16
|
94 | ldi r16, low(RAMEND)
|
95 | out SPL,r16
|
96 | sei ; Interrupts aktivieren
|
97 |
|
98 | Port_init:
|
99 | ldi temp, 0b00000000 ;PortB ist Eingang
|
100 | out ddrb, temp
|
101 | ldi temp, 0b00000001 ;PullUps an Port B aktivieren
|
102 | out Portb, temp
|
103 |
|
104 | ldi temp, 0b01000100 ;Pin2 Ausgang für TX MCP2551 und Pin6 Ausgang für RS MCP2551
|
105 | out ddrc, temp
|
106 | ldi temp, 0b10111011
|
107 | out portc, temp
|
108 |
|
109 | ldi temp, 0b10000000 ;Pin7 Ausgang für LED
|
110 | out ddrd, temp
|
111 |
|
112 | CAN_init:
|
113 | ldi temp, (0<<ABRQ)|(0<<OVRQ)|(0<<TTC)|(0<<SYNTTC)|(0<<LISTEN)|(0<<TEST)|(0<<ENASTB)|(1<<SWRES)
|
114 | sts CANGCON, temp ; CAN General Control Register, software reset
|
115 |
|
116 | Ready_enable:
|
117 | ;lds temp, CANGSTA
|
118 | ;sbrs temp, ENFG ;CAN enable
|
119 | ;rjmp Ready_enable ;springt raus, wenn fertig
|
120 |
|
121 | ;ldi temp, 0b10000000 ;Pin7 Ausgang für LED
|
122 | ;out portd, temp
|
123 |
|
124 | ldi temp, (0<<BRP5)|(0<<BRP4)|(1<<BRP3)|(0<<BRP2)|(0<<BRP1) |(1<<BRP0)
|
125 | sts CANBT1, temp ; set baud rate to 16 kbps bei Stystem Clock 8 Mhz
|
126 | ldi temp, (1<<PRS2)|(1<<PRS1)|(1<<PRS0)
|
127 | sts CANBT2, temp
|
128 | ldi temp, (1<<PHS22)|(1<<PHS21)|(1<<PHS20)|(1<<PHS12)|(1<<PHS11)|(1<<PHS10)|(1<<SMP)
|
129 | sts CANBT3,temp
|
130 |
|
131 | ldi temp, (0<<MOBNB3)|(0<<MOBNB2)|(0<<MOBNB1)|(0<<MOBNB0)|(0<<AINC)|(0<<INDX2)|(0<<INDX1)|(0<<INDX0)
|
132 | sts CANPAGE, temp ; select MOb0
|
133 |
|
134 | ldi temp, 0
|
135 | sts CANSTMOB, temp ; CAN Statusregister löschen
|
136 |
|
137 | ldi temp, (1<<ENIT)|(0<<ENBOFF)|(1<<ENRX)|(0<<ENTX)|(0<<ENERR)|(0<<ENBX)|(0<<ENERG)|(0<<ENOVRT)
|
138 | sts CANGIE, temp ; enable Interrupts
|
139 |
|
140 | ldi temp, (1<<CANIT)|(0<<BOFFIT)|(0<<OVRTIM)|(0<<BXOK)|(0<<SERG)|(0<<CERG)|(0<<FERG)|(0<<AERG)
|
141 | sts CANGIT, temp
|
142 |
|
143 | ldi temp, (0<<ENMOB5)|(0<<ENMOB4)|(0<<ENMOB3)|(0<<ENMOB2)|(0<<ENMOB1)|(1<<ENMOB0)
|
144 | sts CANEN2, temp ; enable MOB
|
145 |
|
146 | ldi temp, 0b00000000
|
147 | sts CANEN1, temp ; reserved
|
148 |
|
149 | ldi temp, (0<<IEMOB5)|(0<<IEMOB4)|(0<<IEMOB3)|(0<<IEMOB2)|(0<<IEMOB1)|(1<<IEMOB0)
|
150 | sts CANIE2, temp
|
151 |
|
152 | ldi temp, 0b00000000
|
153 | sts CANIE1, temp ; reserved
|
154 |
|
155 | ldi temp, (0<<SIT5)|(0<<SIT4)|(0<<SIT3)|(0<<SIT2)|(0<<SIT1)|(0<<SIT0)
|
156 | sts CANSIT2, temp ; enable CAN Status Interrupt
|
157 |
|
158 | ldi temp,(0<<TPRSC7)|(0<<TPRSC6)|(0<<TPRSC5)|(0<<TPRSC4)|(0<<TPRSC3)|(0<<TPRSC2)|(0<<TPRSC1)|(0<<TPRSC0)
|
159 | sts CANTCON,temp ; CAN timer Prescaler
|
160 |
|
161 | ldi temp,(0<<HPMOB3)|(0<<HPMOB2)|(0<<HPMOB1)|(0<<HPMOB0)|(0<<CGP3)|(0<<CGP2)|(0<<CGP1)|(0<<CGP0)
|
162 | sts CANHPMOB,temp ; CAN Highest Priority MOb Register
|
163 |
|
164 | init_CAN_Identifier_Maske: ;Filter deaktivieren, alle Nachrichten werden verarbeitet
|
165 | ldi temp, 0
|
166 | sts CANIDM1, temp
|
167 | sts CANIDM2, temp
|
168 | sts CANIDM3, temp ;nur nötig bei 29bit ID
|
169 | sts CANIDM4, temp
|
170 |
|
171 | ldi temp,(1<<CONMOB1)|(0<<CONMOB0)|(0<<RPLV)|(0<<IDE)|(0<<DLC3)|(0<<DLC2)|(0<<DLC1)|(1<<DLC0)
|
172 | sts CANCDMOB, temp ; RX Mode enable, CAN 11bit identifier, 8bit data lenght
|
173 |
|
174 | ldi temp, (0<<ABRQ)|(0<<OVRQ)|(0<<TTC)|(0<<SYNTTC)|(0<<LISTEN)|(0<<TEST)|(1<<ENASTB)|(1<<SWRES)
|
175 | sts CANGCON, temp ; CAN General Control Register, software reset
|
176 |
|
177 | loop: rjmp loop
|