📄 can.lst
字号:
A51 MACRO ASSEMBLER CAN 05/11/2004 13:50:13 PAGE 4
00C2 +1 191 CANIE1 DATA 0C2H
00C3 +1 192 CANIE2 DATA 0C3H
00C4 +1 193 CANIDM1 DATA 0C4H
00C5 +1 194 CANIDM2 DATA 0C5H
00C6 +1 195 CANIDM3 DATA 0C6H
00C7 +1 196 CANIDM4 DATA 0C7H
00CE +1 197 CANEN1 DATA 0CEH
00CF +1 198 CANEN2 DATA 0CFH
+1 199
+1 200
201
202
0010 203 num_channel DATA 10H
0011 204 num_data DATA 11H
0012 205 data0 DATA 12H
0013 206 data1 DATA 13H
0014 207 data2 DATA 14H
0015 208 data3 DATA 15H
0016 209 data4 DATA 16H
0017 210 data5 DATA 17H
0018 211 data6 DATA 18H
0019 212 data7 DATA 19H
213
214 ;/* baud rate and bit timing parameters */
215
216
217
218
219
220
0000 221 org 000h
0000 020100 222 ljmp begin
223
003B 224 org 3Bh
003B 0201B9 225 ljmp can_it
226
227 ;/**
228 ; * FUNCTION_PURPOSE: This file set up Can at 500Kbauds with channel 0 id 0x123 in receptio
n
229 ; * and channel 1 id 0x001 in emission.
230 ; * FUNCTION_INPUTS: void
231 ; * FUNCTION_OUTPUTS: void
232 ; */
233
0100 234 org 0100h
0100 235 begin:
0100 43AB01 236 ORL CANGCON,#01h; ;/* reset CAN */
237
238 ;/* reset all mailboxes */
0103 751000 239 MOV num_channel,#00h
0106 240 reset_mailbox:
0106 E510 241 MOV A,num_channel ;/* load accumulator with channel value */
0108 C4 242 SWAP A
0109 54F0 243 ANL A,#0F0h
010B F5B1 244 MOV CANPAGE,A ;/* CHNB=num_channel; */
010D 75B300 245 MOV CANCONCH,#00h ;/* channel disable */
0110 75B200 246 MOV CANSTCH,#00h
0113 75BC00 247 MOV CANIDT1,#00h
0116 75BD00 248 MOV CANIDT2,#00h
0119 75BE00 249 MOV CANIDT3,#00h
011C 75BF00 250 MOV CANIDT4,#00h
011F 75C400 251 MOV CANIDM1,#00h
0122 75C500 252 MOV CANIDM2,#00h
0125 75C600 253 MOV CANIDM3,#00h
0128 75C700 254 MOV CANIDM4,#00h
012B 751100 255 MOV num_data,#00h
A51 MACRO ASSEMBLER CAN 05/11/2004 13:50:13 PAGE 5
012E 256 reset_data:
012E 75A300 257 MOV CANMSG,#00h
0131 0511 258 INC num_data
0133 E511 259 MOV A,num_data
0135 B408F6 260 CJNE A,#08h,reset_data
0138 0510 261 INC num_channel
013A E510 262 MOV A,num_channel
013C B40FC7 263 CJNE A,#0Fh,reset_mailbox
264
265 ;/* setup bit timing */
013F 7400 266 MOV A,#00
0141 23 267 RL A
0142 F5B4 268 MOV CANBT1,A
0144 53B59F 269 ANL CANBT2,#9Fh ;/* reset SJW */
0147 7400 270 MOV A,#00
0149 C4 271 SWAP A
014A 23 272 RL A
014B 54E0 273 ANL A,#0E0h
014D 42B5 274 ORL CANBT2,A ;/* SJW=0x00; */
014F 53B5F1 275 ANL CANBT2,#0F1h ;/* reset PRS */
0152 7402 276 MOV A,#02
0154 23 277 RL A
0155 42B5 278 ORL CANBT2,A ;/* PRS=0x02; */
0157 53B68F 279 ANL CANBT3,#8Fh ;/* reset PHS2 */
015A 7403 280 MOV A,#03
015C C4 281 SWAP A
015D 54F0 282 ANL A,#0F0h
015F 42B6 283 ORL CANBT3,A ;/* PHS2=0x03;*/
0161 53B6F1 284 ANL CANBT3,#0F1h ;/* reset PHS1 */
0164 7403 285 MOV A,#03
0166 23 286 RL A
0167 42B6 287 ORL CANBT3,A ;/* PHS1=0x03 */
0169 43AB02 288 ORL CANGCON,#02h ;/* start CAN */
289 ;/* Channel 0 init */
016C 7400 290 MOV A,#00h ;/* load accumulator with channel value */
016E C4 291 SWAP A
016F 54F0 292 ANL A,#0F0h
0171 F5B1 293 MOV CANPAGE,A ;/* CHNB=0x00; select channel 0 */
0173 75B200 294 MOV CANSTCH,#00h ;/* reset channel staus */
0176 75B300 295 MOV CANCONCH,#00h ;/* reset control and dlc register */
296 ;/* Channel 0: identifier = 11bits. CANIDT=0x123 */
0179 75BC24 297 MOV CANIDT1,#24h
017C 53BD7F 298 ANL CANIDT2,#07Fh
017F 43BD60 299 ORL CANIDT2,#060h
300 ;/* Channel 0: mask = 11bits. 0x7F0 */
0182 75C4FE 301 MOV CANIDM1,#0FEh
0185 53C51F 302 ANL CANIDM2,#1Fh
0188 75C700 303 MOV CANIDM4,#00h
304 ;/* Channel 0 configuration */
018B 53BFFB 305 ANL CANIDT4,#0FBh ;/* clear bit rtr in CANIDT4. */
018E 43B308 306 ORL CANCONCH,#08h ;/* Reception 8 bytes.*/
0191 43B380 307 ORL CANCONCH,#80h ;/* Reception enabled without buffer.*/
308 ;/* Channel 1 init */
0194 7401 309 MOV A,#01h ;/* load accumulator with channel value */
0196 C4 310 SWAP A
0197 54F0 311 ANL A,#0F0h
0199 F5B1 312 MOV CANPAGE,A ;/* CHNB=0x01; select channel 1 */
019B 75B200 313 MOV CANSTCH,#00h ;/* reset channel staus */
019E 75B300 314 MOV CANCONCH,#00h ;/* reset control and dlc register */
315 ;/* Channel 1: identifier = 11bits. CANIDT=0x001 */
01A1 75BC80 316 MOV CANIDT1,#80h
01A4 53BD3F 317 ANL CANIDT2,#3Fh
01A7 43BD20 318 ORL CANIDT2,#20h
319 ;/* interrupt configuration */
01AA 43C301 320 ORL CANIE2,#01h ;/* IECH0=1 */
01AD 43C110 321 ORL CANGIE,#10h ;/* Can_Tx IT enable */
A51 MACRO ASSEMBLER CAN 05/11/2004 13:50:13 PAGE 6
01B0 43C120 322 ORL CANGIE,#20h ;/* Can_Rx IT enable */
01B3 D2E8 323 SETB ECAN ;/* CAN IT enable */
01B5 D2AF 324 SETB EA ;/* all IT enable */
01B7 80FE 325 JMP $ ;/* endless */
326
327
328 ;/**
329 ; * FUNCTION_PURPOSE: can interrupt. echo receive data on channel 0 reception.
330 ; * Reception id between 0x120 and 0x12F.
331 ; * FUNCTION_INPUTS: P4.1(RxDC) can input
332 ; * FUNCTION_OUTPUTS: P4.0(TxDC) can output
333 ; */
01B9 334 can_it:
01B9 AFB1 335 MOV R7,CANPAGE ;/* save current context */
336 ;/* set channel */
01BB 7400 337 MOV A,#00h ;/* load accumulator with channel value */
01BD C4 338 SWAP A
01BE 54F0 339 ANL A,#0F0h
01C0 F5B1 340 MOV CANPAGE,A ;/* CHNB=0x00; select channel 0 */
341 ;/* echo receive data on channel 0 reception */
01C2 E5B2 342 MOV A,CANSTCH
01C4 B42046 343 CJNE A,#20h,end_if_rxok
344 ;/* save receive data */
01C7 85A312 345 MOV data0,CANMSG
01CA 85A313 346 MOV data1,CANMSG
01CD 85A314 347 MOV data2,CANMSG
01D0 85A315 348 MOV data3,CANMSG
01D3 85A316 349 MOV data4,CANMSG
01D6 85A317 350 MOV data5,CANMSG
01D9 85A318 351 MOV data6,CANMSG
01DC 85A319 352 MOV data7,CANMSG
353 ;/* set channel */
01DF 7401 354 MOV A,#01h ;/* load accumulator with channel value */
01E1 C4 355 SWAP A
01E2 54F0 356 ANL A,#0F0h
01E4 F5B1 357 MOV CANPAGE,A ;/* CHNB=0x00; select channel 1 */
358 ;/* Channel 1 configuration */
01E6 75B300 359 MOV CANCONCH,#00h; ;/* reset channel 1 configuration */
360 ;/* load saved data */
01E9 8512A3 361 MOV CANMSG,data0
01EC 8513A3 362 MOV CANMSG,data1
01EF 8514A3 363 MOV CANMSG,data2
01F2 8515A3 364 MOV CANMSG,data3
01F5 8516A3 365 MOV CANMSG,data4
01F8 8517A3 366 MOV CANMSG,data5
01FB 8518A3 367 MOV CANMSG,data6
01FE 8519A3 368 MOV CANMSG,data7
369
0201 43B308 370 ORL CANCONCH,#08h ;/* transmit 8 bytes */
0204 43B340 371 ORL CANCONCH,#40h ;/* emission enabled */
0207 43CF02 372 ORL CANEN2,#02h ;/* channel 1 enable */
020A 75B200 373 MOV CANSTCH,#00h ;/* reset channel 1 status */
374
020D 375 end_if_rxok:
376
377 ;/* set channel */
020D 7400 378 MOV A,#00h ;/* load accumulator with channel value */
020F C4 379 SWAP A
0210 54F0 380 ANL A,#0F0h
0212 F5B1 381 MOV CANPAGE,A ;/* CHNB=0x00; select channel 0 */
0214 75B300 382 MOV CANCONCH,#00h ;/* reset channel 0 configuration */
0217 43B308 383 ORL CANCONCH,#08h ;/* receive 8 bytes */
021A 43B380 384 ORL CANCONCH,#80h ;/* reception enable */
021D 43CF01 385 ORL CANEN2,#01h ;/* channel 0 enable */
0220 75B200 386 MOV CANSTCH,#00h ;/* reset channel 0 status */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -