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

📄 alarm_pannel.lst

📁 LED显示面板
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    0115 EFCF      LDI	R28,0xFF
    0116 E1D0      LDI	R29,0x10
    0117 BFCD      OUT	0x3D,R28
    0118 BFDE      OUT	0x3E,R29
    0119 54C0      SUBI	R28,0x40
    011A 40D0      SBCI	R29,0
    011B EA0A      LDI	R16,0xAA
    011C 8308      STD	Y+0,R16
    011D 2400      CLR	R0
    011E E1E6      LDI	R30,0x16
    011F E0F2      LDI	R31,2
    0120 E019      LDI	R17,0x9
    0121 34E4      CPI	R30,0x44
    0122 07F1      CPC	R31,R17
    0123 F011      BEQ	0x0126
    0124 9201      ST	R0,Z+
    0125 CFFB      RJMP	0x0121
    0126 8300      STD	Z+0,R16
    0127 E1E4      LDI	R30,0x14
    0128 E0F1      LDI	R31,1
    0129 E0A0      LDI	R26,0
    012A E0B1      LDI	R27,1
    012B E012      LDI	R17,2
    012C 32EA      CPI	R30,0x2A
    012D 07F1      CPC	R31,R17
    012E F021      BEQ	0x0133
    012F 95C8      LPM
    0130 9631      ADIW	R30,1
    0131 920D      ST	R0,X+
    0132 CFF9      RJMP	0x012C
    0133 940E2036  CALL	_main
_exit:
    0135 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[49];
(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 SHD_LED  pannel_led[48];
(0030) extern unsigned char id_table[49];
(0031) 
(0032) void can_init (void)                            //CAN初始化函数
(0033) {
(0034)  canMob_init();
_can_init:
    0136 D001      RCALL	_canMob_init
    0137 9508      RET
_canMob_init:
  temp2                --> R10
  temp1                --> R22
  temp                 --> Y+0
  j                    --> R22
  i                    --> R20
    0138 940E2258  CALL	push_gset3
    013A 9724      SBIW	R28,4
(0035) }
(0036) 
(0037) 
(0038) void canMob_init (void)                       //MOB初始化函数
(0039) {
(0040)     unsigned char i,j;
(0041) 	unsigned long temp;
(0042) 	unsigned int temp1,temp2;
(0043) 	
(0044) 	CLI();                                    //关中断
    013B 94F8      BCLR	7
(0045) 	//DDRD=(1<<PD5)|(0<<PD6);   //TXCAN, RXCNA
(0046) 	DDRD|=0x20;                               //CAN管脚初始化
    013C 9A55      SBI	0x0A,5
(0047) 	DDRD&=0xBF;
    013D B18A      IN	R24,0x0A
    013E 7B8F      ANDI	R24,0xBF
    013F B98A      OUT	0x0A,R24
(0048) 	CANGCON |= (1<<SWRES);              //reset CAN interface
    0140 918000D8  LDS	R24,0xD8
    0142 6081      ORI	R24,1
    0143 938000D8  STS	0xD8,R24
(0049)     
(0050) 	Pass_Flag = 0x00;
    0145 2422      CLR	R2
    0146 922006C9  STS	Pass_Flag,R2
(0051) 	//CANMOBID[2]=(unsigned long)(SELFID<<8)|CANMOBID[2];
(0052) 	for(i=0;i<6;i++)                          //15个邮箱初始化
    0148 2744      CLR	R20
    0149 C048      RJMP	0x0192
(0053) 	{
(0054) 	 temp=CANMOBID[i]<<3;                      //ID初始化
    014A E084      LDI	R24,4
    014B 9F84      MUL	R24,R20
    014C 01F0      MOVW	R30,R0
    014D E080      LDI	R24,0
    014E E091      LDI	R25,1
    014F 0FE8      ADD	R30,R24
    0150 1FF9      ADC	R31,R25
    0151 8100      LDD	R16,Z+0
    0152 8111      LDD	R17,Z+1
    0153 8122      LDD	R18,Z+2
    0154 8133      LDD	R19,Z+3
    0155 E083      LDI	R24,3
    0156 E090      LDI	R25,0
    0157 938A      ST	R24,-Y
    0158 940E22C5  CALL	lsl32
    015A 8308      STD	Y+0,R16
    015B 8319      STD	Y+1,R17
    015C 832A      STD	Y+2,R18
    015D 833B      STD	Y+3,R19
(0055) 	 temp1=(unsigned int)temp;
    015E 8168      LDD	R22,Y+0
    015F 8179      LDD	R23,Y+1
(0056) 	 temp2=(unsigned int)(temp/0x00010000);
    0160 8028      LDD	R2,Y+0
    0161 8039      LDD	R3,Y+1
    0162 804A      LDD	R4,Y+2
    0163 805B      LDD	R5,Y+3
    0164 0152      MOVW	R10,R4
(0057) 	 CANIDT[i][3]=(unsigned char)temp1;
    0165 E084      LDI	R24,4
    0166 9F84      MUL	R24,R20
    0167 01F0      MOVW	R30,R0
    0168 E78B      LDI	R24,0x7B
    0169 E091      LDI	R25,1
    016A 0FE8      ADD	R30,R24
    016B 1FF9      ADC	R31,R25
    016C 8360      STD	Z+0,R22
(0058) 	 CANIDT[i][2]=(unsigned char)(temp1>>8);
    016D E084      LDI	R24,4
    016E 9F84      MUL	R24,R20
    016F 01F0      MOVW	R30,R0
    0170 E78A      LDI	R24,0x7A
    0171 E091      LDI	R25,1
    0172 0FE8      ADD	R30,R24
    0173 1FF9      ADC	R31,R25
    0174 011B      MOVW	R2,R22
    0175 2C23      MOV	R2,R3
    0176 2433      CLR	R3
    0177 8220      STD	Z+0,R2
(0059) 	 CANIDT[i][1]=(unsigned char)temp2;
    0178 E084      LDI	R24,4
    0179 9F84      MUL	R24,R20
    017A 01F0      MOVW	R30,R0
    017B E789      LDI	R24,0x79
    017C E091      LDI	R25,1
    017D 0FE8      ADD	R30,R24
    017E 1FF9      ADC	R31,R25
    017F 82A0      STD	Z+0,R10
(0060) 	 CANIDT[i][0]=(unsigned char)(temp2>>8); 
    0180 E084      LDI	R24,4
    0181 9F84      MUL	R24,R20
    0182 01F0      MOVW	R30,R0
    0183 E788      LDI	R24,0x78
    0184 E091      LDI	R25,1
    0185 0FE8      ADD	R30,R24
    0186 1FF9      ADC	R31,R25
    0187 0115      MOVW	R2,R10
    0188 2C23      MOV	R2,R3
    0189 2433      CLR	R3
    018A 8220      STD	Z+0,R2
(0061) 	 Pass_Flag = Pass_Flag + 1;
    018B 918006C9  LDS	R24,Pass_Flag
    018D 5F8F      SUBI	R24,0xFF
    018E 938006C9  STS	Pass_Flag,R24
(0062) 	 NOP();
    0190 0000      NOP
    0191 9543      INC	R20
    0192 3046      CPI	R20,6
    0193 F408      BCC	0x0195
    0194 CFB5      RJMP	0x014A
(0063) 	}
(0064)     if(Pass_Flag!=0x06)
    0195 918006C9  LDS	R24,Pass_Flag
    0197 3086      CPI	R24,6
    0198 F011      BEQ	0x019B
(0065) 	  RESET;
    0199 940C0000  JMP	0x0
(0066) 	 WDR();
    019B 95A8      WDR
(0067) 	 
(0068) 	 Pass_Flag = 0x00;
    019C 2422      CLR	R2
    019D 922006C9  STS	Pass_Flag,R2
(0069) 	for(i=0;i<6;i++)
    019F 2744      CLR	R20
    01A0 C048      RJMP	0x01E9
(0070) 	{
(0071) 	 temp=CANMOBMD[i]<<3;
    01A1 E084      LDI	R24,4
    01A2 9F84      MUL	R24,R20
    01A3 01F0      MOVW	R30,R0
    01A4 E38C      LDI	R24,0x3C
    01A5 E091      LDI	R25,1
    01A6 0FE8      ADD	R30,R24
    01A7 1FF9      ADC	R31,R25
    01A8 8100      LDD	R16,Z+0
    01A9 8111      LDD	R17,Z+1
    01AA 8122      LDD	R18,Z+2
    01AB 8133      LDD	R19,Z+3
    01AC E083      LDI	R24,3
    01AD E090      LDI	R25,0
    01AE 938A      ST	R24,-Y
    01AF 940E22C5  CALL	lsl32
    01B1 8308      STD	Y+0,R16
    01B2 8319      STD	Y+1,R17
    01B3 832A      STD	Y+2,R18
    01B4 833B      STD	Y+3,R19
(0072) 	 temp1=(unsigned int)temp;               //低16位
    01B5 8168      LDD	R22,Y+0
    01B6 8179      LDD	R23,Y+1
(0073) 	 temp2=(unsigned int)(temp/0x00010000);  //高16位
    01B7 8028      LDD	R2,Y+0
    01B8 8039      LDD	R3,Y+1
    01B9 804A      LDD	R4,Y+2
    01BA 805B      LDD	R5,Y+3
    01BB 0152      MOVW	R10,R4
(0074) 	 CANIDM[i][3]=(unsigned char)temp1;
    01BC E084      LDI	R24,4
    01BD 9F84      MUL	R24,R20
    01BE 01F0      MOVW	R30,R0
    01BF EB87      LDI	R24,0xB7
    01C0 E091      LDI	R25,1
    01C1 0FE8      ADD	R30,R24
    01C2 1FF9      ADC	R31,R25
    01C3 8360      STD	Z+0,R22
(0075) 	 CANIDM[i][2]=(unsigned char)(temp1>>8);
    01C4 E084      LDI	R24,4
    01C5 9F84      MUL	R24,R20
    01C6 01F0      MOVW	R30,R0
    01C7 EB86      LDI	R24,0xB6
    01C8 E091      LDI	R25,1
    01C9 0FE8      ADD	R30,R24
    01CA 1FF9      ADC	R31,R25
    01CB 011B      MOVW	R2,R22
    01CC 2C23      MOV	R2,R3
    01CD 2433      CLR	R3
    01CE 8220      STD	Z+0,R2
(0076) 	 CANIDM[i][1]=(unsigned char)temp2;
    01CF E084      LDI	R24,4
    01D0 9F84      MUL	R24,R20
    01D1 01F0      MOVW	R30,R0
    01D2 EB85      LDI	R24,0xB5
    01D3 E091      LDI	R25,1
    01D4 0FE8      ADD	R30,R24
    01D5 1FF9      ADC	R31,R25
    01D6 82A0      STD	Z+0,R10
(0077) 	 CANIDM[i][0]=(unsigned char)(temp2>>8); 
    01D7 E084      LDI	R24,4
    01D8 9F84      MUL	R24,R20
    01D9 01F0      MOVW	R30,R0
    01DA EB84      LDI	R24,0xB4
    01DB E091      LDI	R25,1
    01DC 0FE8      ADD	R30,R24
    01DD 1FF9      ADC	R31,R25
    01DE 0115      MOVW	R2,R10
    01DF 2C23      MOV	R2,R3
    01E0 2433      CLR	R3
    01E1 8220      STD	Z+0,R2
(0078) 	 Pass_Flag = Pass_Flag + 1;
    01E2 918006C9  LDS	R24,Pass_Flag
    01E4 5F8F      SUBI	R24,0xFF
    01E5 938006C9  STS	Pass_Flag,R24
(0079) 	 NOP();
    01E7 0000      NOP
    01E8 9543      INC	R20
    01E9 3046      CPI	R20,6
    01EA F408      BCC	0x01EC
    01EB CFB5      RJMP	0x01A1
(0080) 	}
(0081) 	 if(Pass_Flag!=0x06)
    01EC 918006C9  LDS	R24,Pass_Flag
    01EE 3086      CPI	R24,6
    01EF F011      BEQ	0x01F2
(0082) 	  RESET;
    01F0 940C0000  JMP	0x0
(0083)     //reset all MObs
(0084) 	
(0085) 	 Pass_Flag = 0x00;
    01F2 2422      CLR	R2
    01F3 922006C9  STS	Pass_Flag,R2
(0086)     for (i=0; i<15; i++)
    01F5 2744      CLR	R20
    01F6 C02A      RJMP	0x0221
(0087)     {
(0088)         CANPAGE = (i<<4);           //select MOb
    01F7 2F84      MOV	R24,R20
    01F8 708F      ANDI	R24,0xF
    01F9 9582      SWAP	R24
    01FA EEED      LDI	R30,0xED
    01FB E0F0      LDI	R31,0
    01FC 8380      STD	Z+0,R24
(0089)         CANCDMOB = 0;           	//disable MOb
    01FD 2422      CLR	R2
    01FE EEEF      LDI	R30,0xEF
    01FF 8220      STD	Z+0,R2
(0090)         CANSTMOB = 0;               //clear status
    0200 EEEE      LDI	R30,0xEE
    0201 8220      STD	Z+0,R2
(0091)         CANIDT1 = 0;        		//clear ID
    0202 EFE3      LDI	R30,0xF3
    0203 8220      STD	Z+0,R2
(0092)         CANIDT2 = 0;
    0204 EFE2      LDI	R30,0xF2
    0205 8220      STD	Z+0,R2
(0093)         CANIDT3 = 0;
    0206 EFE1      LDI	R30,0xF1
    0207 8220      STD	Z+0,R2
(0094)         CANIDT4 = 0;
    0208 EFE0      LDI	R30,0xF0
    0209 8220      STD	Z+0,R2
(0095)         CANIDM1 = 0;            	//clear mask
    020A EFE7      LDI	R30,0xF7
    020B 8220      STD	Z+0,R2
(0096)         CANIDM2 = 0;
    020C EFE6      LDI	R30,0xF6
    020D 8220      STD	Z+0,R2
(0097)         CANIDM3 = 0;
    020E EFE5      LDI	R30,0xF5
    020F 8220      STD	Z+0,R2
(0098)         CANIDM4 = 0;
    0210 EFE4      LDI	R30,0xF4
    0211 8220      STD	Z+0,R2
(0099)         for (j=0; j<8; j++)
    0212 2766      CLR	R22
    0213 C005      RJMP	0x0219
(0100)             CANMSG = 0;         //clear data
    0214 2422      CLR	R2
    0215 EFEA      LDI	R30,0xFA
    0216 E0F0      LDI	R31,0
    0217 8220      STD	Z+0,R2
    0218 9563      INC	R22
    0219 3068      CPI	R22,0x8
    021A F3C8      BCS	0x0214
(0101) 			
(0102) 	     Pass_Flag = Pass_Flag + 1;		
    021B 918006C9  LDS	R24,Pass_Flag
    021D 5F8F      SUBI	R24,0xFF
    021E 938006C9  STS	Pass_Flag,R24
    0220 9543      INC	R20
    0221 304F      CPI	R20,0xF
    0222 F408      BCC	0x0224
    0223 CFD3      RJMP	0x01F7
(0103)     }
(0104) 	  if(Pass_Flag!=0x0f)
    0224 918006C9  LDS	R24,Pass_Flag
    0226 308F      CPI	R24,0xF
    0227 F011      BEQ	0x022A
(0105) 	    RESET;
    0228 940C0000  JMP	0x0
(0106) 		
(0107) 	 WDR();
    022A 95A8      WDR
(0108) 	CANBT1 = CanBaud[2][0];         
    022B EFE4      LDI	R30,0xF4
    022C E0F0      LDI	R31,0
    022D 91E4      LPM	R30,0(Z)
    022E EEA2      LDI	R26,0xE2
    022F E0B0      LDI	R27,0
    0230 93EC      ST	R30,0(X)
(0109)     CANBT2 = CanBaud[2][1];
    0231 EFE5      LDI	R30,0xF5
    0232 E0F0      LDI	R31,0
    0233 91E4      LPM	R30,0(Z)
    0234 EEA3      LDI	R26,0xE3
    0235 93EC      ST	R30,0(X)
(0110)     CANBT3 = CanBaud[2][2];
    0236 EFE6      LDI	R30,0xF6
    0237 E0F0      LDI	R31,0
    0238 91E4      LPM	R30,0(Z)
    0239 EEA4      LDI	R26,0xE4
    023A 93EC      ST	R30,0(X)
(0111) 	
(0112)     //configure MObi
(0113) 	/******************************************************************/
(0114) 	
(0115) 	 Pass_Flag = 0x00;
    023B 2422      CLR	R2

⌨️ 快捷键说明

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