📄 can.s
字号:
; err_temp = CANREC; //读取接收错误计数器
ldi R30,235
ldi R31,0
ldd R10,z+0
.dbline 223
; if(err_temp>128)
ldi R24,128
cp R24,R10
brsh L74
.dbline 224
; RESET;
jmp 0x000
L74:
.dbline 226
;
; if(RCtemp2&(0x38))
ldd R24,y+9
ldd R25,y+10
andi R24,56
andi R25,0
cpi R24,0
cpc R24,R25
breq L76
X5:
.dbline 227
; {
.dbline 228
; for(i=3;i<6;i++) //查询前三个邮箱中断状态
ldi R24,3
std y+4,R24
xjmp L81
L78:
.dbline 229
; {
.dbline 230
; tempp=(1<<i);
ldd R18,y+4
clr R19
ldi R16,1
ldi R17,0
xcall lsl16
std y+6,R17
std y+5,R16
.dbline 231
; RCF=(RCtemp2&tempp);
ldd R2,y+9
ldd R3,y+10
and R2,R16
and R3,R17
std y+8,R3
std y+7,R2
.dbline 232
; if(RCF!=0)
movw R0,R2
tst R2
brne X6
tst R3
breq L82
X6:
.dbline 233
; {
.dbline 234
; CANPAGE = i<<4;
ldd R24,y+4
andi R24,#0x0F
swap R24
ldi R30,237
ldi R31,0
std z+0,R24
.dbline 235
; sta_temp = CANSTMOB;
ldi R30,238
ldd R10,z+0
.dbline 236
; if(sta_temp&0x40) //是发送完成中断
sbrs R10,6
rjmp L84
.dbline 237
; {
.dbline 238
; if(LED)
.dbline 239
; send_led_on;
sbi 0x11,1
xjmp L87
L86:
.dbline 241
; else
; send_led_off ;
cbi 0x11,1
L87:
.dbline 243
;
; WDR();
wdr
.dbline 244
; }
L84:
.dbline 245
; }
L82:
.dbline 246
L79:
.dbline 228
ldd R0,y+4
inc R0
std y+4,R0
L81:
.dbline 228
ldd R24,y+4
cpi R24,6
brlo L78
.dbline 247
; }
; }
xjmp L77
L76:
.dbline 248
; else if(RCtemp2&(0x07))
ldd R24,y+9
ldd R25,y+10
andi R24,7
andi R25,0
cpi R24,0
cpc R24,R25
brne X10
xjmp L88
X10:
X7:
.dbline 249
; {
.dbline 250
; for(i=0;i<3;i++) //判断哪个邮箱产生接收中断
clr R0
std y+4,R0
xjmp L93
L90:
.dbline 251
; {
.dbline 252
; tempp=(1<<i);
ldd R18,y+4
clr R19
ldi R16,1
ldi R17,0
xcall lsl16
std y+6,R17
std y+5,R16
.dbline 253
; RCF=(RCtemp2&tempp);
ldd R2,y+9
ldd R3,y+10
and R2,R16
and R3,R17
std y+8,R3
std y+7,R2
.dbline 254
; if(RCF!=0)
movw R0,R2
tst R2
brne X8
tst R3
brne X11
xjmp L94
X11:
X8:
.dbline 255
; {
.dbline 256
; if(LED)
.dbline 257
; rece_led_on;
sbi 0x11,0
xjmp L97
L96:
.dbline 259
; else
; rece_led_off;
cbi 0x11,0
L97:
.dbline 260
; CANPAGE = i<<4;
ldd R24,y+4
andi R24,#0x0F
swap R24
ldi R30,237
ldi R31,0
std z+0,R24
.dbline 261
; WDR();
wdr
.dbline 263
;
; id_temp = 0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
std y+0,R20
std y+1,R21
std y+2,R22
std y+3,R23
.dbline 264
; id_temp |= ((unsigned long) CANIDT1<<24); //get identifier
ldi R24,24
ldi R25,0
ldi R30,243
ldd R16,z+0
clr R17
clr R18
clr R19
st -y,R24
xcall lsl32
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
or R2,R16
or R3,R17
or R4,R18
or R5,R19
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 265
; id_temp |= ((unsigned long) CANIDT2<<16);
ldi R30,242
ldi R31,0
ldd R2,z+0
clr R3
clr R4
clr R5
movw R4,R2
clr R2
clr R3
ldd R6,y+0
ldd R7,y+1
ldd R8,y+2
ldd R9,y+3
or R6,R2
or R7,R3
or R8,R4
or R9,R5
std y+0,R6
std y+1,R7
std y+2,R8
std y+3,R9
.dbline 266
; id_temp |= ((unsigned long) CANIDT3<<8);
ldi R24,8
ldi R25,0
ldi R30,241
ldd R16,z+0
clr R17
clr R18
clr R19
st -y,R24
xcall lsl32
ldd R2,y+0
ldd R3,y+1
ldd R4,y+2
ldd R5,y+3
or R2,R16
or R3,R17
or R4,R18
or R5,R19
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
.dbline 267
; id_temp |= (CANIDT4&0xF8);
ldi R30,240
ldi R31,0
ldd R24,z+0
clr R25
andi R24,248
andi R25,0
movw R2,R24
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
ldd R6,y+0
ldd R7,y+1
ldd R8,y+2
ldd R9,y+3
or R6,R2
or R7,R3
or R8,R4
or R9,R5
std y+0,R6
std y+1,R7
std y+2,R8
std y+3,R9
.dbline 268
; id_temp >>= 3;
ldi R24,3
ldi R25,0
ldd R16,y+0
ldd R17,y+1
ldd R18,y+2
ldd R19,y+3
st -y,R24
xcall asr32
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
.dbline 269
; WDR();
wdr
.dbline 270
; for(i=0;i<50;i++)
clr R0
std y+4,R0
xjmp L101
L98:
.dbline 271
; {
.dbline 272
; if(id_temp==id_table[i])
ldi R24,<_id_table
ldi R25,>_id_table
ldd R30,y+4
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
clr R3
clr R4
clr R5
ldd R6,y+0
ldd R7,y+1
ldd R8,y+2
ldd R9,y+3
cp R6,R2
cpc R7,R3
cpc R8,R4
cpc R9,R5
brne L102
.dbline 273
; {
.dbline 274
; jj=i;
ldd R14,y+4
.dbline 275
; break;
xjmp L100
L102:
.dbline 277
L99:
.dbline 270
ldd R0,y+4
inc R0
std y+4,R0
L101:
.dbline 270
ldd R24,y+4
cpi R24,50
brlo L98
L100:
.dbline 278
; }
; }
; WDR();
wdr
.dbline 279
; switch(jj)
mov R10,R14
clr R11
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brge X12
xjmp L104
X12:
ldi R24,48
cp R24,R10
cpc R25,R11
brge X13
xjmp L104
X13:
ldi R16,2
ldi R17,0
movw R18,R10
xcall empy16s
movw R30,R16
ldi R24,<L461
ldi R25,>L461
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X9:
.dbline 280
; {
L107:
.dbline 281
; case 0 :{
.dbline 282
; for (nb_data = 0; nb_data <8; nb_data++)
clr R12
xjmp L111
L108:
.dbline 283
.dbline 284
ldi R24,<_rece_data+4
ldi R25,>_rece_data+4
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldi R26,250
ldi R27,0
ld R2,x
std z+0,R2
.dbline 285
L109:
.dbline 282
inc R12
L111:
.dbline 282
mov R24,R12
cpi R24,8
brlo L108
.dbline 286
; {
; rece_data[0].Data[nb_data]=CANMSG;
; }
; WDR();
wdr
.dbline 287
; break;
xjmp L105
L113:
.dbline 289
; }
; case 1 :{
.dbline 290
; for (nb_data = 0; nb_data <8; nb_data++)
clr R12
xjmp L117
L114:
.dbline 291
.dbline 292
ldi R24,<_rece_data+12+4
ldi R25,>_rece_data+12+4
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldi R26,250
ldi R27,0
ld R2,x
std z+0,R2
.dbline 293
L115:
.dbline 290
inc R12
L117:
.dbline 290
mov R24,R12
cpi R24,8
brlo L114
.dbline 294
; {
; rece_data[1].Data[nb_data]=CANMSG;
; }
; WDR();
wdr
.dbline 295
; break;
xjmp L105
L120:
.dbline 297
; }
; case 2 :{
.dbline 298
; for (nb_data = 0; nb_data <8; nb_data++)
clr R12
xjmp L124
L121:
.dbline 299
.dbline 300
ldi R24,<_rece_data+24+4
ldi R25,>_rece_data+24+4
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldi R26,250
ldi R27,0
ld R2,x
std z+0,R2
.dbline 301
L122:
.dbline 298
inc R12
L124:
.dbline 298
mov R24,R12
cpi R24,8
brlo L121
.dbline 302
; {
; rece_data[2].Data[nb_data]=CANMSG;
; }
; WDR();
wdr
.dbline 303
; break;
xjmp L105
L127:
.dbline 305
; }
; case 3 :{
.dbline 306
; for (nb_data = 0; nb_data <8; nb_data++)
clr R12
xjmp L131
L128:
.dbline 307
.dbline 308
ldi R24,<_rece_data+36+4
ldi R25,>_rece_data+36+4
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldi R26,250
ldi R27,0
ld R2,x
std z+0,R2
.dbline 309
L129:
.dbline 306
inc R12
L131:
.dbline 306
mov R24,R12
cpi R24,8
brlo L128
.dbline 310
; {
; rece_data[3].Data[nb_data]=CANMSG;
; }
; WDR();
wdr
.dbline 311
; break;
xjmp L105
L134:
.dbline 313
; }
; case 4 :{
.dbline 314
; for (nb_data = 0; nb_data <8; nb_data++)
clr R12
xjmp L138
L135:
.dbline 315
.dbline 316
ldi R24,<_rece_data+48+4
ldi R25,>_rece_data+48+4
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldi R26,250
ldi R27,0
ld R2,x
std z+0,R2
.dbline 317
L136:
.dbline 314
inc R12
L138:
.dbline 314
mov R24,R12
cpi R24,8
brlo L135
.dbline 318
; {
; rece_data[4].Data[nb_data]=CANMSG;
; }
; WDR();
wdr
.dbline 319
; break;
xjmp L105
L141:
.dbline 321
; }
; case 5 :{
.dbline 322
; for (nb_data = 0; nb_data <8; nb_data++)
clr R12
xjmp L145
L142:
.dbline 323
.dbline 324
ldi R24,<_rece_data+60+4
ldi R25,>_rece_data+60+4
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldi R26,250
ldi R27,0
ld R2,x
std z+0,R2
.dbline 325
L143:
.dbline 322
inc R12
L145:
.dbline 322
mov R24,R12
cpi R24,8
brlo L142
.dbline 326
; {
; rece_data[5].Data[nb_data]=CANMSG;
; }
; WDR();
wdr
.dbline 327
; break;
xjmp L105
L148:
.dbline 329
; }
; case 6 :{
.dbline 330
; for (nb_data = 0; nb_data <8; nb_data++)
clr R12
xjmp L152
L149:
.dbline 331
.dbline 332
ldi R24,<_rece_data+72+4
ldi R25,>_rece_data+72+4
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldi R26,250
ldi R27,0
ld R2,x
std z+0,R2
.dbline 333
L150:
.dbline 330
inc R12
L152:
.dbline 330
mov R24,R12
cpi R24,8
brlo L149
.dbline 334
; {
; rece_data[6].Data[nb_data]=CANMSG;
; }
; WDR();
wdr
.dbline 335
; break;
xjmp L105
L155:
.dbline 337
; }
; case 7 :{
.dbline 338
; for (nb_data = 0; nb_data <8; nb_data++)
clr R12
xjmp L159
L156:
.dbline 339
.dbline 340
ldi R24,<_rece_data+84+4
ldi R25,>_rece_data+84+4
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldi R26,250
ldi R27,0
ld R2,x
std z+0,R2
.dbline 341
L157:
.dbline 338
inc R12
L159:
.dbline 338
mov R24,R12
cpi R24,8
brlo L156
.dbline 342
; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -