📄 pannel_can.lst
字号:
037D 8220 STD Z+0,R2
(0192) CANIDT3 = (unsigned char) (msg.ID>>8);
037E E088 LDI R24,0x8
037F E090 LDI R25,0
0380 01F5 MOVW R30,R10
0381 8100 LDD R16,Z+0
0382 8111 LDD R17,Z+1
0383 8122 LDD R18,Z+2
0384 8133 LDD R19,Z+3
0385 938A ST R24,-Y
0386 940E4463 CALL asr32
0388 EFE1 LDI R30,0xF1
0389 E0F0 LDI R31,0
038A 8300 STD Z+0,R16
(0193) CANIDT2 = (unsigned char) (msg.ID>>16);
038B 01F5 MOVW R30,R10
038C 8020 LDD R2,Z+0
038D 8031 LDD R3,Z+1
038E 8042 LDD R4,Z+2
038F 8053 LDD R5,Z+3
0390 0112 MOVW R2,R4
0391 EFE2 LDI R30,0xF2
0392 E0F0 LDI R31,0
0393 8220 STD Z+0,R2
(0194) pass_Flag <<= 1;
0394 0CCC LSL R12
(0195) CANIDT1 = (unsigned char) (msg.ID>>24);
0395 E188 LDI R24,0x18
0396 E090 LDI R25,0
0397 01F5 MOVW R30,R10
0398 8100 LDD R16,Z+0
0399 8111 LDD R17,Z+1
039A 8122 LDD R18,Z+2
039B 8133 LDD R19,Z+3
039C 938A ST R24,-Y
039D 940E4463 CALL asr32
039F EFE3 LDI R30,0xF3
03A0 E0F0 LDI R31,0
03A1 8300 STD Z+0,R16
(0196) if(pass_Flag!=0x08)
03A2 2D8C MOV R24,R12
03A3 3088 CPI R24,0x8
03A4 F011 BEQ 0x03A7
(0197) RESET;
03A5 940C0000 JMP 0x0
(0198) for(i=0;i<8;i++)
03A7 24CC CLR R12
03A8 C00B RJMP 0x03B4
(0199) {
(0200)
(0201) CANMSG = msg.Data[i];
03A9 01C5 MOVW R24,R10
03AA 9604 ADIW R24,4
03AB 2DEC MOV R30,R12
03AC 27FF CLR R31
03AD 0FE8 ADD R30,R24
03AE 1FF9 ADC R31,R25
03AF 8020 LDD R2,Z+0
03B0 EFEA LDI R30,0xFA
03B1 E0F0 LDI R31,0
03B2 8220 STD Z+0,R2
03B3 94C3 INC R12
03B4 2D8C MOV R24,R12
03B5 3088 CPI R24,0x8
03B6 F390 BCS 0x03A9
(0202) }
(0203) CANCDMOB |= (1<<CONMOB0); //enable transmission
03B7 918000EF LDS R24,0xEF
03B9 6480 ORI R24,0x40
03BA 938000EF STS 0xEF,R24
03BC 9624 ADIW R28,4
03BD 940E44BC CALL pop_gset5
03BF 9508 RET
_can_ReceiveData:
msg --> Y+4
err_temp --> R10
sta_temp --> R12
RCtemp2 --> Y+41
id_temp --> Y+0
RCF --> R10
tempp --> R14
i --> Y+40
nb_data --> R12
03C0 920A ST R0,-Y
03C1 922A ST R2,-Y
03C2 923A ST R3,-Y
03C3 924A ST R4,-Y
03C4 925A ST R5,-Y
03C5 926A ST R6,-Y
03C6 927A ST R7,-Y
03C7 928A ST R8,-Y
03C8 929A ST R9,-Y
03C9 930A ST R16,-Y
03CA 931A ST R17,-Y
03CB 932A ST R18,-Y
03CC 933A ST R19,-Y
03CD 938A ST R24,-Y
03CE 939A ST R25,-Y
03CF 93AA ST R26,-Y
03D0 93BA ST R27,-Y
03D1 93EA ST R30,-Y
03D2 93FA ST R31,-Y
03D3 B60F IN R0,0x3F
03D4 920A ST R0,-Y
03D5 940E44BF CALL push_gset5
03D7 97AB SBIW R28,0x2B
(0204) }
(0205)
(0206)
(0207) #pragma interrupt_handler can_ReceiveData:19
(0208) void can_ReceiveData (void) //receive interrupt
(0209) {
(0210) unsigned char nb_data;
(0211) unsigned char i,err_temp,sta_temp;
(0212) unsigned int RCtemp2,tempp,RCF;
(0213) long id_temp;
(0214) VCI_CAN_OBJ msg[3];
(0215)
(0216) WDR();
03D8 95A8 WDR
(0217) CANGIE &= ~((1<<ENRX)|(1<<ENTX)); //关接收中断
03D9 918000DB LDS R24,0xDB
03DB 7C8F ANDI R24,0xCF
03DC 938000DB STS 0xDB,R24
(0218) RCtemp2=CANSIT2; //读取中断信息
03DE EEE0 LDI R30,0xE0
03DF E0F0 LDI R31,0
03E0 8020 LDD R2,Z+0
03E1 2433 CLR R3
03E2 A63A STD Y+42,R3
03E3 A629 STD Y+41,R2
(0219) err_temp = CANTEC; //读取发送错误计数器
03E4 EEEA LDI R30,0xEA
03E5 80A0 LDD R10,Z+0
(0220)
(0221) if(err_temp>96)
03E6 E680 LDI R24,0x60
03E7 158A CP R24,R10
03E8 F410 BCC 0x03EB
(0222) RESET;
03E9 940C0000 JMP 0x0
(0223)
(0224) err_temp = CANREC; //读取接收错误计数器
03EB EEEB LDI R30,0xEB
03EC E0F0 LDI R31,0
03ED 80A0 LDD R10,Z+0
(0225) if(err_temp>128)
03EE E880 LDI R24,0x80
03EF 158A CP R24,R10
03F0 F410 BCC 0x03F3
(0226) RESET;
03F1 940C0000 JMP 0x0
(0227)
(0228) if(RCtemp2&(0x38))
03F3 A589 LDD R24,Y+41
03F4 A59A LDD R25,Y+42
03F5 7388 ANDI R24,0x38
03F6 7090 ANDI R25,0
03F7 3080 CPI R24,0
03F8 0789 CPC R24,R25
03F9 F151 BEQ 0x0424
(0229) {
(0230) for(i=3;i<6;i++) //查询前三个邮箱中断状态
03FA E083 LDI R24,3
03FB A788 STD Y+40,R24
03FC C023 RJMP 0x0420
(0231) {
(0232) tempp=(1<<i);
03FD A528 LDD R18,Y+40
03FE 2733 CLR R19
03FF E001 LDI R16,1
0400 E010 LDI R17,0
0401 940E4529 CALL lsl16
0403 0178 MOVW R14,R16
(0233) RCF=(RCtemp2&tempp);
0404 A4A9 LDD R10,Y+41
0405 A4BA LDD R11,Y+42
0406 22A0 AND R10,R16
0407 22B1 AND R11,R17
(0234) if(RCF!=0)
0408 20AA TST R10
0409 F411 BNE 0x040C
040A 20BB TST R11
040B F089 BEQ 0x041D
(0235) {
(0236) CANPAGE = i<<4;
040C A588 LDD R24,Y+40
040D 708F ANDI R24,0xF
040E 9582 SWAP R24
040F EEED LDI R30,0xED
0410 E0F0 LDI R31,0
0411 8380 STD Z+0,R24
(0237) sta_temp = CANSTMOB;
0412 EEEE LDI R30,0xEE
0413 80C0 LDD R12,Z+0
(0238) if(sta_temp&0x40) //是发送完成中断
0414 FEC6 SBRS R12,6
0415 C007 RJMP 0x041D
(0239) {
(0240) send_count = 0; //清发送计数器
0416 2422 CLR R2
0417 92200387 STS send_count,R2
(0241) if(LED)
(0242) send_led_on;
0419 9A89 SBI 0x11,1
041A C001 RJMP 0x041C
(0243) else
(0244) send_led_off ;
041B 9889 CBI 0x11,1
(0245)
(0246) WDR();
041C 95A8 WDR
041D A408 LDD R0,Y+40
041E 9403 INC R0
041F A608 STD Y+40,R0
0420 A588 LDD R24,Y+40
0421 3086 CPI R24,6
0422 F2D0 BCS 0x03FD
(0247) }
(0248) }
(0249) }
(0250) }
0423 C421 RJMP 0x0845
(0251) else if(RCtemp2&(0x07))
0424 A589 LDD R24,Y+41
0425 A59A LDD R25,Y+42
0426 7087 ANDI R24,7
0427 7090 ANDI R25,0
0428 3080 CPI R24,0
0429 0789 CPC R24,R25
042A F409 BNE 0x042C
042B C419 RJMP 0x0845
(0252) {
(0253) for(i=0;i<3;i++) //判断哪个邮箱产生接收中断
042C 2400 CLR R0
042D A608 STD Y+40,R0
042E C412 RJMP 0x0841
(0254) {
(0255) tempp=(1<<i);
042F A528 LDD R18,Y+40
0430 2733 CLR R19
0431 E001 LDI R16,1
0432 E010 LDI R17,0
0433 940E4529 CALL lsl16
0435 0178 MOVW R14,R16
(0256) RCF=(RCtemp2&tempp);
0436 A4A9 LDD R10,Y+41
0437 A4BA LDD R11,Y+42
0438 22A0 AND R10,R16
0439 22B1 AND R11,R17
(0257) if(RCF!=0)
043A 20AA TST R10
043B F419 BNE 0x043F
043C 20BB TST R11
043D F409 BNE 0x043F
043E C3FF RJMP 0x083E
(0258) {
(0259) if(LED)
(0260) rece_led_on;
043F 9A88 SBI 0x11,0
0440 C001 RJMP 0x0442
(0261) else
(0262) rece_led_off;
0441 9888 CBI 0x11,0
(0263) CANPAGE = i<<4;
0442 A588 LDD R24,Y+40
0443 708F ANDI R24,0xF
0444 9582 SWAP R24
0445 EEED LDI R30,0xED
0446 E0F0 LDI R31,0
0447 8380 STD Z+0,R24
(0264) WDR();
0448 95A8 WDR
(0265)
(0266) id_temp = 0;
0449 E040 LDI R20,0
044A E050 LDI R21,0
044B E060 LDI R22,0
044C E070 LDI R23,0
044D 8348 STD Y+0,R20
044E 8359 STD Y+1,R21
044F 836A STD Y+2,R22
0450 837B STD Y+3,R23
(0267) id_temp |= ((unsigned long) CANIDT1<<24); //get identifier
0451 E188 LDI R24,0x18
0452 E090 LDI R25,0
0453 EFE3 LDI R30,0xF3
0454 8100 LDD R16,Z+0
0455 2711 CLR R17
0456 2722 CLR R18
0457 2733 CLR R19
0458 938A ST R24,-Y
0459 940E4530 CALL lsl32
045B 8028 LDD R2,Y+0
045C 8039 LDD R3,Y+1
045D 804A LDD R4,Y+2
045E 805B LDD R5,Y+3
045F 2A20 OR R2,R16
0460 2A31 OR R3,R17
0461 2A42 OR R4,R18
0462 2A53 OR R5,R19
0463 8228 STD Y+0,R2
0464 8239 STD Y+1,R3
0465 824A STD Y+2,R4
0466 825B STD Y+3,R5
(0268) id_temp |= ((unsigned long) CANIDT2<<16);
0467 EFE2 LDI R30,0xF2
0468 E0F0 LDI R31,0
0469 8020 LDD R2,Z+0
046A 2433 CLR R3
046B 2444 CLR R4
046C 2455 CLR R5
046D 0121 MOVW R4,R2
046E 2422 CLR R2
046F 2433 CLR R3
0470 8068 LDD R6,Y+0
0471 8079 LDD R7,Y+1
0472 808A LDD R8,Y+2
0473 809B LDD R9,Y+3
0474 2862 OR R6,R2
0475 2873 OR R7,R3
0476 2884 OR R8,R4
0477 2895 OR R9,R5
0478 8268 STD Y+0,R6
0479 8279 STD Y+1,R7
047A 828A STD Y+2,R8
047B 829B STD Y+3,R9
(0269) id_temp |= ((unsigned long) CANIDT3<<8);
047C E088 LDI R24,0x8
047D E090 LDI R25,0
047E EFE1 LDI R30,0xF1
047F 8100 LDD R16,Z+0
0480 2711 CLR R17
0481 2722 CLR R18
0482 2733 CLR R19
0483 938A ST R24,-Y
0484 940E4530 CALL lsl32
0486 8028 LDD R2,Y+0
0487 8039 LDD R3,Y+1
0488 804A LDD R4,Y+2
0489 805B LDD R5,Y+3
048A 2A20 OR R2,R16
048B 2A31 OR R3,R17
048C 2A42 OR R4,R18
048D 2A53 OR R5,R19
048E 8228 STD Y+0,R2
048F 8239 STD Y+1,R3
0490 824A STD Y+2,R4
0491 825B STD Y+3,R5
(0270) id_temp |= (CANIDT4&0xF8);
0492 EFE0 LDI R30,0xF0
0493 E0F0 LDI R31,0
0494 8180 LDD R24,Z+0
0495 2799 CLR R25
0496 7F88 ANDI R24,0xF8
0497 7090 ANDI R25,0
0498 011C MOVW R2,R24
0499 2444 CLR R4
049A FC37 SBRC R3,7
049B 9440 COM R4
049C 2455 CLR R5
049D FC47 SBRC R4,7
049E 9450 COM R5
049F 8068 LDD R6,Y+0
04A0 8079 LDD R7,Y+1
04A1 808A LDD R8,Y+2
04A2 809B LDD R9,Y+3
04A3 2862 OR R6,R2
04A4 2873 OR R7,R3
04A5 2884 OR R8,R4
04A6 2895 OR R9,R5
04A7 8268 STD Y+0,R6
04A8 8279 STD Y+1,R7
04A9 828A STD Y+2,R8
04AA 829B STD Y+3,R9
(0271) id_temp >>= 3;
04AB E083 LDI R24,3
04AC E090 LDI R25,0
04AD 8108 LDD R16,Y+0
04AE 8119 LDD R17,Y+1
04AF 812A LDD R18,Y+2
04B0 813B LDD R19,Y+3
04B1 938A ST R24,-Y
04B2 940E4463 CALL asr32
04B4 8308 STD Y+0,R16
04B5 8319 STD Y+1,R17
04B6 832A STD Y+2,R18
04B7 833B STD Y+3,R19
(0272) WDR();
04B8 95A8 WDR
(0273) switch(id_temp)
04B9 E040 LDI R20,0
04BA E054 LDI R21,4
04BB E268 LDI R22,0x28
04BC E070 LDI R23,0
04BD 8028 LDD R2,Y+0
04BE 8039 LDD R3,Y+1
04BF 804A LDD R4,Y+2
04C0 805B LDD R5,Y+3
04C1 1624 CP R2,R20
04C2 0635 CPC R3,R21
04C3 0646 CPC R4,R22
04C4 0657 CPC R5,R23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -