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

📄 macan.lst

📁 工业开关量检测模块的原代码,带断线检测功能
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -