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