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

📄 210.lst

📁 433M收发,内有PCB(用99打开),源程序ICC打开,用了IC发送和三极管两种,接收用RX3310
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0013 E9CF      LDI	R28,0x9F
    0014 E0D0      LDI	R29,0
    0015 BFCD      OUT	0x3D,R28
    0016 BFDE      OUT	0x3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	Y+0,R16
    001B 2400      CLR	R0
    001C E6E6      LDI	R30,0x66
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 37E7      CPI	R30,0x77
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	Z+0,R16
    0025 E2E0      LDI	R30,0x20
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D104      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: E:\abol\file\EMD\programme\EM-PB-210\210.c
(0001) #include <iot13v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define unit unsigned int
(0005) #define ulong unsigned long
(0006) #define xtal 8
(0007) 
(0008) int mark=1500;	
(0009) 
(0010) unsigned int ai,aa;
(0011) unsigned char crc,i,j,flag=0,flagh=0,flagl,acount=0,bcount=0,PINBS;
(0012) unsigned char DECODER_CODE1,DECODER_CODE0; 
(0013) unsigned char data[3]; 
(0014) unsigned char dataf[3];
(0015) 
(0016) 
(0017) //PB3是控制输出端口!
(0018) #define	RF_ON			PORTB |= (1 << PB2)	//打开输出
(0019) #define	RF_OFF			PORTB &= ~(1 << PB2)	//关闭输出 
(0020) #define	EN_ON			PORTB |= (1 << PB1)	//打开输出
(0021) #define	EN_OFF			PORTB &= ~(1 << PB1)	//关闭输出 
(0022) #define DOOR_IN         PINTB =BIT(0)
(0023) 
(0024) 
(0025) //端口初始化
(0026) void port_init(void)
(0027) {
(0028) 	PORTB = 0x29;	//输入设置有上拉电阻,输出预设低电平
_port_init:
    0033 E289      LDI	R24,0x29
    0034 BB88      OUT	0x18,R24
(0029) 	DDRB  = 0x0e;	//PB4输出,PB3输入
    0035 E08E      LDI	R24,0xE
    0036 BB87      OUT	0x17,R24
    0037 9508      RET
(0030) }
(0031) //转换初始化
(0032) void adc_init(void)
(0033) {
(0034) 	ADCSRA=0x00;	//
_adc_init:
    0038 2422      CLR	R2
    0039 B826      OUT	0x06,R2
(0035) 
(0036) 	ADCMUX = 0x42;	//片内作为模拟参考电压 选择ADC2通道
    003A E482      LDI	R24,0x42
    003B B987      OUT	0x07,R24
(0037) 	ACSR = (1 << ACD);//禁用模拟比较器
    003C E880      LDI	R24,0x80
    003D E090      LDI	R25,0
    003E B999      OUT	0x09,R25
    003F B988      OUT	0x08,R24
(0038) 
(0039) 	//使能ADC,终端允许,自由模式,时钟CLK/8
(0040) 	//0x86允许转换ADEN,ADSC,时钟128分频 75KHz@9.6MHz system clock
(0041) 	ADCSRA = (1 << ADEN) | 0x07;//| ( 1 << ADATE )
    0040 E887      LDI	R24,0x87
    0041 B986      OUT	0x06,R24
    0042 9508      RET
(0042) 	
(0043) }
(0044) /*//看门狗初始化
(0045) void watchdog_init(void)
(0046) {
(0047)  WDR(); //this prevents a timout on enabling
(0048)  WDTCR=(1<<WDCE)|(1<<WDE);
(0049)  WDTCR=(0<<WDE);
(0050) }*/
(0051) /*		EEPROM 写入	*/	
(0052) void EEPROM_write(unsigned char uiaddress,unsigned char ucdata)
(0053) {
(0054)  WDR();
_EEPROM_write:
  ucdata               --> R18
  uiaddress            --> R16
    0043 95A8      WDR
(0055)  while(EECR&(1<<EEWE)); /*等待上一次写操作结束*/
    0044 99E1      SBIC	0x1C,1
    0045 CFFE      RJMP	0x0044
(0056)  EEAR=uiaddress; /*设置地址寄存器*/
    0046 BB0E      OUT	0x1E,R16
(0057)  EEDR=ucdata;
    0047 BB2D      OUT	0x1D,R18
(0058)  EECR|=(1<<EEMWE);
    0048 9AE2      SBI	0x1C,2
(0059)  EECR|=(1<<EEWE); /*置位EEMWE 置位EEWE以启动写操作*/
    0049 9AE1      SBI	0x1C,1
    004A 9508      RET
(0060) }
(0061) 
(0062) /*      EEPROM 读取     */
(0063) unsigned char EEPROM_read(unsigned char uiaddress)
(0064) {
(0065)    while(EECR&(1<<EEWE));  /*等待上一次写操作结束*/
_EEPROM_read:
  uiaddress            --> R16
    004B 99E1      SBIC	0x1C,1
    004C CFFE      RJMP	_EEPROM_read
(0066)    EEAR=uiaddress;    /*设置地址寄存器*/
    004D BB0E      OUT	0x1E,R16
(0067) 	EECR|=(1<<EERE);	/*置位EEMWE 置位EEWE以启动读操作*/ 
    004E 9AE0      SBI	0x1C,0
(0068) 	return EEDR;	/*自数据存贮器返回数据*/
    004F B30D      IN	R16,0x1D
    0050 9508      RET
(0069) } 
(0070) /*		微秒级延时程序	*/	
(0071) void del(int time)
(0072) 	 {     
(0073)   	  do
(0074) 	  	{
(0075) 		 time--;
_del:
  time                 --> R16
    0051 5001      SUBI	R16,1
    0052 4010      SBCI	R17,0
(0076) 		}	
(0077)   	  while (time>1);
    0053 E081      LDI	R24,1
    0054 E090      LDI	R25,0
    0055 1780      CP	R24,R16
    0056 0791      CPC	R25,R17
    0057 F3CC      BLT	0x0051
    0058 9508      RET
(0078) 	 }
(0079) 	 
(0080) /*	   毫秒级延时程序   	*/	 
(0081) void delay_1ms(void)
(0082) { unsigned int i1;
(0083)  for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
_delay_1ms:
  i1                   --> R16
    0059 E001      LDI	R16,1
    005A E010      LDI	R17,0
    005B C002      RJMP	0x005E
    005C 5F0F      SUBI	R16,0xFF
    005D 4F1F      SBCI	R17,0xFF
    005E 3706      CPI	R16,0x76
    005F E0E4      LDI	R30,4
    0060 071E      CPC	R17,R30
    0061 F3D0      BCS	0x005C
    0062 9508      RET
_delay:
  i2                   --> R20
  n                    --> R22
    0063 D12B      RCALL	push_gset2
    0064 2F60      MOV	R22,R16
    0065 2F71      MOV	R23,R17
(0084)     ;
(0085) }
(0086) 
(0087) void delay(unsigned int n)
(0088) {
(0089)  unsigned int i2=0;
    0066 2744      CLR	R20
    0067 2755      CLR	R21
    0068 C004      RJMP	0x006D
(0090)    while(i2<n)
(0091)    {delay_1ms();
    0069 DFEF      RCALL	_delay_1ms
(0092)     i2++; WDR();
    006A 5F4F      SUBI	R20,0xFF
    006B 4F5F      SBCI	R21,0xFF
    006C 95A8      WDR
    006D 1746      CP	R20,R22
    006E 0757      CPC	R21,R23
    006F F3C8      BCS	0x0069
    0070 D114      RCALL	pop_gset2
    0071 9508      RET
_GetADC:
  adc_value            --> R20
    0072 D11E      RCALL	push_gset1
(0093)    }
(0094) }
(0095) //从AD口读入一个值
(0096) unsigned int GetADC(void)
(0097) {
(0098) 
(0099) unsigned int	adc_value;
(0100) 	DDRB|=(1<<PB3);
    0073 9ABB      SBI	0x17,3
(0101) 	PORTB&=~(1<<PB3);
    0074 98C3      CBI	0x18,3
(0102) 	ADC = 0;
    0075 2422      CLR	R2
    0076 2433      CLR	R3
    0077 B835      OUT	0x05,R3
    0078 B824      OUT	0x04,R2
(0103) 	ADCSRA  |=  (1 << ADSC);	//启动AD转换
    0079 9A36      SBI	0x06,6
(0104) 
(0105) 	del(10);
    007A E00A      LDI	R16,0xA
    007B E010      LDI	R17,0
    007C DFD4      RCALL	_del
(0106) 	while(!(ADCSRA&(BIT(ADIF))));////ADIF=4, 表示若ADCSR的第5位置为1,则中断AD转换
    007D 9B34      SBIS	0x06,4
    007E CFFE      RJMP	0x007D
(0107) 	//loop_until_bit_is_set(ADCSRA, ADIF);//等待AD转换结束
(0108) 
(0109) 	ADCSRA |= (1 << ADIF);		//写1清除标志位
    007F 9A34      SBI	0x06,4
(0110) 
(0111) 	adc_value = ADC;		//读转换结果
    0080 B144      IN	R20,0x04
    0081 B155      IN	R21,0x05
(0112) 	DDRB&=~(1<<PB3);
    0082 98BB      CBI	0x17,3
(0113) 	PORTB|=(1<<PB3);
    0083 9AC3      SBI	0x18,3
(0114) 	
(0115) 	return adc_value;
    0084 2F04      MOV	R16,R20
    0085 2F15      MOV	R17,R21
    0086 D10D      RCALL	pop_gset1
    0087 9508      RET
_CRC3:
  i                    --> Y+1
  j                    --> R22
  len                  --> R10
  data                 --> R20
    0088 D104      RCALL	push_gset3
    0089 2EA2      MOV	R10,R18
    008A 2F40      MOV	R20,R16
    008B 2F51      MOV	R21,R17
(0116) }
(0117) /****************************************** 
(0118) CRC3校验函数  
(0119) 输  入:        ptr需要进行校验的数据包  
(0120)         len需要校验的数据包字节数  
(0121) 输  出:        校验码; 
(0122) 调  用:        无; 
(0123) 被调用:        从机协议打包函数; 
(0124) 功  能:        将一给定的数据包进行CRC3校验给调用者返回校验码  
(0125) ******************************************/ 
(0126) unsigned char CRC3(unsigned char *data, unsigned char len) 
(0127) { 
(0128)     unsigned char i; 
(0129)     unsigned char j; 
(0130)     j = 0;
    008C 2766      CLR	R22
(0131) 	crc=0; 
    008D 2422      CLR	R2
    008E 92200072  STS	crc,R2
    0090 C034      RJMP	0x00C5
(0132) 
(0133)     while(len) 
(0134)     { 
(0135)         /*多项式除法*/ 
(0136)         if(*data & (0x80>>j))  //如果该位为1 
    0091 2F26      MOV	R18,R22
    0092 2733      CLR	R19
    0093 E800      LDI	R16,0x80
    0094 E010      LDI	R17,0
    0095 D0E8      RCALL	asr16
    0096 2FE4      MOV	R30,R20
    0097 2FF5      MOV	R31,R21
    0098 8020      LDD	R2,Z+0
    0099 2433      CLR	R3
    009A 2220      AND	R2,R16
    009B 2231      AND	R3,R17
    009C 2022      TST	R2
    009D F411      BNE	0x00A0
    009E 2033      TST	R3
    009F F029      BEQ	0x00A5
(0137)             crc |= 0x01;  //则在余数尾部添1否则添0 
    00A0 91800072  LDS	R24,crc
    00A2 6081      ORI	R24,1
    00A3 93800072  STS	crc,R24
(0138)         if(crc >= 0x8) 
    00A5 91800072  LDS	R24,crc
    00A7 3088      CPI	R24,0x8
    00A8 F030      BCS	0x00AF
(0139)             crc ^= 11; 
    00A9 E08B      LDI	R24,0xB
    00AA 90200072  LDS	R2,crc
    00AC 2628      EOR	R2,R24
    00AD 92200072  STS	crc,R2
(0140)         crc <<= 1; 
    00AF 90200072  LDS	R2,crc
    00B1 0C22      LSL	R2
    00B2 92200072  STS	crc,R2
(0141)         j++;
    00B4 9563      INC	R22
(0142) 		if(len==1)
    00B5 2D8A      MOV	R24,R10
    00B6 3081      CPI	R24,1
    00B7 F439      BNE	0x00BF
(0143) 		{
(0144) 		  if(j == 7) 
    00B8 3067      CPI	R22,7
    00B9 F459      BNE	0x00C5
(0145)          { 
(0146)             j = 0; 
    00BA 2766      CLR	R22
(0147)             data++; 
    00BB 5F4F      SUBI	R20,0xFF
    00BC 4F5F      SBCI	R21,0xFF
(0148)             len--; 
    00BD 94AA      DEC	R10
(0149)          }
(0150) 		}
    00BE C006      RJMP	0x00C5
(0151) 		else
(0152) 		{ 
(0153)          if(j == 8) 
    00BF 3068      CPI	R22,0x8
    00C0 F421      BNE	0x00C5
(0154)          { 

⌨️ 快捷键说明

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