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

📄 128can.lst

📁 工业开关量检测模块的原代码,带断线检测功能
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0398 358A      CPI	R24,0x5A
    0399 F009      BEQ	0x039B
    039A C06A      RJMP	0x0405
(0299)   {  
(0300)     CLI();
    039B 94F8      BCLR	7
(0301) 	
(0302) 	WDR();
    039C 95A8      WDR
(0303) 	TIMSK0 = 0x00; 
    039D 2422      CLR	R2
    039E 9220006E  STS	0x6E,R2
(0304) 	if(LED)
(0305) 	{
(0306) 	PORTB &= 0X3F;                                           //灭网络灯
    03A0 B185      IN	R24,0x05
    03A1 738F      ANDI	R24,0x3F
    03A2 B985      OUT	0x05,R24
(0307) 	}
    03A3 C003      RJMP	0x03A7
(0308) 	else
(0309) 	
(0310) 	PORTB |= 0Xc0;              
    03A4 B185      IN	R24,0x05
    03A5 6C80      ORI	R24,0xC0
    03A6 B985      OUT	0x05,R24
(0311) 	
(0312)     DI_handle();                                             //读取开关状态
    03A7 940E0914  CALL	_DI_handle
(0313)    
(0314)     for(i=0;i<12;i++)
    03A9 24AA      CLR	R10
    03AA C04A      RJMP	0x03F5
(0315)    {
(0316)       if(DI_data_pre[i] == DI_data_cur[i])                   //去抖处理
    03AB E683      LDI	R24,0x63
    03AC E092      LDI	R25,2
    03AD 2DEA      MOV	R30,R10
    03AE 27FF      CLR	R31
    03AF 0FE8      ADD	R30,R24
    03B0 1FF9      ADC	R31,R25
    03B1 8020      LDD	R2,Z+0
    03B2 E48B      LDI	R24,0x4B
    03B3 E092      LDI	R25,2
    03B4 2DEA      MOV	R30,R10
    03B5 27FF      CLR	R31
    03B6 0FE8      ADD	R30,R24
    03B7 1FF9      ADC	R31,R25
    03B8 8030      LDD	R3,Z+0
    03B9 1432      CP	R3,R2
    03BA F479      BNE	0x03CA
(0317)      {
(0318) 	   DI_data[i] = DI_data_cur[i];
    03BB E683      LDI	R24,0x63
    03BC E092      LDI	R25,2
    03BD 2DEA      MOV	R30,R10
    03BE 27FF      CLR	R31
    03BF 0FE8      ADD	R30,R24
    03C0 1FF9      ADC	R31,R25
    03C1 8020      LDD	R2,Z+0
    03C2 E587      LDI	R24,0x57
    03C3 E092      LDI	R25,2
    03C4 2DEA      MOV	R30,R10
    03C5 27FF      CLR	R31
    03C6 0FE8      ADD	R30,R24
    03C7 1FF9      ADC	R31,R25
    03C8 8220      STD	Z+0,R2
(0319) 	  }
    03C9 C01C      RJMP	0x03E6
(0320)       else if (DI_data_pre[i] != DI_data_cur[i])
    03CA E683      LDI	R24,0x63
    03CB E092      LDI	R25,2
    03CC 2DEA      MOV	R30,R10
    03CD 27FF      CLR	R31
    03CE 0FE8      ADD	R30,R24
    03CF 1FF9      ADC	R31,R25
    03D0 8020      LDD	R2,Z+0
    03D1 E48B      LDI	R24,0x4B
    03D2 E092      LDI	R25,2
    03D3 2DEA      MOV	R30,R10
    03D4 27FF      CLR	R31
    03D5 0FE8      ADD	R30,R24
    03D6 1FF9      ADC	R31,R25
    03D7 8030      LDD	R3,Z+0
    03D8 1432      CP	R3,R2
    03D9 F061      BEQ	0x03E6
(0321) 	     {
(0322) 		  DI_data[i] = DI_data_pre[i];
    03DA 2DEA      MOV	R30,R10
    03DB 27FF      CLR	R31
    03DC 0FE8      ADD	R30,R24
    03DD 1FF9      ADC	R31,R25
    03DE 8020      LDD	R2,Z+0
    03DF E587      LDI	R24,0x57
    03E0 E092      LDI	R25,2
    03E1 2DEA      MOV	R30,R10
    03E2 27FF      CLR	R31
    03E3 0FE8      ADD	R30,R24
    03E4 1FF9      ADC	R31,R25
    03E5 8220      STD	Z+0,R2
(0323) 		 } 
(0324) 	  DI_data_pre[i] = DI_data_cur[i];                      //新旧值更新
    03E6 E683      LDI	R24,0x63
    03E7 E092      LDI	R25,2
    03E8 2DEA      MOV	R30,R10
    03E9 27FF      CLR	R31
    03EA 0FE8      ADD	R30,R24
    03EB 1FF9      ADC	R31,R25
    03EC 8020      LDD	R2,Z+0
    03ED E48B      LDI	R24,0x4B
    03EE E092      LDI	R25,2
    03EF 2DEA      MOV	R30,R10
    03F0 27FF      CLR	R31
    03F1 0FE8      ADD	R30,R24
    03F2 1FF9      ADC	R31,R25
    03F3 8220      STD	Z+0,R2
    03F4 94A3      INC	R10
    03F5 2D8A      MOV	R24,R10
    03F6 308C      CPI	R24,0xC
    03F7 F408      BCC	0x03F9
    03F8 CFB2      RJMP	0x03AB
(0325)       }
(0326) 	Temp_Flag = 0x00;                                       //清除定时标志
    03F9 2422      CLR	R2
    03FA 922001F3  STS	Temp_Flag,R2
(0327) 	
(0328) 	Time = 0;
    03FC 922001F2  STS	Time,R2
(0329) 	
(0330) 	timer0_init();
    03FE 940E0AFC  CALL	_timer0_init
(0331) 	
(0332) 	TIMSK0 = 0x01; //timer interrupt sources
    0400 E081      LDI	R24,1
    0401 9380006E  STS	0x6E,R24
(0333) 	
(0334) 	WDR();
    0403 95A8      WDR
(0335) 	SEI();
    0404 9478      BSET	7
(0336) 	}
(0337) 	
(0338)    if(Send_Flag == 0x5a)	
    0405 918001F4  LDS	R24,Send_Flag
    0407 358A      CPI	R24,0x5A
    0408 F009      BEQ	0x040A
    0409 C088      RJMP	0x0492
(0339)    {
(0340)      WDR();
    040A 95A8      WDR
(0341)     msg[0].ID = id1;                                     //前八个通道数据发送
    040B 9040020A  LDS	R4,id1+2
    040D 9050020B  LDS	R5,id1+3
    040F 90200208  LDS	R2,id1
    0411 90300209  LDS	R3,id1+1
    0413 92300231  STS	msg+1,R3
    0415 92200230  STS	msg,R2
    0417 92500233  STS	msg+3,R5
    0419 92400232  STS	msg+2,R4
(0342) 	for(i=0;i<8;i++)
    041B 24AA      CLR	R10
    041C C00F      RJMP	0x042C
(0343) 	{
(0344) 	msg[0].Data[i] =  DI_data[i];
    041D E587      LDI	R24,0x57
    041E E092      LDI	R25,2
    041F 2DEA      MOV	R30,R10
    0420 27FF      CLR	R31
    0421 0FE8      ADD	R30,R24
    0422 1FF9      ADC	R31,R25
    0423 8020      LDD	R2,Z+0
    0424 E384      LDI	R24,0x34
    0425 E092      LDI	R25,2
    0426 2DEA      MOV	R30,R10
    0427 27FF      CLR	R31
    0428 0FE8      ADD	R30,R24
    0429 1FF9      ADC	R31,R25
    042A 8220      STD	Z+0,R2
    042B 94A3      INC	R10
    042C 2D8A      MOV	R24,R10
    042D 3088      CPI	R24,0x8
    042E F370      BCS	0x041D
(0345) 	}
(0346)     can_tx (msg[0]);
    042F E380      LDI	R24,0x30
    0430 E092      LDI	R25,2
    0431 01FE      MOVW	R30,R28
    0432 9634      ADIW	R30,4
    0433 E00C      LDI	R16,0xC
    0434 E010      LDI	R17,0
    0435 93FA      ST	R31,-Y
    0436 93EA      ST	R30,-Y
    0437 939A      ST	R25,-Y
    0438 938A      ST	R24,-Y
    0439 940E0C69  CALL	asgnblk
    043B 018E      MOVW	R16,R28
    043C 5F0C      SUBI	R16,0xFC
    043D 4F1F      SBCI	R17,0xFF
    043E 940E068C  CALL	_can_tx
(0347) 	send_count++;
    0440 91800248  LDS	R24,send_count
    0442 5F8F      SUBI	R24,0xFF
    0443 93800248  STS	send_count,R24
(0348) 	msg[1].ID = id2;
    0445 90400206  LDS	R4,id2+2
    0447 90500207  LDS	R5,id2+3
    0449 90200204  LDS	R2,id2
    044B 90300205  LDS	R3,id2+1
    044D 9230023D  STS	0x23D,R3
    044F 9220023C  STS	0x23C,R2
    0451 9250023F  STS	0x23F,R5
    0453 9240023E  STS	0x23E,R4
(0349) 	for(i=0;i<4;i++)                                     //后四个通道数据发送
    0455 24AA      CLR	R10
    0456 C00F      RJMP	0x0466
(0350) 	{
(0351) 	msg[1].Data[i] =  DI_data[i+8]; 
    0457 E58F      LDI	R24,0x5F
    0458 E092      LDI	R25,2
    0459 2DEA      MOV	R30,R10
    045A 27FF      CLR	R31
    045B 0FE8      ADD	R30,R24
    045C 1FF9      ADC	R31,R25
    045D 8020      LDD	R2,Z+0
    045E E480      LDI	R24,0x40
    045F E092      LDI	R25,2
    0460 2DEA      MOV	R30,R10
    0461 27FF      CLR	R31
    0462 0FE8      ADD	R30,R24
    0463 1FF9      ADC	R31,R25
    0464 8220      STD	Z+0,R2
    0465 94A3      INC	R10
    0466 2D8A      MOV	R24,R10
    0467 3084      CPI	R24,4
    0468 F370      BCS	0x0457
(0352) 	}
(0353)     for(i=4;i<8;i++)
    0469 E084      LDI	R24,4
    046A 2EA8      MOV	R10,R24
    046B C009      RJMP	0x0475
(0354) 	{
(0355) 	msg[1].Data[i]=0x00;
    046C E480      LDI	R24,0x40
    046D E092      LDI	R25,2
    046E 2DEA      MOV	R30,R10
    046F 27FF      CLR	R31
    0470 0FE8      ADD	R30,R24
    0471 1FF9      ADC	R31,R25
    0472 2422      CLR	R2
    0473 8220      STD	Z+0,R2
    0474 94A3      INC	R10
    0475 2D8A      MOV	R24,R10
    0476 3088      CPI	R24,0x8
    0477 F3A0      BCS	0x046C
(0356) 	}
(0357)     can_tx (msg[1]);
    0478 E38C      LDI	R24,0x3C
    0479 E092      LDI	R25,2
    047A 01FE      MOVW	R30,R28
    047B 9670      ADIW	R30,0x10
    047C E00C      LDI	R16,0xC
    047D E010      LDI	R17,0
    047E 93FA      ST	R31,-Y
    047F 93EA      ST	R30,-Y
    0480 939A      ST	R25,-Y
    0481 938A      ST	R24,-Y
    0482 940E0C69  CALL	asgnblk
    0484 018E      MOVW	R16,R28
    0485 5F00      SUBI	R16,0xF0
    0486 4F1F      SBCI	R17,0xFF
    0487 940E068C  CALL	_can_tx
(0358) 	send_count++;
    0489 91800248  LDS	R24,send_count
    048B 5F8F      SUBI	R24,0xFF
    048C 93800248  STS	send_count,R24
(0359) 	Send_Flag = 0x00;
    048E 2422      CLR	R2
    048F 922001F4  STS	Send_Flag,R2
(0360) 	 WDR();
    0491 95A8      WDR
    0492 CDD0      RJMP	0x0263
    0493 966C      ADIW	R28,0x1C
    0494 9508      RET
FILE: D:\报警系统设计资料\报警系统软件\测量模块基于CAN的系统网程序\开关量CAN网\can.c
(0001) #include "main.h"
(0002) 
(0003) //#pragma interrupt_handler can_ReceiveData:19
(0004) 
(0005) /*******************************************************************
(0006) CAN initialization:
(0007) Mailbox 0: Receive  --> interrupt
(0008) Mailbox 1: Transmit --> polling
(0009) *******************************************************************/
(0010) #define TYP_RESET		5
(0011) #define TYP_BAUD		10
(0012) 
(0013) #define SELFID  2
(0014) 
(0015) extern unsigned char sysrst,Pass_Flag;
(0016) unsigned char canbaud;
(0017) extern VCI_CAN_OBJ rece_data[3];
(0018) 
(0019) const Uchar CanBaud[6][3]={{0x02,0x04,0x13},{0x06,0x04,0x13},{0x0E,0x04,0x13},{0x12,0x04,0x13},{0x1E,0x04,0x13},{0x26,0x04,0x13}};
(0020) //波特率数组
(0021) 
(0022) //15个MOB的ID和MID
(0023) unsigned long CANMOBID[15]={0x10000000,0x20000000,0x30000000,0x40000000,0x50000000,0x60000000,0x01000000,0x01000001,0x0200ff00,0x12000001,0x01000002,0x01000003,0x01000004,0x01000005,0x1300ff01};
(0024) unsigned long CANMOBMD[15]={0x0000ffff,0x0000ffff,0x0000ffff,0x00ff00ff,0x00ff00ff,0x00ff00ff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff};
(0025) unsigned char CANIDT[15][4]={0};
(0026) unsigned char CANIDM[15][4]={0};
(0027) Uchar counterTemp,send_count;
(0028) 
(0029) void can_init (void)                            //CAN初始化函数
(0030) {
(0031)  canMob_init();
_can_init:
    0495 D001      RCALL	_canMob_init
    0496 9508      RET
_canMob_init:
  temp2                --> R10
  temp1                --> R22
  temp                 --> Y,+0
  j                    --> R22
  i                    --> R20
    0497 940E0BD9  CALL	push_gset3
    0499 9724      SBIW	R28,4
(0032) }
(0033) 
(0034) 
(0035) void canMob_init (void)                       //MOB初始化函数
(0036) {
(0037)     unsigned char i,j;
(0038) 	unsigned long temp;
(0039) 	unsigned int temp1,temp2;
(0040) 	
(0041) 	CLI();                                    //关中断
    049A 94F8      BCLR	7
(0042) 	//DDRD=(1<<PD5)|(0<<PD6);   //TXCAN, RXCNA
(0043) 	DDRD|=0x20;                               //CAN管脚初始化
    049B 9A55      SBI	0x0A,5
(0044) 	DDRD&=0xBF;
    049C B18A      IN	R24,0x0A
    049D 7B8F      ANDI	R24,0xBF
    049E B98A      OUT	0x0A,R24
(0045) 	CANGCON |= (1<<SWRES);              //reset CAN interface
    049F 918000D8  LDS	R24,0xD8
    04A1 6081      ORI	R24,1
    04A2 938000D8  STS	0xD8,R24
(0046)     
(0047) 	Pass_Flag = 0x00;
    04A4 2422      CLR	R2
    04A5 922001F5  STS	Pass_Flag,R2
(0048) 	//CANMOBID[2]=(unsigned long)(SELFID<<8)|CANMOBID[2];
(0049) 	for(i=0;i<6;i++)                          //15个邮箱初始化
    04A7 2744      CLR	R20
    04A8 C048      RJMP	0x04F1
(0050) 	{
(0051) 	 temp=CANMOBID[i]<<3;                      //ID初始化
    04A9 E084      LDI	R24,4
    04AA 9F84      MUL	R24,R20
    04AB 01F0      MOVW	R30,R0
    04AC E080      LDI	R24,0
    04AD E091      LDI	R25,1
    04AE 0FE8      ADD	R30,R24
    04AF 1FF9      ADC	R31,R25
    04B0 8100      LDD	R16,Z+0
    04B1 8111      LDD	R17,Z+1
    04B2 8122      LDD	R18,Z+2
    04B3 8133      LDD	R19,Z+3
    04B4 E083      LDI	R24,3
    04B5 E090      LDI	R25,0
    04B6 938A      ST	R24,-Y
    04B7 940E0C57  CALL	lsl32
    04B9 8308      STD	Y+0,R16
    04BA 8319      STD	Y+1,R17
    04BB 832A      STD	Y+2,R18
    04BC 833B      STD	Y+3,R19
(0052) 	 temp1=(unsigned int)temp;
    04BD 8168      LDD	R22,Y+0
    04BE 8179      LDD	R23,Y+1
(0053) 	 temp2=(unsigned int)(temp/0x00010000);
    04BF 8028      LDD	R2,Y+0
    04C0 8039      LDD	R3,Y+1
    04C1 804A      LDD	R4,Y+2
    04C2 805B      LDD	R5,Y+3
    04C3 0152      MOVW	R10,R4
(0054) 	 CANIDT[i][3]=(Uchar)temp1;
    04C4 E084      LDI	R24,4
    04C5 9F84      MUL	R24,R20
    04C6 01F0      MOVW	R30,R0
    04C7 E78B      LDI	R24,0x7B
    04C8 E091      LDI	R25,1
    04C9 0FE8      ADD	R30,R24
    04CA 1FF9      ADC	R31,R25
    04CB 8360      STD	Z+0,R22
(0055) 	 CANIDT[i][2]=(Uchar)(temp1>>8);
    04CC E084      LDI	R24,4
    04CD 9F84      MUL	R24,R20
    04CE 01F0      MOVW	R30,R0
    04CF E78A      LDI	R24,0x7A
    04D0 E091      LDI	R25,1
    04D1 0FE8      ADD	R30,R24
    04D2 1FF9      ADC	R31,R25
    04D3 011B      MOVW	R2,R22
    04D4 2C23      MOV	R2,R3
    04D5 2433      CLR	R3
    04D6 8220      STD	Z+0,R2
(0056) 	 CANIDT[i][1]=(Uchar)temp2;
    04D7 E084      LDI	R24,4
    04D8 9F84      MUL	R24,R20
    04D9 01F0      MOVW	R30,R0
    04DA E789      LDI	R24,0x79
    04DB E091      LDI	R25,1
    04DC 0FE8      ADD	R30,R24
    04DD 1FF9      ADC	R31,R25
    04DE 82A0      STD	Z+0,R10
(0057) 	 CANIDT[i][0]=(Uchar)(temp2>>8); 
    04DF E084      LDI	R24,4
    04E0 9F84      MUL	R24,R20
    04E1 01F0      MOVW	R30,R0
    04E2 E788      LDI	R24,0x78

⌨️ 快捷键说明

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