1 | $regfile = "m8def.dat"
|
2 | $crystal = 8000000
|
3 | $hwstack = 40
|
4 | $swstack = 80
|
5 | $framesize = 90
|
6 | $baud = 9600
|
7 |
|
8 |
|
9 |
|
10 | Config Portd.0 = Output
|
11 | Config Portd.1 = Output
|
12 | Config Portd.3 = Output
|
13 | Config Portd.5 = Output
|
14 | Config Portd.6 = Output
|
15 | Config Portd.7 = Output
|
16 | Config Portb.0 = Output
|
17 | Config Portb.1 = Output
|
18 | Config Portb.2 = Output
|
19 | Config Portc.0 = Output
|
20 | Config Portc.1 = Output
|
21 | Config Portc.2 = Output
|
22 | Config Portc.3 = Output
|
23 | Config Portc.4 = Output
|
24 | Config Portc.5 = Output
|
25 |
|
26 |
|
27 | Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Noss = 1 , Clockrate = 16
|
28 | Spiinit
|
29 |
|
30 |
|
31 |
|
32 |
|
33 | Config Pind.2 = Input 'MCP Interrupt MCP2515 /INT
|
34 | Css Alias Portd.4
|
35 | Config Css = Output
|
36 | Set Css
|
37 | Wait 1
|
38 |
|
39 |
|
40 | Config Int0 = Falling 'INT MCP ist low aktiv
|
41 | On Int0 Int_mcp 'Wenn INT, dann Routine INT_mcp aufrufen
|
42 | Enable Int0 'INT0 einschalten
|
43 | Enable Interrupts
|
44 |
|
45 |
|
46 | Declare Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
|
47 | Declare Sub Mcp2515_read_register(byval Adress As Byte )
|
48 | Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)
|
49 |
|
50 |
|
51 | Dim Mcphilf As Byte
|
52 | Dim Canin As Byte
|
53 |
|
54 |
|
55 |
|
56 | Const Spi_reset = &HC0
|
57 | Const Spi_write = &H02
|
58 | Const Spi_read = &H03
|
59 | Const Spi_rts0 = &H81
|
60 | Const Spi_rts1 = &H82
|
61 | Const Spi_rts2 = &H84
|
62 | Const Spi_read_status = &HA0
|
63 | Const Spi_bit_modify = &H05
|
64 |
|
65 | Const Rxb0ctrl = &H60
|
66 | Const Rxb1ctrl = &H70
|
67 |
|
68 | Const Rxm0sidh = &H20
|
69 | Const Rxm0sidl = &H21
|
70 | Const Rxm1sidh = &H24
|
71 | Const Rxm1sidl = &H25
|
72 |
|
73 | Const Rxf0sidh = &H00
|
74 | Const Rxf0sidl = &H01
|
75 | Const Rxf1sidh = &H04
|
76 | Const Rxf1sidl = &H05
|
77 |
|
78 | Const Rxb0d0 = &H66 'Receive Buffer 0 Data Byte 0
|
79 | Const Rxb0d1 = &H67 'Receive Buffer 0 Data Byte 1
|
80 | Const Rxb0d2 = &H68 'Receive Buffer 0 Data Byte 2
|
81 | Const Rxb0d3 = &H69 'Receive Buffer 0 Data Byte 3
|
82 | Const Rxb0d4 = &H6A 'Receive Buffer 0 Data Byte 4
|
83 | Const Rxb0d5 = &H6B 'Receive Buffer 0 Data Byte 5
|
84 | Const Rxb0d6 = &H6C 'Receive Buffer 0 Data Byte 6
|
85 | Const Rxb0d7 = &H6D 'Receive Buffer 0 Data Byte 7
|
86 |
|
87 |
|
88 | Const Bfpctrl = &H0C
|
89 | Const Txrtsctrl = &H0D
|
90 | Const Canctrl = &H0F
|
91 |
|
92 | Const Txb0ctrl = &H30 ' Transmit Buffer 0 Control Register
|
93 | Const Txb0sidh = &H31 ' Transmit Buffer 0 Std Identifier High
|
94 | Const Txb0sidl = &H32 ' Transmit Buffer 0 Std Identifier Low
|
95 | Const Txb0dlc = &H35 ' Transmit Buffer 0 Data Length Code
|
96 | Const Txb0d0 = &H36 ' Transmit Buffer 0 Data Byte 0
|
97 | Const Txb0d1 = &H37 ' Transmit Buffer 0 Data Byte 1
|
98 | Const Txb0d2 = &H38 ' Transmit Buffer 0 Data Byte 2
|
99 | Const Txb0d3 = &H39 ' Transmit Buffer 0 Data Byte 3
|
100 | Const Txb0d4 = &H3A ' Transmit Buffer 0 Data Byte 4
|
101 | Const Txb0d5 = &H3B ' Transmit Buffer 0 Data Byte 5
|
102 | Const Txb0d6 = &H3C ' Transmit Buffer 0 Data Byte 6
|
103 | Const Txb0d7 = &H3D ' Transmit Buffer 0 Data Byte 7
|
104 |
|
105 | Const Txb1ctrl = &H40 ' Transmit Buffer 1 Control Register
|
106 | Const Txb1sidh = &H41 ' Transmit Buffer 1 Std Identifier High
|
107 | Const Txb1sidl = &H42 ' Transmit Buffer 1 Std Identifier Low
|
108 | Const Txb1dlc = &H45 ' Transmit Buffer 1 Data Length Code
|
109 | Const Txb1d0 = &H46 ' Transmit Buffer 1 Data Byte 0
|
110 | Const Txb1d1 = &H47 ' Transmit Buffer 1 Data Byte 1
|
111 | Const Txb1d2 = &H48 ' Transmit Buffer 1 Data Byte 2
|
112 | Const Txb1d3 = &H49 ' Transmit Buffer 1 Data Byte 3
|
113 | Const Txb1d4 = &H4A ' Transmit Buffer 1 Data Byte 4
|
114 | Const Txb1d5 = &H4B ' Transmit Buffer 1 Data Byte 5
|
115 | Const Txb1d6 = &H4C ' Transmit Buffer 1 Data Byte 6
|
116 | Const Txb1d7 = &H4D ' Transmit Buffer 1 Data Byte 7
|
117 |
|
118 | Const Txb2ctrl = &H50 ' Transmit Buffer 2 Control Register
|
119 | Const Txb2sidh = &H51 ' Transmit Buffer 2 Std Identifier High
|
120 | Const Txb2sidl = &H52 ' Transmit Buffer 2 Std Identifier Low
|
121 | Const Txb2dlc = &H55 ' Transmit Buffer 2 Data Length Code
|
122 | Const Txb2d0 = &H56 ' Transmit Buffer 2 Data Byte 0
|
123 | Const Txb2d1 = &H57 ' Transmit Buffer 2 Data Byte 1
|
124 | Const Txb2d2 = &H58 ' Transmit Buffer 2 Data Byte 2
|
125 | Const Txb2d3 = &H59 ' Transmit Buffer 2 Data Byte 3
|
126 | Const Txb2d4 = &H5A ' Transmit Buffer 2 Data Byte 4
|
127 | Const Txb2d5 = &H5B ' Transmit Buffer 2 Data Byte 5
|
128 | Const Txb2d6 = &H5C ' Transmit Buffer 2 Data Byte 6
|
129 | Const Txb2d7 = &H5D ' Transmit Buffer 2 Data Byte 7
|
130 |
|
131 | Const Rxb0sidh = &H61
|
132 | Const Rxb0sidl = &H62
|
133 | Const Rxb0dlc = &H65
|
134 | Const Rxb1sidh = &H71
|
135 | Const Rxb1sidl = &H72
|
136 | Const Rxb1dlc = &H75
|
137 |
|
138 | Const Cnf1 = &H2A
|
139 | Const Cnf2 = &H29
|
140 | Const Cnf3 = &H28
|
141 | Const Caninte = &H2B
|
142 | Const Canintf = &H2C
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 | Mcp2515_init:
|
151 |
|
152 | Mcphilf = Spi_reset
|
153 | Reset Css
|
154 | Waitus 10
|
155 | Spdr = Mcphilf
|
156 | Do
|
157 | Loop Until Spsr.spif = 1
|
158 | Waitus 10
|
159 | Set Css
|
160 |
|
161 | Mcp2515_write_register Cnf1 , &H03
|
162 | Mcp2515_write_register Cnf2 , &HBA
|
163 | Mcp2515_write_register Cnf3 , &H07
|
164 |
|
165 |
|
166 | 'Interrupt einstellen
|
167 | Mcp2515_write_register Caninte , &B00000011
|
168 | Mcp2515_write_register Canintf , &B00000000
|
169 | Mcp2515_write_register Rxb0ctrl , &B01100000
|
170 | Mcp2515_write_register Rxb1ctrl , &B01100000
|
171 |
|
172 |
|
173 | Mcp2515_write_register Rxm0sidh , &B00000000
|
174 | Mcp2515_write_register Rxm0sidl , &B00000000
|
175 | Mcp2515_write_register Rxm1sidh , &B00000000
|
176 | Mcp2515_write_register Rxm1sidl , &B00000000
|
177 |
|
178 | 'Filter
|
179 |
|
180 | Mcp2515_write_register Rxf0sidh , &B00000000
|
181 | Mcp2515_write_register Rxf0sidl , &B00000000
|
182 | Mcp2515_write_register Rxf1sidh , &B00000000
|
183 | Mcp2515_write_register Rxf1sidl , &B00000000
|
184 |
|
185 |
|
186 | Mcp2515_bitmodify Canctrl , &B11101000 , &B00001000 '???
|
187 |
|
188 | Do
|
189 | Waitms 10
|
190 | Loop
|
191 |
|
192 | End
|
193 |
|
194 |
|
195 |
|
196 | Int_mcp:
|
197 | Gosub Lesen
|
198 | Return
|
199 |
|
200 |
|
201 | Lesen:
|
202 | Mcp2515_read_register Rxb0d0
|
203 | Print "Daten Eingang:" ; Canin
|
204 | Mcp2515_read_register Rxb0d1
|
205 | Print "Daten Eingang:" ; Canin
|
206 |
|
207 | 'hier muss jetzt was hin, damit der Int. vom MCP geloescht wird!!!
|
208 | Return
|
209 |
|
210 |
|
211 |
|
212 |
|
213 |
|
214 |
|
215 | 'schreiben
|
216 |
|
217 | Sub Mcp2515_write_register(byval Adress As Byte , Byval Daten As Byte)
|
218 | Mcphilf = Spi_write
|
219 | Reset Css
|
220 | Spdr = Mcphilf
|
221 | Do
|
222 | Loop Until Spsr.spif = 1
|
223 | Waitms 2
|
224 | Spdr = Adress
|
225 | Do
|
226 | Loop Until Spsr.spif = 1
|
227 | Spdr = Daten
|
228 | Do
|
229 | Loop Until Spsr.spif = 1
|
230 | Set Css
|
231 | End Sub
|
232 |
|
233 |
|
234 |
|
235 | 'lesen
|
236 |
|
237 | Sub Mcp2515_read_register(byval Adress As Byte )
|
238 | Mcphilf = Spi_read
|
239 | Reset Css
|
240 | Spdr = Mcphilf
|
241 | Do
|
242 | Loop Until Spsr.spif = 1
|
243 | Waitms 2
|
244 | Spdr = Adress
|
245 | Do
|
246 | Loop Until Spsr.spif = 1
|
247 | Spdr = 0
|
248 | Do
|
249 | Loop Until Spsr.spif = 1
|
250 | Canin = Spdr
|
251 | Set Css
|
252 | End Sub
|
253 |
|
254 |
|
255 | 'bitmodify
|
256 |
|
257 | Sub Mcp2515_bitmodify(reg_add , Reg_mask , Reg_val)
|
258 |
|
259 | Reset Css
|
260 | Mcphilf = Spi_bit_modify
|
261 | Spdr = Mcphilf
|
262 | Do
|
263 | Loop Until Spsr.spif = 1
|
264 | Waitms 2
|
265 | Spdr = Reg_add
|
266 | Do
|
267 | Loop Until Spsr.spif = 1
|
268 | Spdr = Reg_mask
|
269 | Do
|
270 | Loop Until Spsr.spif = 1
|
271 | Spdr = Reg_val
|
272 | Do
|
273 | Loop Until Spsr.spif = 1
|
274 | Set Css
|
275 |
|
276 | End Sub
|