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

📄 pannel_can.lst

📁 LED显示面板
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -