📄 alarm_pannel.lst
字号:
023C 922006C9 STS Pass_Flag,R2
(0116) for (i=0; i<3; i++)
023E 2744 CLR R20
023F C068 RJMP 0x02A8
(0117) {
(0118) CANPAGE = (i<<4); //MOb 0,1,2设置为接收模式模式
0240 2F84 MOV R24,R20
0241 708F ANDI R24,0xF
0242 9582 SWAP R24
0243 EEED LDI R30,0xED
0244 E0F0 LDI R31,0
0245 8380 STD Z+0,R24
(0119) CANIDT1 = CANIDT[i][0]; //初始化 ID
0246 E084 LDI R24,4
0247 9F84 MUL R24,R20
0248 01F0 MOVW R30,R0
0249 E788 LDI R24,0x78
024A E091 LDI R25,1
024B 0FE8 ADD R30,R24
024C 1FF9 ADC R31,R25
024D 8020 LDD R2,Z+0
024E EFE3 LDI R30,0xF3
024F E0F0 LDI R31,0
0250 8220 STD Z+0,R2
(0120) CANIDT2 = CANIDT[i][1];
0251 E084 LDI R24,4
0252 9F84 MUL R24,R20
0253 01F0 MOVW R30,R0
0254 E789 LDI R24,0x79
0255 E091 LDI R25,1
0256 0FE8 ADD R30,R24
0257 1FF9 ADC R31,R25
0258 8020 LDD R2,Z+0
0259 EFE2 LDI R30,0xF2
025A E0F0 LDI R31,0
025B 8220 STD Z+0,R2
(0121) CANIDT3 = CANIDT[i][2];
025C E084 LDI R24,4
025D 9F84 MUL R24,R20
025E 01F0 MOVW R30,R0
025F E78A LDI R24,0x7A
0260 E091 LDI R25,1
0261 0FE8 ADD R30,R24
0262 1FF9 ADC R31,R25
0263 8020 LDD R2,Z+0
0264 EFE1 LDI R30,0xF1
0265 E0F0 LDI R31,0
0266 8220 STD Z+0,R2
(0122) CANIDT4 = CANIDT[i][3];
0267 E084 LDI R24,4
0268 9F84 MUL R24,R20
0269 01F0 MOVW R30,R0
026A E78B LDI R24,0x7B
026B E091 LDI R25,1
026C 0FE8 ADD R30,R24
026D 1FF9 ADC R31,R25
026E 8020 LDD R2,Z+0
026F EFE0 LDI R30,0xF0
0270 E0F0 LDI R31,0
0271 8220 STD Z+0,R2
(0123) CANIDM1 = CANIDM[i][0]; //初始化 mask
0272 E084 LDI R24,4
0273 9F84 MUL R24,R20
0274 01F0 MOVW R30,R0
0275 EB84 LDI R24,0xB4
0276 E091 LDI R25,1
0277 0FE8 ADD R30,R24
0278 1FF9 ADC R31,R25
0279 8020 LDD R2,Z+0
027A EFE7 LDI R30,0xF7
027B E0F0 LDI R31,0
027C 8220 STD Z+0,R2
(0124) CANIDM2 = CANIDM[i][1];
027D E084 LDI R24,4
027E 9F84 MUL R24,R20
027F 01F0 MOVW R30,R0
0280 EB85 LDI R24,0xB5
0281 E091 LDI R25,1
0282 0FE8 ADD R30,R24
0283 1FF9 ADC R31,R25
0284 8020 LDD R2,Z+0
0285 EFE6 LDI R30,0xF6
0286 E0F0 LDI R31,0
0287 8220 STD Z+0,R2
(0125) CANIDM3 = CANIDM[i][2];
0288 E084 LDI R24,4
0289 9F84 MUL R24,R20
028A 01F0 MOVW R30,R0
028B EB86 LDI R24,0xB6
028C E091 LDI R25,1
028D 0FE8 ADD R30,R24
028E 1FF9 ADC R31,R25
028F 8020 LDD R2,Z+0
0290 EFE5 LDI R30,0xF5
0291 E0F0 LDI R31,0
0292 8220 STD Z+0,R2
(0126) CANIDM4 = CANIDM[i][3]; //0 = ignore bit
0293 E084 LDI R24,4
0294 9F84 MUL R24,R20
0295 01F0 MOVW R30,R0
0296 EB87 LDI R24,0xB7
0297 E091 LDI R25,1
0298 0FE8 ADD R30,R24
0299 1FF9 ADC R31,R25
029A 8020 LDD R2,Z+0
029B EFE4 LDI R30,0xF4
029C E0F0 LDI R31,0
029D 8220 STD Z+0,R2
(0127) //CANIDM4 = (1<<IDEMSK); //identifier extention mask
(0128) CANCDMOB = (2<<CONMOB0)|(1<<IDE)|(8<<DLC0); //reception, ext. ID,rev2.0B
029E E988 LDI R24,0x98
029F EEEF LDI R30,0xEF
02A0 8380 STD Z+0,R24
(0129) NOP();
02A1 0000 NOP
(0130) Pass_Flag = Pass_Flag + 1;
02A2 918006C9 LDS R24,Pass_Flag
02A4 5F8F SUBI R24,0xFF
02A5 938006C9 STS Pass_Flag,R24
02A7 9543 INC R20
02A8 3043 CPI R20,3
02A9 F408 BCC 0x02AB
02AA CF95 RJMP 0x0240
(0131) }
(0132)
(0133) if(Pass_Flag!=0x03)
02AB 918006C9 LDS R24,Pass_Flag
02AD 3083 CPI R24,3
02AE F011 BEQ 0x02B1
(0134) RESET;
02AF 940C0000 JMP 0x0
(0135)
(0136) WDR();
02B1 95A8 WDR
(0137)
(0138) Pass_Flag = 0x00;
02B2 2422 CLR R2
02B3 922006C9 STS Pass_Flag,R2
(0139) for(i=3;i<6;i++)
02B5 E043 LDI R20,3
02B6 C068 RJMP 0x031F
(0140) {
(0141) CANPAGE = (i<<4); //MOb3,4,5设置为发送模式
02B7 2F84 MOV R24,R20
02B8 708F ANDI R24,0xF
02B9 9582 SWAP R24
02BA EEED LDI R30,0xED
02BB E0F0 LDI R31,0
02BC 8380 STD Z+0,R24
(0142) CANIDT1 = CANIDT[i][0]; //初始化 ID
02BD E084 LDI R24,4
02BE 9F84 MUL R24,R20
02BF 01F0 MOVW R30,R0
02C0 E788 LDI R24,0x78
02C1 E091 LDI R25,1
02C2 0FE8 ADD R30,R24
02C3 1FF9 ADC R31,R25
02C4 8020 LDD R2,Z+0
02C5 EFE3 LDI R30,0xF3
02C6 E0F0 LDI R31,0
02C7 8220 STD Z+0,R2
(0143) CANIDT2 = CANIDT[i][1];
02C8 E084 LDI R24,4
02C9 9F84 MUL R24,R20
02CA 01F0 MOVW R30,R0
02CB E789 LDI R24,0x79
02CC E091 LDI R25,1
02CD 0FE8 ADD R30,R24
02CE 1FF9 ADC R31,R25
02CF 8020 LDD R2,Z+0
02D0 EFE2 LDI R30,0xF2
02D1 E0F0 LDI R31,0
02D2 8220 STD Z+0,R2
(0144) CANIDT3 = CANIDT[i][2];
02D3 E084 LDI R24,4
02D4 9F84 MUL R24,R20
02D5 01F0 MOVW R30,R0
02D6 E78A LDI R24,0x7A
02D7 E091 LDI R25,1
02D8 0FE8 ADD R30,R24
02D9 1FF9 ADC R31,R25
02DA 8020 LDD R2,Z+0
02DB EFE1 LDI R30,0xF1
02DC E0F0 LDI R31,0
02DD 8220 STD Z+0,R2
(0145) CANIDT4 = CANIDT[i][3];
02DE E084 LDI R24,4
02DF 9F84 MUL R24,R20
02E0 01F0 MOVW R30,R0
02E1 E78B LDI R24,0x7B
02E2 E091 LDI R25,1
02E3 0FE8 ADD R30,R24
02E4 1FF9 ADC R31,R25
02E5 8020 LDD R2,Z+0
02E6 EFE0 LDI R30,0xF0
02E7 E0F0 LDI R31,0
02E8 8220 STD Z+0,R2
(0146) CANIDM1 = CANIDM[i][0]; //初始化 mask
02E9 E084 LDI R24,4
02EA 9F84 MUL R24,R20
02EB 01F0 MOVW R30,R0
02EC EB84 LDI R24,0xB4
02ED E091 LDI R25,1
02EE 0FE8 ADD R30,R24
02EF 1FF9 ADC R31,R25
02F0 8020 LDD R2,Z+0
02F1 EFE7 LDI R30,0xF7
02F2 E0F0 LDI R31,0
02F3 8220 STD Z+0,R2
(0147) CANIDM2 = CANIDM[i][1];
02F4 E084 LDI R24,4
02F5 9F84 MUL R24,R20
02F6 01F0 MOVW R30,R0
02F7 EB85 LDI R24,0xB5
02F8 E091 LDI R25,1
02F9 0FE8 ADD R30,R24
02FA 1FF9 ADC R31,R25
02FB 8020 LDD R2,Z+0
02FC EFE6 LDI R30,0xF6
02FD E0F0 LDI R31,0
02FE 8220 STD Z+0,R2
(0148) CANIDM3 = CANIDM[i][2];
02FF E084 LDI R24,4
0300 9F84 MUL R24,R20
0301 01F0 MOVW R30,R0
0302 EB86 LDI R24,0xB6
0303 E091 LDI R25,1
0304 0FE8 ADD R30,R24
0305 1FF9 ADC R31,R25
0306 8020 LDD R2,Z+0
0307 EFE5 LDI R30,0xF5
0308 E0F0 LDI R31,0
0309 8220 STD Z+0,R2
(0149) CANIDM4 = CANIDM[i][3]; //0 = ignore bit
030A E084 LDI R24,4
030B 9F84 MUL R24,R20
030C 01F0 MOVW R30,R0
030D EB87 LDI R24,0xB7
030E E091 LDI R25,1
030F 0FE8 ADD R30,R24
0310 1FF9 ADC R31,R25
0311 8020 LDD R2,Z+0
0312 EFE4 LDI R30,0xF4
0313 E0F0 LDI R31,0
0314 8220 STD Z+0,R2
(0150) CANCDMOB = (1<<IDE)|(8<<DLC0);
0315 E188 LDI R24,0x18
0316 EEEF LDI R30,0xEF
0317 8380 STD Z+0,R24
(0151) NOP();
0318 0000 NOP
(0152) Pass_Flag = Pass_Flag + 1;
0319 918006C9 LDS R24,Pass_Flag
031B 5F8F SUBI R24,0xFF
031C 938006C9 STS Pass_Flag,R24
031E 9543 INC R20
031F 3046 CPI R20,6
0320 F408 BCC 0x0322
0321 CF95 RJMP 0x02B7
(0153) }
(0154) if(Pass_Flag!=0x03)
0322 918006C9 LDS R24,Pass_Flag
0324 3083 CPI R24,3
0325 F011 BEQ 0x0328
(0155) RESET;
0326 940C0000 JMP 0x0
(0156)
(0157) CANGCON = (1<<ENASTB); //start CAN interface, enable mod
0328 E082 LDI R24,2
0329 EDE8 LDI R30,0xD8
032A E0F0 LDI R31,0
032B 8380 STD Z+0,R24
(0158)
(0159) CANGIE = (1<<ENIT)| (1<<ENRX)|(1<<ENTX); //enable receive interrupt and transmitte interrupt
032C EB80 LDI R24,0xB0
032D EDEB LDI R30,0xDB
032E 8380 STD Z+0,R24
(0160) CANIE1 = 0x00;
032F 2422 CLR R2
0330 EDEF LDI R30,0xDF
0331 8220 STD Z+0,R2
(0161) CANIE2 = 0x3f; //enable ALL MObs interrupt
0332 E38F LDI R24,0x3F
0333 EDEE LDI R30,0xDE
0334 8380 STD Z+0,R24
(0162)
(0163) WDR();
0335 95A8 WDR
(0164) while (!(CANGSTA & (1<<ENFG))); //wait until module ready
0336 EDE9 LDI R30,0xD9
0337 E0F0 LDI R31,0
0338 8020 LDD R2,Z+0
0339 FE22 SBRS R2,2
033A CFFB RJMP 0x0336
(0165)
(0166) CANGCON |= (1<<ENA); //enable CAN controller
033B 918000D8 LDS R24,0xD8
033D 6082 ORI R24,2
033E 938000D8 STS 0xD8,R24
(0167)
(0168) SEI();
0340 9478 BSET 7
0341 9624 ADIW R28,4
0342 940E224B CALL pop_gset3
0344 9508 RET
_can_tx:
temp_id --> Y+0
index --> R14
pass_Flag --> R12
i --> R12
msg --> R10
0345 940E2254 CALL push_gset5
0347 0158 MOVW R10,R16
0348 9724 SBIW R28,4
(0169) }
(0170)
(0171)
(0172)
(0173) /*******************************************************************
(0174) CAN transmission via mailbox 1 (polling)
(0175) *******************************************************************/
(0176) void can_tx (VCI_CAN_OBJ msg)
(0177) {
(0178) unsigned char i,index,pass_Flag;
(0179) long temp_id;
(0180)
(0181) pass_Flag = 0x01;
0349 24CC CLR R12
034A 94C3 INC R12
(0182) pass_Flag <<= 1;
034B 0CCC LSL R12
(0183) msg.ID <<= 3;
034C E083 LDI R24,3
034D E090 LDI R25,0
034E 01F5 MOVW R30,R10
034F 8100 LDD R16,Z+0
0350 8111 LDD R17,Z+1
0351 8122 LDD R18,Z+2
0352 8133 LDD R19,Z+3
0353 938A ST R24,-Y
0354 940E22C5 CALL lsl32
0356 01F5 MOVW R30,R10
0357 8300 STD Z+0,R16
0358 8311 STD Z+1,R17
0359 8322 STD Z+2,R18
035A 8333 STD Z+3,R19
(0184) temp_id = msg.ID&0x0f000000 ;
035B E040 LDI R20,0
035C E050 LDI R21,0
035D E060 LDI R22,0
035E E07F LDI R23,0xF
035F 8020 LDD R2,Z+0
0360 8031 LDD R3,Z+1
0361 8042 LDD R4,Z+2
0362 8053 LDD R5,Z+3
0363 2224 AND R2,R20
0364 2235 AND R3,R21
0365 2246 AND R4,R22
0366 2257 AND R5,R23
0367 8228 STD Y+0,R2
0368 8239 STD Y+1,R3
0369 824A STD Y+2,R4
036A 825B STD Y+3,R5
(0185) index =( unsigned char )(temp_id>>24);
036B E188 LDI R24,0x18
036C E090 LDI R25,0
036D 8108 LDD R16,Y+0
036E 8119 LDD R17,Y+1
036F 812A LDD R18,Y+2
0370 813B LDD R19,Y+3
0371 938A ST R24,-Y
0372 940E21F8 CALL asr32
0374 2EE0 MOV R14,R16
(0186) index = index + 3;
0375 2D8E MOV R24,R14
0376 5F8D SUBI R24,0xFD
0377 2EE8 MOV R14,R24
(0187) CANPAGE = (index<<4);
0378 708F ANDI R24,0xF
0379 9582 SWAP R24
037A EEED LDI R30,0xED
037B E0F0 LDI R31,0
037C 8380 STD Z+0,R24
(0188) CANCDMOB = (1<<IDE) |(8<<DLC0);
037D E188 LDI R24,0x18
037E EEEF LDI R30,0xEF
037F 8380 STD Z+0,R24
(0189) pass_Flag <<= 1;
0380 0CCC LSL R12
(0190) CANIDT4 = (unsigned char) (msg.ID&0xF8);
0381 EF48 LDI R20,0xF8
0382 E050 LDI R21,0
0383 E060 LDI R22,0
0384 E070 LDI R23,0
0385 01F5 MOVW R30,R10
0386 8020 LDD R2,Z+0
0387 8031 LDD R3,Z+1
0388 8042 LDD R4,Z+2
0389 8053 LDD R5,Z+3
038A 2224 AND R2,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -