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

📄 pannel_can.lst

📁 LED显示面板
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    0102 EFCF      LDI	R28,0xFF
    0103 E1D0      LDI	R29,0x10
    0104 BFCD      OUT	0x3D,R28
    0105 BFDE      OUT	0x3E,R29
    0106 52C0      SUBI	R28,0x20
    0107 40D0      SBCI	R29,0
    0108 EA0A      LDI	R16,0xAA
    0109 8308      STD	Y+0,R16
    010A 2400      CLR	R0
    010B E1E6      LDI	R30,0x16
    010C E0F2      LDI	R31,2
    010D E018      LDI	R17,0x8
    010E 37E5      CPI	R30,0x75
    010F 07F1      CPC	R31,R17
    0110 F011      BEQ	0x0113
    0111 9201      ST	R0,Z+
    0112 CFFB      RJMP	0x010E
    0113 8300      STD	Z+0,R16
    0114 EEEE      LDI	R30,0xEE
    0115 E0F0      LDI	R31,0
    0116 E0A0      LDI	R26,0
    0117 E0B1      LDI	R27,1
    0118 E012      LDI	R17,2
    0119 30E4      CPI	R30,4
    011A 07F1      CPC	R31,R17
    011B F021      BEQ	0x0120
    011C 95C8      LPM
    011D 9631      ADIW	R30,1
    011E 920D      ST	R0,X+
    011F CFF9      RJMP	0x0119
    0120 940E092F  CALL	_main
_exit:
    0122 CFFF      RJMP	_exit
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[20];
(0018) extern unsigned char soundoff_flag,ack_flag,alarm_flag;
(0019) 
(0020) const unsigned char CanBaud[6][3]={{0x02,0x04,0x13},{0x06,0x04,0x13},{0x0E,0x04,0x13},{0x12,0x04,0x13},{0x1E,0x04,0x13},{0x26,0x04,0x13}};
(0021) //波特率数组
(0022) 
(0023) //15个MOB的ID和MID
(0024) unsigned long CANMOBID[15]={0x10000000,0x20000000,0x30000000,0x40000000,0x50000000,0x60000000,0x01000000,0x01000001,0x0200ff00,0x12000001,0x01000002,0x01000003,0x01000004,0x01000005,0x1300ff01};
(0025) unsigned long CANMOBMD[15]={0x00ff000f,0x00ff000f,0x00ff000f,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff};
(0026) unsigned char CANIDT[15][4]={0};
(0027) unsigned char CANIDM[15][4]={0};
(0028) unsigned char counterTemp;
(0029) extern unsigned char send_count;
(0030) extern SHD_LED  pannel_led[48];
(0031) extern unsigned char soundoff[48];
(0032) 
(0033) void can_init (void)                            //CAN初始化函数
(0034) {
(0035)  canMob_init();
_can_init:
    0123 D001      RCALL	_canMob_init
    0124 9508      RET
_canMob_init:
  temp2                --> R10
  temp1                --> R22
  temp                 --> Y+0
  j                    --> R22
  i                    --> R20
    0125 940E44C3  CALL	push_gset3
    0127 9724      SBIW	R28,4
(0036) }
(0037) 
(0038) 
(0039) void canMob_init (void)                       //MOB初始化函数
(0040) {
(0041)     unsigned char i,j;
(0042) 	unsigned long temp;
(0043) 	unsigned int temp1,temp2;
(0044) 	
(0045) 	CLI();                                    //关中断
    0128 94F8      BCLR	7
(0046) 	//DDRD=(1<<PD5)|(0<<PD6);   //TXCAN, RXCNA
(0047) 	DDRD|=0x20;                               //CAN管脚初始化
    0129 9A55      SBI	0x0A,5
(0048) 	DDRD&=0xBF;
    012A B18A      IN	R24,0x0A
    012B 7B8F      ANDI	R24,0xBF
    012C B98A      OUT	0x0A,R24
(0049) 	CANGCON |= (1<<SWRES);              //reset CAN interface
    012D 918000D8  LDS	R24,0xD8
    012F 6081      ORI	R24,1
    0130 938000D8  STS	0xD8,R24
(0050)     
(0051) 	Pass_Flag = 0x00;
    0132 2422      CLR	R2
    0133 9220037C  STS	Pass_Flag,R2
(0052) 	//CANMOBID[2]=(unsigned long)(SELFID<<8)|CANMOBID[2];
(0053) 	for(i=0;i<6;i++)                          //15个邮箱初始化
    0135 2744      CLR	R20
    0136 C048      RJMP	0x017F
(0054) 	{
(0055) 	 temp=CANMOBID[i]<<3;                      //ID初始化
    0137 E084      LDI	R24,4
    0138 9F84      MUL	R24,R20
    0139 01F0      MOVW	R30,R0
    013A E080      LDI	R24,0
    013B E091      LDI	R25,1
    013C 0FE8      ADD	R30,R24
    013D 1FF9      ADC	R31,R25
    013E 8100      LDD	R16,Z+0
    013F 8111      LDD	R17,Z+1
    0140 8122      LDD	R18,Z+2
    0141 8133      LDD	R19,Z+3
    0142 E083      LDI	R24,3
    0143 E090      LDI	R25,0
    0144 938A      ST	R24,-Y
    0145 940E4530  CALL	lsl32
    0147 8308      STD	Y+0,R16
    0148 8319      STD	Y+1,R17
    0149 832A      STD	Y+2,R18
    014A 833B      STD	Y+3,R19
(0056) 	 temp1=(unsigned int)temp;
    014B 8168      LDD	R22,Y+0
    014C 8179      LDD	R23,Y+1
(0057) 	 temp2=(unsigned int)(temp/0x00010000);
    014D 8028      LDD	R2,Y+0
    014E 8039      LDD	R3,Y+1
    014F 804A      LDD	R4,Y+2
    0150 805B      LDD	R5,Y+3
    0151 0152      MOVW	R10,R4
(0058) 	 CANIDT[i][3]=(unsigned char)temp1;
    0152 E084      LDI	R24,4
    0153 9F84      MUL	R24,R20
    0154 01F0      MOVW	R30,R0
    0155 E78B      LDI	R24,0x7B
    0156 E091      LDI	R25,1
    0157 0FE8      ADD	R30,R24
    0158 1FF9      ADC	R31,R25
    0159 8360      STD	Z+0,R22
(0059) 	 CANIDT[i][2]=(unsigned char)(temp1>>8);
    015A E084      LDI	R24,4
    015B 9F84      MUL	R24,R20
    015C 01F0      MOVW	R30,R0
    015D E78A      LDI	R24,0x7A
    015E E091      LDI	R25,1
    015F 0FE8      ADD	R30,R24
    0160 1FF9      ADC	R31,R25
    0161 011B      MOVW	R2,R22
    0162 2C23      MOV	R2,R3
    0163 2433      CLR	R3
    0164 8220      STD	Z+0,R2
(0060) 	 CANIDT[i][1]=(unsigned char)temp2;
    0165 E084      LDI	R24,4
    0166 9F84      MUL	R24,R20
    0167 01F0      MOVW	R30,R0
    0168 E789      LDI	R24,0x79
    0169 E091      LDI	R25,1
    016A 0FE8      ADD	R30,R24
    016B 1FF9      ADC	R31,R25
    016C 82A0      STD	Z+0,R10
(0061) 	 CANIDT[i][0]=(unsigned char)(temp2>>8); 
    016D E084      LDI	R24,4
    016E 9F84      MUL	R24,R20
    016F 01F0      MOVW	R30,R0
    0170 E788      LDI	R24,0x78
    0171 E091      LDI	R25,1
    0172 0FE8      ADD	R30,R24
    0173 1FF9      ADC	R31,R25
    0174 0115      MOVW	R2,R10
    0175 2C23      MOV	R2,R3
    0176 2433      CLR	R3
    0177 8220      STD	Z+0,R2
(0062) 	 Pass_Flag = Pass_Flag + 1;
    0178 9180037C  LDS	R24,Pass_Flag
    017A 5F8F      SUBI	R24,0xFF
    017B 9380037C  STS	Pass_Flag,R24
(0063) 	 NOP();
    017D 0000      NOP
    017E 9543      INC	R20
    017F 3046      CPI	R20,6
    0180 F408      BCC	0x0182
    0181 CFB5      RJMP	0x0137
(0064) 	}
(0065)     if(Pass_Flag!=0x06)
    0182 9180037C  LDS	R24,Pass_Flag
    0184 3086      CPI	R24,6
    0185 F011      BEQ	0x0188
(0066) 	  RESET;
    0186 940C0000  JMP	0x0
(0067) 	 WDR();
    0188 95A8      WDR
(0068) 	 
(0069) 	 Pass_Flag = 0x00;
    0189 2422      CLR	R2
    018A 9220037C  STS	Pass_Flag,R2
(0070) 	for(i=0;i<6;i++)
    018C 2744      CLR	R20
    018D C048      RJMP	0x01D6
(0071) 	{
(0072) 	 temp=CANMOBMD[i]<<3;
    018E E084      LDI	R24,4
    018F 9F84      MUL	R24,R20
    0190 01F0      MOVW	R30,R0
    0191 E38C      LDI	R24,0x3C
    0192 E091      LDI	R25,1
    0193 0FE8      ADD	R30,R24
    0194 1FF9      ADC	R31,R25
    0195 8100      LDD	R16,Z+0
    0196 8111      LDD	R17,Z+1
    0197 8122      LDD	R18,Z+2
    0198 8133      LDD	R19,Z+3
    0199 E083      LDI	R24,3
    019A E090      LDI	R25,0
    019B 938A      ST	R24,-Y
    019C 940E4530  CALL	lsl32
    019E 8308      STD	Y+0,R16
    019F 8319      STD	Y+1,R17
    01A0 832A      STD	Y+2,R18
    01A1 833B      STD	Y+3,R19
(0073) 	 temp1=(unsigned int)temp;               //低16位
    01A2 8168      LDD	R22,Y+0
    01A3 8179      LDD	R23,Y+1
(0074) 	 temp2=(unsigned int)(temp/0x00010000);  //高16位
    01A4 8028      LDD	R2,Y+0
    01A5 8039      LDD	R3,Y+1
    01A6 804A      LDD	R4,Y+2
    01A7 805B      LDD	R5,Y+3
    01A8 0152      MOVW	R10,R4
(0075) 	 CANIDM[i][3]=(unsigned char)temp1;
    01A9 E084      LDI	R24,4
    01AA 9F84      MUL	R24,R20
    01AB 01F0      MOVW	R30,R0
    01AC EB87      LDI	R24,0xB7
    01AD E091      LDI	R25,1
    01AE 0FE8      ADD	R30,R24
    01AF 1FF9      ADC	R31,R25
    01B0 8360      STD	Z+0,R22
(0076) 	 CANIDM[i][2]=(unsigned char)(temp1>>8);
    01B1 E084      LDI	R24,4
    01B2 9F84      MUL	R24,R20
    01B3 01F0      MOVW	R30,R0
    01B4 EB86      LDI	R24,0xB6
    01B5 E091      LDI	R25,1
    01B6 0FE8      ADD	R30,R24
    01B7 1FF9      ADC	R31,R25
    01B8 011B      MOVW	R2,R22
    01B9 2C23      MOV	R2,R3
    01BA 2433      CLR	R3
    01BB 8220      STD	Z+0,R2
(0077) 	 CANIDM[i][1]=(unsigned char)temp2;
    01BC E084      LDI	R24,4
    01BD 9F84      MUL	R24,R20
    01BE 01F0      MOVW	R30,R0
    01BF EB85      LDI	R24,0xB5
    01C0 E091      LDI	R25,1
    01C1 0FE8      ADD	R30,R24
    01C2 1FF9      ADC	R31,R25
    01C3 82A0      STD	Z+0,R10
(0078) 	 CANIDM[i][0]=(unsigned char)(temp2>>8); 
    01C4 E084      LDI	R24,4
    01C5 9F84      MUL	R24,R20
    01C6 01F0      MOVW	R30,R0
    01C7 EB84      LDI	R24,0xB4
    01C8 E091      LDI	R25,1
    01C9 0FE8      ADD	R30,R24
    01CA 1FF9      ADC	R31,R25
    01CB 0115      MOVW	R2,R10
    01CC 2C23      MOV	R2,R3
    01CD 2433      CLR	R3
    01CE 8220      STD	Z+0,R2
(0079) 	 Pass_Flag = Pass_Flag + 1;
    01CF 9180037C  LDS	R24,Pass_Flag
    01D1 5F8F      SUBI	R24,0xFF
    01D2 9380037C  STS	Pass_Flag,R24
(0080) 	 NOP();
    01D4 0000      NOP
    01D5 9543      INC	R20
    01D6 3046      CPI	R20,6
    01D7 F408      BCC	0x01D9
    01D8 CFB5      RJMP	0x018E
(0081) 	}
(0082) 	 if(Pass_Flag!=0x06)
    01D9 9180037C  LDS	R24,Pass_Flag
    01DB 3086      CPI	R24,6
    01DC F011      BEQ	0x01DF
(0083) 	  RESET;
    01DD 940C0000  JMP	0x0
(0084)     //reset all MObs
(0085) 	
(0086) 	 Pass_Flag = 0x00;
    01DF 2422      CLR	R2
    01E0 9220037C  STS	Pass_Flag,R2
(0087)     for (i=0; i<15; i++)
    01E2 2744      CLR	R20
    01E3 C02A      RJMP	0x020E
(0088)     {
(0089)         CANPAGE = (i<<4);           //select MOb
    01E4 2F84      MOV	R24,R20
    01E5 708F      ANDI	R24,0xF
    01E6 9582      SWAP	R24
    01E7 EEED      LDI	R30,0xED
    01E8 E0F0      LDI	R31,0
    01E9 8380      STD	Z+0,R24
(0090)         CANCDMOB = 0;           	//disable MOb
    01EA 2422      CLR	R2
    01EB EEEF      LDI	R30,0xEF
    01EC 8220      STD	Z+0,R2
(0091)         CANSTMOB = 0;               //clear status
    01ED EEEE      LDI	R30,0xEE
    01EE 8220      STD	Z+0,R2
(0092)         CANIDT1 = 0;        		//clear ID
    01EF EFE3      LDI	R30,0xF3
    01F0 8220      STD	Z+0,R2
(0093)         CANIDT2 = 0;
    01F1 EFE2      LDI	R30,0xF2
    01F2 8220      STD	Z+0,R2
(0094)         CANIDT3 = 0;
    01F3 EFE1      LDI	R30,0xF1
    01F4 8220      STD	Z+0,R2
(0095)         CANIDT4 = 0;
    01F5 EFE0      LDI	R30,0xF0
    01F6 8220      STD	Z+0,R2
(0096)         CANIDM1 = 0;            	//clear mask
    01F7 EFE7      LDI	R30,0xF7
    01F8 8220      STD	Z+0,R2
(0097)         CANIDM2 = 0;
    01F9 EFE6      LDI	R30,0xF6
    01FA 8220      STD	Z+0,R2
(0098)         CANIDM3 = 0;
    01FB EFE5      LDI	R30,0xF5
    01FC 8220      STD	Z+0,R2
(0099)         CANIDM4 = 0;
    01FD EFE4      LDI	R30,0xF4
    01FE 8220      STD	Z+0,R2
(0100)         for (j=0; j<8; j++)
    01FF 2766      CLR	R22
    0200 C005      RJMP	0x0206
(0101)             CANMSG = 0;         //clear data
    0201 2422      CLR	R2
    0202 EFEA      LDI	R30,0xFA
    0203 E0F0      LDI	R31,0
    0204 8220      STD	Z+0,R2
    0205 9563      INC	R22
    0206 3068      CPI	R22,0x8
    0207 F3C8      BCS	0x0201
(0102) 			
(0103) 	     Pass_Flag = Pass_Flag + 1;		
    0208 9180037C  LDS	R24,Pass_Flag
    020A 5F8F      SUBI	R24,0xFF
    020B 9380037C  STS	Pass_Flag,R24
    020D 9543      INC	R20
    020E 304F      CPI	R20,0xF
    020F F408      BCC	0x0211
    0210 CFD3      RJMP	0x01E4
(0104)     }
(0105) 	  if(Pass_Flag!=0x0f)
    0211 9180037C  LDS	R24,Pass_Flag
    0213 308F      CPI	R24,0xF
    0214 F011      BEQ	0x0217
(0106) 	    RESET;
    0215 940C0000  JMP	0x0
(0107) 		
(0108) 	 WDR();
    0217 95A8      WDR
(0109) 	CANBT1 = CanBaud[2][0];         
    0218 E9E2      LDI	R30,0x92
    0219 E0F0      LDI	R31,0
    021A 91E4      LPM	R30,0(Z)
    021B EEA2      LDI	R26,0xE2
    021C E0B0      LDI	R27,0
    021D 93EC      ST	R30,0(X)
(0110)     CANBT2 = CanBaud[2][1];
    021E E9E3      LDI	R30,0x93
    021F E0F0      LDI	R31,0
    0220 91E4      LPM	R30,0(Z)
    0221 EEA3      LDI	R26,0xE3
    0222 93EC      ST	R30,0(X)
(0111)     CANBT3 = CanBaud[2][2];
    0223 E9E4      LDI	R30,0x94
    0224 E0F0      LDI	R31,0
    0225 91E4      LPM	R30,0(Z)
    0226 EEA4      LDI	R26,0xE4
    0227 93EC      ST	R30,0(X)
(0112) 	
(0113)     //configure MObi
(0114) 	/******************************************************************/
(0115) 	
(0116) 	 Pass_Flag = 0x00;
    0228 2422      CLR	R2
    0229 9220037C  STS	Pass_Flag,R2
(0117)    for (i=0; i<3; i++)

⌨️ 快捷键说明

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