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

📄 128can.lst

📁 工业开关量检测模块的原代码,带断线检测功能
💻 LST
📖 第 1 页 / 共 5 页
字号:
    04E3 E091      LDI	R25,1
    04E4 0FE8      ADD	R30,R24
    04E5 1FF9      ADC	R31,R25
    04E6 0115      MOVW	R2,R10
    04E7 2C23      MOV	R2,R3
    04E8 2433      CLR	R3
    04E9 8220      STD	Z+0,R2
(0058) 	 Pass_Flag = Pass_Flag + 1;
    04EA 918001F5  LDS	R24,Pass_Flag
    04EC 5F8F      SUBI	R24,0xFF
    04ED 938001F5  STS	Pass_Flag,R24
(0059) 	 NOP();
    04EF 0000      NOP
    04F0 9543      INC	R20
    04F1 3046      CPI	R20,6
    04F2 F408      BCC	0x04F4
    04F3 CFB5      RJMP	0x04A9
(0060) 	}
(0061)     if(Pass_Flag!=0x06)
    04F4 918001F5  LDS	R24,Pass_Flag
    04F6 3086      CPI	R24,6
    04F7 F011      BEQ	0x04FA
(0062) 	  RESET;
    04F8 940C0000  JMP	0x0
(0063) 	 WDR();
    04FA 95A8      WDR
(0064) 	 
(0065) 	 Pass_Flag = 0x00;
    04FB 2422      CLR	R2
    04FC 922001F5  STS	Pass_Flag,R2
(0066) 	for(i=0;i<6;i++)
    04FE 2744      CLR	R20
    04FF C048      RJMP	0x0548
(0067) 	{
(0068) 	 temp=CANMOBMD[i]<<3;
    0500 E084      LDI	R24,4
    0501 9F84      MUL	R24,R20
    0502 01F0      MOVW	R30,R0
    0503 E38C      LDI	R24,0x3C
    0504 E091      LDI	R25,1
    0505 0FE8      ADD	R30,R24
    0506 1FF9      ADC	R31,R25
    0507 8100      LDD	R16,Z+0
    0508 8111      LDD	R17,Z+1
    0509 8122      LDD	R18,Z+2
    050A 8133      LDD	R19,Z+3
    050B E083      LDI	R24,3
    050C E090      LDI	R25,0
    050D 938A      ST	R24,-Y
    050E 940E0C57  CALL	lsl32
    0510 8308      STD	Y+0,R16
    0511 8319      STD	Y+1,R17
    0512 832A      STD	Y+2,R18
    0513 833B      STD	Y+3,R19
(0069) 	 temp1=(unsigned int)temp;               //低16位
    0514 8168      LDD	R22,Y+0
    0515 8179      LDD	R23,Y+1
(0070) 	 temp2=(unsigned int)(temp/0x00010000);  //高16位
    0516 8028      LDD	R2,Y+0
    0517 8039      LDD	R3,Y+1
    0518 804A      LDD	R4,Y+2
    0519 805B      LDD	R5,Y+3
    051A 0152      MOVW	R10,R4
(0071) 	 CANIDM[i][3]=(Uchar)temp1;
    051B E084      LDI	R24,4
    051C 9F84      MUL	R24,R20
    051D 01F0      MOVW	R30,R0
    051E EB87      LDI	R24,0xB7
    051F E091      LDI	R25,1
    0520 0FE8      ADD	R30,R24
    0521 1FF9      ADC	R31,R25
    0522 8360      STD	Z+0,R22
(0072) 	 CANIDM[i][2]=(Uchar)(temp1>>8);
    0523 E084      LDI	R24,4
    0524 9F84      MUL	R24,R20
    0525 01F0      MOVW	R30,R0
    0526 EB86      LDI	R24,0xB6
    0527 E091      LDI	R25,1
    0528 0FE8      ADD	R30,R24
    0529 1FF9      ADC	R31,R25
    052A 011B      MOVW	R2,R22
    052B 2C23      MOV	R2,R3
    052C 2433      CLR	R3
    052D 8220      STD	Z+0,R2
(0073) 	 CANIDM[i][1]=(Uchar)temp2;
    052E E084      LDI	R24,4
    052F 9F84      MUL	R24,R20
    0530 01F0      MOVW	R30,R0
    0531 EB85      LDI	R24,0xB5
    0532 E091      LDI	R25,1
    0533 0FE8      ADD	R30,R24
    0534 1FF9      ADC	R31,R25
    0535 82A0      STD	Z+0,R10
(0074) 	 CANIDM[i][0]=(Uchar)(temp2>>8); 
    0536 E084      LDI	R24,4
    0537 9F84      MUL	R24,R20
    0538 01F0      MOVW	R30,R0
    0539 EB84      LDI	R24,0xB4
    053A E091      LDI	R25,1
    053B 0FE8      ADD	R30,R24
    053C 1FF9      ADC	R31,R25
    053D 0115      MOVW	R2,R10
    053E 2C23      MOV	R2,R3
    053F 2433      CLR	R3
    0540 8220      STD	Z+0,R2
(0075) 	 Pass_Flag = Pass_Flag + 1;
    0541 918001F5  LDS	R24,Pass_Flag
    0543 5F8F      SUBI	R24,0xFF
    0544 938001F5  STS	Pass_Flag,R24
(0076) 	 NOP();
    0546 0000      NOP
    0547 9543      INC	R20
    0548 3046      CPI	R20,6
    0549 F408      BCC	0x054B
    054A CFB5      RJMP	0x0500
(0077) 	}
(0078) 	 if(Pass_Flag!=0x06)
    054B 918001F5  LDS	R24,Pass_Flag
    054D 3086      CPI	R24,6
    054E F011      BEQ	0x0551
(0079) 	  RESET;
    054F 940C0000  JMP	0x0
(0080)     //reset all MObs
(0081) 	
(0082) 	 Pass_Flag = 0x00;
    0551 2422      CLR	R2
    0552 922001F5  STS	Pass_Flag,R2
(0083)     for (i=0; i<15; i++)
    0554 2744      CLR	R20
    0555 C028      RJMP	0x057E
(0084)     {
(0085)         CANPAGE = (i<<4);           //select MOb
    0556 2F84      MOV	R24,R20
    0557 708F      ANDI	R24,0xF
    0558 9582      SWAP	R24
    0559 938000ED  STS	0xED,R24
(0086)         CANCDMOB = 0;           	//disable MOb
    055B 2422      CLR	R2
    055C 922000EF  STS	0xEF,R2
(0087)         CANSTMOB = 0;               //clear status
    055E 922000EE  STS	0xEE,R2
(0088)         CANIDT1 = 0;        		//clear ID
    0560 922000F3  STS	0xF3,R2
(0089)         CANIDT2 = 0;
    0562 922000F2  STS	0xF2,R2
(0090)         CANIDT3 = 0;
    0564 922000F1  STS	0xF1,R2
(0091)         CANIDT4 = 0;
    0566 922000F0  STS	0xF0,R2
(0092)         CANIDM1 = 0;            	//clear mask
    0568 922000F7  STS	0xF7,R2
(0093)         CANIDM2 = 0;
    056A 922000F6  STS	0xF6,R2
(0094)         CANIDM3 = 0;
    056C 922000F5  STS	0xF5,R2
(0095)         CANIDM4 = 0;
    056E 922000F4  STS	0xF4,R2
(0096)         for (j=0; j<8; j++)
    0570 2766      CLR	R22
    0571 C004      RJMP	0x0576
(0097)             CANMSG = 0;         //clear data
    0572 2422      CLR	R2
    0573 922000FA  STS	0xFA,R2
    0575 9563      INC	R22
    0576 3068      CPI	R22,0x8
    0577 F3D0      BCS	0x0572
(0098) 			
(0099) 	     Pass_Flag = Pass_Flag + 1;		
    0578 918001F5  LDS	R24,Pass_Flag
    057A 5F8F      SUBI	R24,0xFF
    057B 938001F5  STS	Pass_Flag,R24
    057D 9543      INC	R20
    057E 304F      CPI	R20,0xF
    057F F2B0      BCS	0x0556
(0100)     }
(0101) 	  if(Pass_Flag!=0x0f)
    0580 918001F5  LDS	R24,Pass_Flag
    0582 308F      CPI	R24,0xF
    0583 F011      BEQ	0x0586
(0102) 	    RESET;
    0584 940C0000  JMP	0x0
(0103) 		
(0104) 	 WDR();
    0586 95A8      WDR
(0105) 	CANBT1 = CanBaud[2][0];         
    0587 E9EA      LDI	R30,0x9A
    0588 E0F0      LDI	R31,0
    0589 91E4      LPM	R30,0(Z)
    058A 93E000E2  STS	0xE2,R30
(0106)     CANBT2 = CanBaud[2][1];
    058C E9EB      LDI	R30,0x9B
    058D E0F0      LDI	R31,0
    058E 91E4      LPM	R30,0(Z)
    058F 93E000E3  STS	0xE3,R30
(0107)     CANBT3 = CanBaud[2][2];
    0591 E9EC      LDI	R30,0x9C
    0592 E0F0      LDI	R31,0
    0593 91E4      LPM	R30,0(Z)
    0594 93E000E4  STS	0xE4,R30
(0108) 	
(0109)     //configure MObi
(0110) 	/******************************************************************/
(0111) 	
(0112) 	 Pass_Flag = 0x00;
    0596 2422      CLR	R2
    0597 922001F5  STS	Pass_Flag,R2
(0113)    for (i=0; i<3; i++)
    0599 2744      CLR	R20
    059A C05F      RJMP	0x05FA
(0114)    {
(0115) 	 CANPAGE = (i<<4);                   //MOb 0,1,2设置为发送模式
    059B 2F84      MOV	R24,R20
    059C 708F      ANDI	R24,0xF
    059D 9582      SWAP	R24
    059E 938000ED  STS	0xED,R24
(0116)      CANIDT1 = CANIDT[i][0];        		//初始化 ID
    05A0 E084      LDI	R24,4
    05A1 9F84      MUL	R24,R20
    05A2 01F0      MOVW	R30,R0
    05A3 E788      LDI	R24,0x78
    05A4 E091      LDI	R25,1
    05A5 0FE8      ADD	R30,R24
    05A6 1FF9      ADC	R31,R25
    05A7 8020      LDD	R2,Z+0
    05A8 922000F3  STS	0xF3,R2
(0117)      CANIDT2 = CANIDT[i][1];
    05AA E084      LDI	R24,4
    05AB 9F84      MUL	R24,R20
    05AC 01F0      MOVW	R30,R0
    05AD E789      LDI	R24,0x79
    05AE E091      LDI	R25,1
    05AF 0FE8      ADD	R30,R24
    05B0 1FF9      ADC	R31,R25
    05B1 8020      LDD	R2,Z+0
    05B2 922000F2  STS	0xF2,R2
(0118)      CANIDT3 = CANIDT[i][2];
    05B4 E084      LDI	R24,4
    05B5 9F84      MUL	R24,R20
    05B6 01F0      MOVW	R30,R0
    05B7 E78A      LDI	R24,0x7A
    05B8 E091      LDI	R25,1
    05B9 0FE8      ADD	R30,R24
    05BA 1FF9      ADC	R31,R25
    05BB 8020      LDD	R2,Z+0
    05BC 922000F1  STS	0xF1,R2
(0119)      CANIDT4 = CANIDT[i][3];
    05BE E084      LDI	R24,4
    05BF 9F84      MUL	R24,R20
    05C0 01F0      MOVW	R30,R0
    05C1 E78B      LDI	R24,0x7B
    05C2 E091      LDI	R25,1
    05C3 0FE8      ADD	R30,R24
    05C4 1FF9      ADC	R31,R25
    05C5 8020      LDD	R2,Z+0
    05C6 922000F0  STS	0xF0,R2
(0120)      CANIDM1 = CANIDM[i][0];            	//初始化 mask
    05C8 E084      LDI	R24,4
    05C9 9F84      MUL	R24,R20
    05CA 01F0      MOVW	R30,R0
    05CB EB84      LDI	R24,0xB4
    05CC E091      LDI	R25,1
    05CD 0FE8      ADD	R30,R24
    05CE 1FF9      ADC	R31,R25
    05CF 8020      LDD	R2,Z+0
    05D0 922000F7  STS	0xF7,R2
(0121)      CANIDM2 = CANIDM[i][1];
    05D2 E084      LDI	R24,4
    05D3 9F84      MUL	R24,R20
    05D4 01F0      MOVW	R30,R0
    05D5 EB85      LDI	R24,0xB5
    05D6 E091      LDI	R25,1
    05D7 0FE8      ADD	R30,R24
    05D8 1FF9      ADC	R31,R25
    05D9 8020      LDD	R2,Z+0
    05DA 922000F6  STS	0xF6,R2
(0122)      CANIDM3 = CANIDM[i][2];
    05DC E084      LDI	R24,4
    05DD 9F84      MUL	R24,R20
    05DE 01F0      MOVW	R30,R0
    05DF EB86      LDI	R24,0xB6
    05E0 E091      LDI	R25,1
    05E1 0FE8      ADD	R30,R24
    05E2 1FF9      ADC	R31,R25
    05E3 8020      LDD	R2,Z+0
    05E4 922000F5  STS	0xF5,R2
(0123)      CANIDM4 = CANIDM[i][3];               //0 = ignore bit
    05E6 E084      LDI	R24,4
    05E7 9F84      MUL	R24,R20
    05E8 01F0      MOVW	R30,R0
    05E9 EB87      LDI	R24,0xB7
    05EA E091      LDI	R25,1
    05EB 0FE8      ADD	R30,R24
    05EC 1FF9      ADC	R31,R25
    05ED 8020      LDD	R2,Z+0
    05EE 922000F4  STS	0xF4,R2
(0124)     //CANIDM4 = (1<<IDEMSK);                          //identifier extention mask
(0125)      CANCDMOB = (1<<IDE)|(8<<DLC0);     //reception, ext. ID,rev2.0B
    05F0 E188      LDI	R24,0x18
    05F1 938000EF  STS	0xEF,R24
(0126) 	 NOP();
    05F3 0000      NOP
(0127) 	 Pass_Flag = Pass_Flag + 1;		
    05F4 918001F5  LDS	R24,Pass_Flag
    05F6 5F8F      SUBI	R24,0xFF
    05F7 938001F5  STS	Pass_Flag,R24
    05F9 9543      INC	R20
    05FA 3043      CPI	R20,3
    05FB F408      BCC	0x05FD
    05FC CF9E      RJMP	0x059B
(0128) 	}
(0129) 	 
(0130) 	  if(Pass_Flag!=0x03)
    05FD 918001F5  LDS	R24,Pass_Flag
    05FF 3083      CPI	R24,3
    0600 F011      BEQ	0x0603
(0131) 	    RESET;
    0601 940C0000  JMP	0x0
(0132) 		
(0133) 	 WDR();
    0603 95A8      WDR
(0134) 	 
(0135) 	  Pass_Flag = 0x00;
    0604 2422      CLR	R2
    0605 922001F5  STS	Pass_Flag,R2
(0136) 	for(i=3;i<6;i++)                       
    0607 E043      LDI	R20,3
    0608 C05F      RJMP	0x0668
(0137) 	{
(0138) 	 CANPAGE = (i<<4);                   //MOb3,4,5设置为接受模式
    0609 2F84      MOV	R24,R20
    060A 708F      ANDI	R24,0xF
    060B 9582      SWAP	R24
    060C 938000ED  STS	0xED,R24
(0139)      CANIDT1 = CANIDT[i][0];        		//初始化 ID
    060E E084      LDI	R24,4
    060F 9F84      MUL	R24,R20
    0610 01F0      MOVW	R30,R0
    0611 E788      LDI	R24,0x78
    0612 E091      LDI	R25,1
    0613 0FE8      ADD	R30,R24
    0614 1FF9      ADC	R31,R25
    0615 8020      LDD	R2,Z+0
    0616 922000F3  STS	0xF3,R2
(0140)      CANIDT2 = CANIDT[i][1];
    0618 E084      LDI	R24,4
    0619 9F84      MUL	R24,R20
    061A 01F0      MOVW	R30,R0
    061B E789      LDI	R24,0x79
    061C E091      LDI	R25,1
    061D 0FE8      ADD	R30,R24
    061E 1FF9      ADC	R31,R25
    061F 8020      LDD	R2,Z+0
    0620 922000F2  STS	0xF2,R2
(0141)      CANIDT3 = CANIDT[i][2];
    0622 E084      LDI	R24,4
    0623 9F84      MUL	R24,R20
    0624 01F0      MOVW	R30,R0
    0625 E78A      LDI	R24,0x7A
    0626 E091      LDI	R25,1
    0627 0FE8      ADD	R30,R24
    0628 1FF9      ADC	R31,R25
    0629 8020      LDD	R2,Z+0
    062A 922000F1  STS	0xF1,R2
(0142)      CANIDT4 = CANIDT[i][3];
    062C E084      LDI	R24,4
    062D 9F84      MUL	R24,R20
    062E 01F0      MOVW	R30,R0
    062F E78B      LDI	R24,0x7B
    0630 E091      LDI	R25,1
    0631 0FE8      ADD	R30,R24
    0632 1FF9      ADC	R31,R25
    0633 8020      LDD	R2,Z+0
    0634 922000F0  STS	0xF0,R2
(0143)      CANIDM1 = CANIDM[i][0];            	//初始化 mask
    0636 E084      LDI	R24,4
    0637 9F84      MUL	R24,R20
    0638 01F0      MOVW	R30,R0
    0639 EB84      LDI	R24,0xB4
    063A E091      LDI	R25,1
    063B 0FE8      ADD	R30,R24
    063C 1FF9      ADC	R31,R25
    063D 8020      LDD	R2,Z+0
    063E 922000F7  STS	0xF7,R2
(0144)      CANIDM2 = CANIDM[i][1];
    0640 E084      LDI	R24,4
    0641 9F84      MUL	R24,R20
    0642 01F0      MOVW	R30,R0
    0643 EB85      LDI	R24,0xB5
    0644 E091      LDI	R25,1
    0645 0FE8      ADD	R30,R24
    0646 1FF9      ADC	R31,R25
    0647 8020      LDD	R2,Z+0
    0648 922000F6  STS	0xF6,R2
(0145)      CANIDM3 = CANIDM[i][2];
    064A E084      LDI	R24,4
    064B 9F84      MUL	R24,R20
    064C 01F0      MOVW	R30,R0
    064D EB86      LDI	R24,0xB6
    064E E091      LDI	R25,1
    064F 0FE8      ADD	R30,R24
    0650 1FF9      ADC	R31,R25
    0651 8020      LDD	R2,Z+0
    0652 922000F5  STS	0xF5,R2
(0146)      CANIDM4 = CANIDM[i][3];               //0 = ignore bit
    0654 E084      LDI	R24,4
    0655 9F84      MUL	R24,R20
    0656 01F0      MOVW	R30,R0
    0657 EB87      LDI	R24,0xB7
    0658 E091      LDI	R25,1
    0659 0FE8      ADD	R30,R24
    065A 1FF9      ADC	R31,R25
    065B 8020      LDD	R2,Z+0
    065C 922000F4  STS	0xF4,R2
(0147)      CANCDMOB = (2<<CONMOB0)|(1<<IDE)|(8<<DLC0);     //reception, ext. ID,rev2.0B
    065E E988      LDI	R24,0x98
    065F 938000EF  STS	0xEF,R24
(0148) 	 NOP();
    0661 0000      NOP
(0149) 	  Pass_Flag = Pass_Flag + 1;		
    0662 918001F5  LDS	R24,Pass_Flag
    0664 5F8F      SUBI	R24,0xFF

⌨️ 快捷键说明

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