⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pannel_can.lst

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -