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

📄 door1.lst

📁 433M收发,内有PCB(用99打开),源程序ICC打开,用了IC发送和三极管两种,接收用RX3310
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    0014 E9CF      LDI	R28,0x9F
    0015 E0D0      LDI	R29,0
    0016 BFCD      OUT	0x3D,R28
    0017 BFDE      OUT	0x3E,R29
    0018 51C0      SUBI	R28,0x10
    0019 40D0      SBCI	R29,0
    001A EA0A      LDI	R16,0xAA
    001B 8308      STD	Y+0,R16
    001C 2400      CLR	R0
    001D E6E7      LDI	R30,0x67
    001E E0F0      LDI	R31,0
    001F E010      LDI	R17,0
    0020 37E7      CPI	R30,0x77
    0021 07F1      CPC	R31,R17
    0022 F011      BEQ	0x0025
    0023 9201      ST	R0,Z+
    0024 CFFB      RJMP	0x0020
    0025 8300      STD	Z+0,R16
    0026 E2E0      LDI	R30,0x20
    0027 E0F0      LDI	R31,0
    0028 E6A0      LDI	R26,0x60
    0029 E0B0      LDI	R27,0
    002A E010      LDI	R17,0
    002B 32E7      CPI	R30,0x27
    002C 07F1      CPC	R31,R17
    002D F021      BEQ	0x0032
    002E 95C8      LPM
    002F 9631      ADIW	R30,1
    0030 920D      ST	R0,X+
    0031 CFF9      RJMP	0x002B
    0032 D0F0      RCALL	_main
_exit:
    0033 CFFF      RJMP	_exit
FILE: E:\abol\file\EMD\programme\EM-PB-2129\delay.c
(0001) 
(0002) /* 文件名称:main.c  主函数								*/
(0003) /* 编译:ICC-AVR application builder					*/
(0004) 
(0005) 
(0006) 
(0007) #include <iot13v.h>
(0008) #include <macros.h>
(0009) #include "delay.h"
(0010) #define xtal 9.8 
(0011) 
(0012) /*		微秒级延时程序	*/	
(0013) void del(int time)
(0014) 	 {     
(0015)   	  do
(0016) 	  	{
(0017) 		 time--;
_del:
  time                 --> R16
    0034 5001      SUBI	R16,1
    0035 4010      SBCI	R17,0
(0018) 		}	
(0019)   	  while (time>1);
    0036 E081      LDI	R24,1
    0037 E090      LDI	R25,0
    0038 1780      CP	R24,R16
    0039 0791      CPC	R25,R17
    003A F3CC      BLT	0x0034
    003B 9508      RET
(0020) 	 }
(0021) 	 
(0022) /*	   毫秒级延时程序   	*/	 
(0023) void delay_1ms(void)
(0024) { unsigned int i1;
(0025)  for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
_delay_1ms:
  i1                   --> R16
    003C E001      LDI	R16,1
    003D E010      LDI	R17,0
    003E C002      RJMP	0x0041
    003F 5F0F      SUBI	R16,0xFF
    0040 4F1F      SBCI	R17,0xFF
    0041 3707      CPI	R16,0x77
    0042 E0E5      LDI	R30,5
    0043 071E      CPC	R17,R30
    0044 F3D0      BCS	0x003F
    0045 9508      RET
_delay:
  i2                   --> R20
  n                    --> R22
    0046 D12C      RCALL	push_gset2
    0047 2F60      MOV	R22,R16
    0048 2F71      MOV	R23,R17
(0026)     ;
(0027) }
(0028) 
(0029) void delay(unsigned int n)
(0030) {
(0031)  unsigned int i2=0;
    0049 2744      CLR	R20
    004A 2755      CLR	R21
    004B C004      RJMP	0x0050
(0032)    while(i2<n)
(0033)    {delay_1ms();
    004C DFEF      RCALL	_delay_1ms
(0034)     i2++; WDR();
    004D 5F4F      SUBI	R20,0xFF
    004E 4F5F      SBCI	R21,0xFF
    004F 95A8      WDR
    0050 1746      CP	R20,R22
    0051 0757      CPC	R21,R23
    0052 F3C8      BCS	0x004C
    0053 D115      RCALL	pop_gset2
    0054 9508      RET
FILE: E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
(0001) #include <iot13v.h>
(0002) #include <macros.h>
(0003) #include "delay.h"
(0004) #include "eeprom.h"
(0005) #define uchar unsigned char
(0006) #define unit unsigned int
(0007) #define ulong unsigned long
(0008) #define xtal 9.8
(0009) 
(0010) int mark=1500;	
(0011) 
(0012) unsigned int ai,aa;
(0013) unsigned char crc,i,j,flag=0,flagh=0,flagl,acount=0,bcount=0,powbit=0;
(0014) unsigned char DECODER_CODE1,DECODER_CODE0; 
(0015) unsigned char data[3];	
(0016) unsigned char dataf[3];
(0017) 
(0018) 
(0019) //PB3是控制输出端口!
(0020) #define	POWER_ON		PORTB |= (1 << PB2)	//打开输出
(0021) #define	POWER_OFF		PORTB &= ~(1 << PB2)	//关闭输出	
(0022) #define	LED_ON			PORTB |= (1 << PB0)	//打开输出
(0023) #define	LED_OFF			PORTB &= ~(1 << PB0)	//关闭输出
(0024) #define	RF_ON			PORTB |= (1 << PB1)	//打开输出
(0025) #define	RF_OFF			PORTB &= ~(1 << PB1)	//关闭输出
(0026) 
(0027) //端口初始化
(0028) void port_init(void)
(0029) {
(0030) 	PORTB = 0x38;	//输入设置有上拉电阻,输出预设低电平
_port_init:
    0055 E388      LDI	R24,0x38
    0056 BB88      OUT	0x18,R24
(0031) 	DDRB  = 0x07;	//PB4输入,PB3输出
    0057 E087      LDI	R24,7
    0058 BB87      OUT	0x17,R24
    0059 9508      RET
(0032) } 
(0033) //转换初始化
(0034) void adc_init(void)
(0035) {
(0036) 	ADCSRA=0x00;	//vcc作为模拟参考电压
_adc_init:
    005A 2422      CLR	R2
    005B B826      OUT	0x06,R2
(0037) 
(0038) 	ADCMUX = 0x03;	//选择ADC2通道
    005C E083      LDI	R24,3
    005D B987      OUT	0x07,R24
(0039) 	ACSR = (1 << ACD);//禁用模拟比较器
    005E E880      LDI	R24,0x80
    005F E090      LDI	R25,0
    0060 B999      OUT	0x09,R25
    0061 B988      OUT	0x08,R24
(0040) 
(0041) 	//使能ADC,终端允许,自由模式,时钟CLK/8
(0042) 	//0x86允许转换ADEN,ADSC,时钟128分频 75KHz@9.6MHz system clock
(0043) 	ADCSRA = (1 << ADEN) | 0x07;//| ( 1 << ADATE )
    0062 E887      LDI	R24,0x87
    0063 B986      OUT	0x06,R24
    0064 9508      RET
(0044) 	
(0045) }
(0046) //看门狗初始化
(0047) void watchdog_init(void)
(0048) {
(0049)  WDR(); //this prevents a timout on enabling
_watchdog_init:
    0065 95A8      WDR
(0050)  WDTCR=(1<<WDCE)|(1<<WDE);
    0066 E188      LDI	R24,0x18
    0067 BD81      OUT	0x21,R24
(0051)  WDTCR=(0<<WDE);
    0068 2422      CLR	R2
    0069 BC21      OUT	0x21,R2
    006A 9508      RET
_GetADC:
  adc_value            --> R20
    006B D109      RCALL	push_gset1
(0052) }
(0053) 
(0054) //从AD口读入一个值
(0055) unsigned int GetADC(void)
(0056) {
(0057) 
(0058) unsigned int	adc_value;
(0059) 
(0060) 	ADC = 0;
    006C 2422      CLR	R2
    006D 2433      CLR	R3
    006E B835      OUT	0x05,R3
    006F B824      OUT	0x04,R2
(0061) 	ADCSRA  |=  (1 << ADSC);	//启动AD转换
    0070 9A36      SBI	0x06,6
(0062) 
(0063) 	del(10);
    0071 E00A      LDI	R16,0xA
    0072 E010      LDI	R17,0
    0073 DFC0      RCALL	_del
(0064) 	while(!(ADCSRA&(BIT(ADIF))));////ADIF=4, 表示若ADCSR的第5位置为1,则中断AD转换
    0074 9B34      SBIS	0x06,4
    0075 CFFE      RJMP	0x0074
(0065) 	//loop_until_bit_is_set(ADCSRA, ADIF);//等待AD转换结束
(0066) 
(0067) 	ADCSRA |= (1 << ADIF);		//写1清除标志位
    0076 9A34      SBI	0x06,4
(0068) 
(0069) 	adc_value = ADC;		//读转换结果
    0077 B144      IN	R20,0x04
    0078 B155      IN	R21,0x05
(0070) 
(0071) 	return adc_value;
    0079 2F04      MOV	R16,R20
    007A 2F15      MOV	R17,R21
    007B D0FC      RCALL	pop_gset1
    007C 9508      RET
_CRC3:
  i                    --> Y+1
  j                    --> R22
  len                  --> R10
  data                 --> R20
    007D D0F3      RCALL	push_gset3
    007E 2EA2      MOV	R10,R18
    007F 2F40      MOV	R20,R16
    0080 2F51      MOV	R21,R17
(0072) }
(0073) 
(0074) 
(0075) /****************************************** 
(0076) CRC3校验函数  
(0077) 输  入:        ptr需要进行校验的数据包  
(0078)         len需要校验的数据包字节数  
(0079) 输  出:        校验码; 
(0080) 调  用:        无; 
(0081) 被调用:        从机协议打包函数; 
(0082) 功  能:        将一给定的数据包进行CRC3校验给调用者返回校验码  
(0083) ******************************************/ 
(0084) unsigned char CRC3(unsigned char *data, unsigned char len) 
(0085) { 
(0086)     unsigned char i; 
(0087)     unsigned char j; 
(0088)     j = 0; 
    0081 2766      CLR	R22
(0089) 	crc=0;
    0082 2422      CLR	R2
    0083 92200076  STS	crc,R2
    0085 C034      RJMP	0x00BA
(0090) 
(0091)     while(len) 
(0092)     { 
(0093)         /*多项式除法*/ 
(0094)         if(*data & (0x80>>j))  //如果该位为1 
    0086 2F26      MOV	R18,R22
    0087 2733      CLR	R19
    0088 E800      LDI	R16,0x80
    0089 E010      LDI	R17,0
    008A D0D7      RCALL	asr16
    008B 2FE4      MOV	R30,R20
    008C 2FF5      MOV	R31,R21
    008D 8020      LDD	R2,Z+0
    008E 2433      CLR	R3
    008F 2220      AND	R2,R16
    0090 2231      AND	R3,R17
    0091 2022      TST	R2
    0092 F411      BNE	0x0095
    0093 2033      TST	R3
    0094 F029      BEQ	0x009A
(0095)             crc |= 0x01;  //则在余数尾部添1否则添0 
    0095 91800076  LDS	R24,crc
    0097 6081      ORI	R24,1
    0098 93800076  STS	crc,R24
(0096)         if(crc >= 0x8) 
    009A 91800076  LDS	R24,crc
    009C 3088      CPI	R24,0x8
    009D F030      BCS	0x00A4
(0097)             crc ^= 11; 
    009E E08B      LDI	R24,0xB
    009F 90200076  LDS	R2,crc
    00A1 2628      EOR	R2,R24
    00A2 92200076  STS	crc,R2
(0098)         crc <<= 1; 
    00A4 90200076  LDS	R2,crc
    00A6 0C22      LSL	R2
    00A7 92200076  STS	crc,R2
(0099)         j++;
    00A9 9563      INC	R22
(0100) 		if(len==1)
    00AA 2D8A      MOV	R24,R10
    00AB 3081      CPI	R24,1
    00AC F439      BNE	0x00B4
(0101) 		{
(0102) 		  if(j == 7) 
    00AD 3067      CPI	R22,7
    00AE F459      BNE	0x00BA
(0103)          { 
(0104)             j = 0; 
    00AF 2766      CLR	R22
(0105)             data++; 
    00B0 5F4F      SUBI	R20,0xFF
    00B1 4F5F      SBCI	R21,0xFF
(0106)             len--; 
    00B2 94AA      DEC	R10
(0107)          }
(0108) 		}
    00B3 C006      RJMP	0x00BA
(0109) 		else
(0110) 		{ 
(0111)          if(j == 8) 
    00B4 3068      CPI	R22,0x8
    00B5 F421      BNE	0x00BA
(0112)          { 
(0113)             j = 0; 
    00B6 2766      CLR	R22
(0114)             data++; 
    00B7 5F4F      SUBI	R20,0xFF
    00B8 4F5F      SBCI	R21,0xFF
(0115)             len--; 
    00B9 94AA      DEC	R10
    00BA 20AA      TST	R10
    00BB F651      BNE	0x0086
(0116)          }

⌨️ 快捷键说明

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