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

📄 macan.lst

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

⌨️ 快捷键说明

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