📄 macan.lst
字号:
(0189) if(pass_Flag!=0x08)
038A 2D8C MOV R24,R12
038B 3088 CPI R24,0x8
038C F011 BEQ 0x038F
(0190) RESET;
038D 940C0000 JMP 0x0
(0191) for(i=0;i<8;i++)
038F 24CC CLR R12
0390 C00B RJMP 0x039C
(0192) {
(0193)
(0194) CANMSG = msg.Data[i];
0391 01C5 MOVW R24,R10
0392 9604 ADIW R24,4
0393 2DEC MOV R30,R12
0394 27FF CLR R31
0395 0FE8 ADD R30,R24
0396 1FF9 ADC R31,R25
0397 8020 LDD R2,Z+0
0398 EFEA LDI R30,0xFA
0399 E0F0 LDI R31,0
039A 8220 STD Z+0,R2
039B 94C3 INC R12
039C 2D8C MOV R24,R12
039D 3088 CPI R24,0x8
039E F390 BCS 0x0391
(0195) }
(0196) CANCDMOB |= (1<<CONMOB0); //enable transmission
039F 918000EF LDS R24,0xEF
03A1 6480 ORI R24,0x40
03A2 938000EF STS 0xEF,R24
03A4 940E1323 CALL pop_gset5
03A6 9508 RET
_can_ReceiveData:
msg --> Y+0
RC_CANSI --> Y+1
nn --> Y+1
err_temp --> R10
sta_temp --> R14
RCtemp2 --> Y+37
RCF --> R10
tempp --> R12
nb_data --> R14
i --> Y+36
03A7 920A ST R0,-Y
03A8 921A ST R1,-Y
03A9 922A ST R2,-Y
03AA 923A ST R3,-Y
03AB 924A ST R4,-Y
03AC 925A ST R5,-Y
03AD 926A ST R6,-Y
03AE 927A ST R7,-Y
03AF 930A ST R16,-Y
03B0 931A ST R17,-Y
03B1 932A ST R18,-Y
03B2 933A ST R19,-Y
03B3 938A ST R24,-Y
03B4 939A ST R25,-Y
03B5 93AA ST R26,-Y
03B6 93BA ST R27,-Y
03B7 93EA ST R30,-Y
03B8 93FA ST R31,-Y
03B9 B60F IN R0,0x3F
03BA 920A ST R0,-Y
03BB 940E1326 CALL push_gset5
03BD 97A7 SBIW R28,0x27
(0197) }
(0198)
(0199)
(0200) #pragma interrupt_handler can_ReceiveData:19
(0201) void can_ReceiveData (void) //receive interrupt
(0202) {
(0203) unsigned char nb_data;
(0204) unsigned char i,nn,err_temp,sta_temp;
(0205) unsigned int RC_CANSI,RCtemp2,tempp,RCF;
(0206) VCI_CAN_OBJ msg[3];
(0207)
(0208) WDR();
03BE 95A8 WDR
(0209) CANGIE &= ~((1<<ENRX)|(1<<ENTX)); //关接收中断
03BF 918000DB LDS R24,0xDB
03C1 7C8F ANDI R24,0xCF
03C2 938000DB STS 0xDB,R24
(0210) RCtemp2=CANSIT2; //读取中断信息
03C4 EEE0 LDI R30,0xE0
03C5 E0F0 LDI R31,0
03C6 8020 LDD R2,Z+0
03C7 2433 CLR R3
03C8 A23E STD Y+38,R3
03C9 A22D STD Y+37,R2
(0211) err_temp = CANTEC; //读取发送错误计数器
03CA EEEA LDI R30,0xEA
03CB 80A0 LDD R10,Z+0
(0212)
(0213) if(err_temp>96)
03CC E680 LDI R24,0x60
03CD 158A CP R24,R10
03CE F410 BCC 0x03D1
(0214) RESET;
03CF 940C0000 JMP 0x0
(0215)
(0216) err_temp = CANREC; //读取接收错误计数器
03D1 EEEB LDI R30,0xEB
03D2 E0F0 LDI R31,0
03D3 80A0 LDD R10,Z+0
(0217) if(err_temp>96)
03D4 E680 LDI R24,0x60
03D5 158A CP R24,R10
03D6 F410 BCC 0x03D9
(0218) RESET;
03D7 940C0000 JMP 0x0
(0219)
(0220) if(RCtemp2&(0x07))
03D9 A18D LDD R24,Y+37
03DA A19E LDD R25,Y+38
03DB 7087 ANDI R24,7
03DC 7090 ANDI R25,0
03DD 3080 CPI R24,0
03DE 0789 CPC R24,R25
03DF F169 BEQ 0x040D
(0221) {
(0222) for(i=0;i<3;i++) //查询前三个邮箱中断状态
03E0 2400 CLR R0
03E1 A20C STD Y+36,R0
03E2 C026 RJMP 0x0409
(0223) {
(0224) tempp=(1<<i);
03E3 A12C LDD R18,Y+36
03E4 2733 CLR R19
03E5 E001 LDI R16,1
03E6 E010 LDI R17,0
03E7 940E13B5 CALL lsl16
03E9 0168 MOVW R12,R16
(0225) RCF=(RCtemp2&tempp);
03EA A0AD LDD R10,Y+37
03EB A0BE LDD R11,Y+38
03EC 22A0 AND R10,R16
03ED 22B1 AND R11,R17
(0226) if(RCF!=0)
03EE 20AA TST R10
03EF F411 BNE 0x03F2
03F0 20BB TST R11
03F1 F0A1 BEQ 0x0406
(0227) {
(0228) CANPAGE = i<<4;
03F2 A18C LDD R24,Y+36
03F3 708F ANDI R24,0xF
03F4 9582 SWAP R24
03F5 EEED LDI R30,0xED
03F6 E0F0 LDI R31,0
03F7 8380 STD Z+0,R24
(0229) sta_temp = CANSTMOB;
03F8 EEEE LDI R30,0xEE
03F9 80E0 LDD R14,Z+0
(0230) if(sta_temp&0x40) //是发送完成中断
03FA FEE6 SBRS R14,6
03FB C00A RJMP 0x0406
(0231) {
(0232) send_count = 0; //清发送计数器
03FC 2422 CLR R2
03FD 9220034A STS send_count,R2
(0233) if(LED)
03FF C002 RJMP 0x0402
(0234)
(0235) PORTB |= 0x40;
0400 9A2E SBI 0x05,6
0401 C003 RJMP 0x0405
(0236) else
(0237)
(0238) PORTB &= 0xbf;
0402 B185 IN R24,0x05
0403 7B8F ANDI R24,0xBF
0404 B985 OUT 0x05,R24
(0239)
(0240) WDR();
0405 95A8 WDR
0406 A00C LDD R0,Y+36
0407 9403 INC R0
0408 A20C STD Y+36,R0
0409 A18C LDD R24,Y+36
040A 3083 CPI R24,3
040B F2B8 BCS 0x03E3
(0241) }
(0242) }
(0243) }
(0244) }
040C C0EC RJMP 0x04F9
(0245) else if(RCtemp2&(0x38))
040D A18D LDD R24,Y+37
040E A19E LDD R25,Y+38
040F 7388 ANDI R24,0x38
0410 7090 ANDI R25,0
0411 3080 CPI R24,0
0412 0789 CPC R24,R25
0413 F409 BNE 0x0415
0414 C0E4 RJMP 0x04F9
(0246) {
(0247) for(i=3;i<6;i++) //判断哪个邮箱产生接收中断
0415 E083 LDI R24,3
0416 A38C STD Y+36,R24
0417 C0DD RJMP 0x04F5
(0248) {
(0249) tempp=(1<<i);
0418 A12C LDD R18,Y+36
0419 2733 CLR R19
041A E001 LDI R16,1
041B E010 LDI R17,0
041C 940E13B5 CALL lsl16
041E 0168 MOVW R12,R16
(0250) RCF=(RCtemp2&tempp);
041F A0AD LDD R10,Y+37
0420 A0BE LDD R11,Y+38
0421 22A0 AND R10,R16
0422 22B1 AND R11,R17
(0251) if(RCF!=0)
0423 20AA TST R10
0424 F419 BNE 0x0428
0425 20BB TST R11
0426 F409 BNE 0x0428
0427 C0CA RJMP 0x04F2
(0252) {
(0253) if(LED)
0428 C002 RJMP 0x042B
(0254) PORTB |= 0X80;
0429 9A2F SBI 0x05,7
042A C003 RJMP 0x042E
(0255) else
(0256) PORTB &= 0X7f;
042B B185 IN R24,0x05
042C 778F ANDI R24,0x7F
042D B985 OUT 0x05,R24
(0257) CANPAGE = i<<4;
042E A18C LDD R24,Y+36
042F 708F ANDI R24,0xF
0430 9582 SWAP R24
0431 EEED LDI R30,0xED
0432 E0F0 LDI R31,0
0433 8380 STD Z+0,R24
(0258) WDR();
0434 95A8 WDR
(0259) for (nb_data = 0; nb_data <8; nb_data++)
0435 24EE CLR R14
0436 C011 RJMP 0x0448
(0260) {
(0261) rece_data[i-3].Data[nb_data]=CANMSG;
0437 E08C LDI R24,0xC
0438 A00C LDD R0,Y+36
0439 9D80 MUL R24,R0
043A 0110 MOVW R2,R0
043B EE8C LDI R24,0xEC
043C E091 LDI R25,1
043D 0E28 ADD R2,R24
043E 1E39 ADC R3,R25
043F 2DEE MOV R30,R14
0440 27FF CLR R31
0441 0DE2 ADD R30,R2
0442 1DF3 ADC R31,R3
0443 EFAA LDI R26,0xFA
0444 E0B0 LDI R27,0
0445 902C LD R2,0(X)
0446 8220 STD Z+0,R2
0447 94E3 INC R14
0448 2D8E MOV R24,R14
0449 3088 CPI R24,0x8
044A F360 BCS 0x0437
(0262) }
(0263) rece_data[i-3].ID = 0;
044B E08C LDI R24,0xC
044C A00C LDD R0,Y+36
044D 9D80 MUL R24,R0
044E 01F0 MOVW R30,R0
044F EE88 LDI R24,0xE8
0450 E091 LDI R25,1
0451 0FE8 ADD R30,R24
0452 1FF9 ADC R31,R25
0453 E040 LDI R20,0
0454 E050 LDI R21,0
0455 E060 LDI R22,0
0456 E070 LDI R23,0
0457 8340 STD Z+0,R20
0458 8351 STD Z+1,R21
0459 8362 STD Z+2,R22
045A 8373 STD Z+3,R23
(0264) rece_data[i-3].ID |= ((unsigned long) CANIDT1<<24); //get identifier
045B E08C LDI R24,0xC
045C A00C LDD R0,Y+36
045D 9D80 MUL R24,R0
045E 0110 MOVW R2,R0
045F EE88 LDI R24,0xE8
0460 E091 LDI R25,1
0461 0E28 ADD R2,R24
0462 1E39 ADC R3,R25
0463 E188 LDI R24,0x18
0464 E090 LDI R25,0
0465 EFE3 LDI R30,0xF3
0466 E0F0 LDI R31,0
0467 8100 LDD R16,Z+0
0468 2711 CLR R17
0469 2722 CLR R18
046A 2733 CLR R19
046B 938A ST R24,-Y
046C 940E13BC CALL lsl32
046E 01F1 MOVW R30,R2
046F 8040 LDD R4,Z+0
0470 8051 LDD R5,Z+1
0471 8062 LDD R6,Z+2
0472 8073 LDD R7,Z+3
0473 2A40 OR R4,R16
0474 2A51 OR R5,R17
0475 2A62 OR R6,R18
0476 2A73 OR R7,R19
0477 8240 STD Z+0,R4
0478 8251 STD Z+1,R5
0479 8262 STD Z+2,R6
047A 8273 STD Z+3,R7
(0265) rece_data[i-3].ID |= ((unsigned long) CANIDT2<<16);
047B E08C LDI R24,0xC
047C A00C LDD R0,Y+36
047D 9D80 MUL R24,R0
047E 0110 MOVW R2,R0
047F EE88 LDI R24,0xE8
0480 E091 LDI R25,1
0481 0E28 ADD R2,R24
0482 1E39 ADC R3,R25
0483 EFE2 LDI R30,0xF2
0484 E0F0 LDI R31,0
0485 8040 LDD R4,Z+0
0486 2455 CLR R5
0487 2466 CLR R6
0488 2477 CLR R7
0489 0132 MOVW R6,R4
048A 2444 CLR R4
048B 2455 CLR R5
048C 01F1 MOVW R30,R2
048D 8140 LDD R20,Z+0
048E 8151 LDD R21,Z+1
048F 8162 LDD R22,Z+2
0490 8173 LDD R23,Z+3
0491 2944 OR R20,R4
0492 2955 OR R21,R5
0493 2966 OR R22,R6
0494 2977 OR R23,R7
0495 8340 STD Z+0,R20
0496 8351 STD Z+1,R21
0497 8362 STD Z+2,R22
0498 8373 STD Z+3,R23
(0266) rece_data[i-3].ID |= ((unsigned long) CANIDT3<<8);
0499 E08C LDI R24,0xC
049A A00C LDD R0,Y+36
049B 9D80 MUL R24,R0
049C 0110 MOVW R2,R0
049D EE88 LDI R24,0xE8
049E E091 LDI R25,1
049F 0E28 ADD R2,R24
04A0 1E39 ADC R3,R25
04A1 E088 LDI R24,0x8
04A2 E090 LDI R25,0
04A3 EFE1 LDI R30,0xF1
04A4 E0F0 LDI R31,0
04A5 8100 LDD R16,Z+0
04A6 2711 CLR R17
04A7 2722 CLR R18
04A8 2733 CLR R19
04A9 938A ST R24,-Y
04AA 940E13BC CALL lsl32
04AC 01F1 MOVW R30,R2
04AD 8040 LDD R4,Z+0
04AE 8051 LDD R5,Z+1
04AF 8062 LDD R6,Z+2
04B0 8073 LDD R7,Z+3
04B1 2A40 OR R4,R16
04B2 2A51 OR R5,R17
04B3 2A62 OR R6,R18
04B4 2A73 OR R7,R19
04B5 8240 STD Z+0,R4
04B6 8251 STD Z+1,R5
04B7 8262 STD Z+2,R6
04B8 8273 STD Z+3,R7
(0267) rece_data[i-3].ID |= (CANIDT4&0xF8);
04B9 E08C LDI R24,0xC
04BA A00C LDD R0,Y+36
04BB 9D80 MUL R24,R0
04BC 0110 MOVW R2,R0
04BD EE88 LDI R24,0xE8
04BE E091 LDI R25,1
04BF 0E28 ADD R2,R24
04C0 1E39 ADC R3,R25
04C1 EFE0 LDI R30,0xF0
04C2 E0F0 LDI R31,0
04C3 8180 LDD R24,Z+0
04C4 2799 CLR R25
04C5 7F88 ANDI R24,0xF8
04C6 7090 ANDI R25,0
04C7 012C MOVW R4,R24
04C8 2466 CLR R6
04C9 FC57 SBRC R5,7
04CA 9460 COM R6
04CB 2477 CLR R7
04CC FC67 SBRC R6,7
04CD 9470 COM R7
04CE 01F1 MOVW R30,R2
04CF 8140 LDD R20,Z+0
04D0 8151 LDD R21,Z+1
04D1 8162 LDD R22,Z+2
04D2 8173 LDD R23,Z+3
04D3 2944 OR R20,R4
04D4 2955 OR R21,R5
04D5 2966 OR R22,R6
04D6 2977 OR R23,R7
04D7 8340 STD Z+0,R20
04D8 8351 STD Z+1,R21
04D9 8362 STD Z+2,R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -