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

📄 main.lst

📁 这一个用ATTINY26做的433M无线遥控解码程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00D1 92200072  STS	led_time,R2
(0207) 			if(rxd_data==0x03) 
    00D3 91800060  LDS	R24,rxd_data
    00D5 3083      CPI	R24,3
    00D6 F429      BNE	0x00DC
(0208) 			{
(0209) 				CLR_RLY2;
    00D7 98D8      CBI	0x1B,0
(0210) 				asm("nop"); 
    00D8 0000      NOP
(0211) 				asm("nop");
    00D9 0000      NOP
(0212) 				SET_RLY1;
    00DA 9AD9      SBI	0x1B,1
(0213) 			}	
    00DB C011      RJMP	0x00ED
(0214) 			else if(datas==0xc0) 
    00DC 91800065  LDS	R24,datas
    00DE 3C80      CPI	R24,0xC0
    00DF F429      BNE	0x00E5
(0215) 			{
(0216) 				CLR_RLY1;
    00E0 98D9      CBI	0x1B,1
(0217) 				asm("nop"); 
    00E1 0000      NOP
(0218) 				asm("nop");
    00E2 0000      NOP
(0219) 				SET_RLY2;
    00E3 9AD8      SBI	0x1B,0
(0220) 			}
    00E4 C008      RJMP	0x00ED
(0221) 			else if(datas==0x0c || datas==0x30) 
    00E5 91800065  LDS	R24,datas
    00E7 308C      CPI	R24,0xC
    00E8 F011      BEQ	0x00EB
    00E9 3380      CPI	R24,0x30
    00EA F411      BNE	0x00ED
(0222) 			{
(0223) 				CLR_RLY1;
    00EB 98D9      CBI	0x1B,1
(0224) 				CLR_RLY2;
    00EC 98D8      CBI	0x1B,0
(0225) 			}
(0226) 		}
(0227) 	}
    00ED 9508      RET
(0228) }
(0229) 
(0230) 
(0231) 
(0232) void main(void)
(0233) {
(0234) 	init_devices();
_main:
    00EE DF68      RCALL	_init_devices
(0235) 	
(0236) 	SET_LED1;
    00EF 9AC5      SBI	0x18,5
    00F0 C00A      RJMP	0x00FB
(0237) 	
(0238) 	while(1)
(0239) 	{
(0240) 		if(flag_4ms)
    00F1 90200073  LDS	R2,flag_4ms
    00F3 2022      TST	R2
    00F4 F031      BEQ	0x00FB
(0241) 		{
(0242) 			flag_4ms = 0;
    00F5 2422      CLR	R2
    00F6 92200073  STS	flag_4ms,R2
(0243) 			asm("WDR");	
    00F8 95A8      WDR
(0244) 			Remote_set();
    00F9 DFBE      RCALL	_Remote_set
(0245) 			key_scan();
    00FA DF6E      RCALL	_key_scan
    00FB CFF5      RJMP	0x00F1
    00FC 9508      RET
_int0_isr:
  temp                 --> R16
  i                    --> R16
    00FD 922A      ST	R2,-Y
    00FE 923A      ST	R3,-Y
    00FF 924A      ST	R4,-Y
    0100 930A      ST	R16,-Y
    0101 931A      ST	R17,-Y
    0102 938A      ST	R24,-Y
    0103 939A      ST	R25,-Y
    0104 B62F      IN	R2,0x3F
    0105 922A      ST	R2,-Y
(0246) 		}
(0247) 	}
(0248) }
(0249) 
(0250) 
(0251) 
(0252) #pragma interrupt_handler int0_isr:2
(0253) void int0_isr(void)
(0254) {
(0255) 	uchar	temp;
(0256) 	uint	i;
(0257) 
(0258) 	if(!start)
    0106 90200069  LDS	R2,start
    0108 2022      TST	R2
    0109 F009      BEQ	0x010B
    010A C03B      RJMP	0x0146
(0259) 	{
(0260) 		if(MCUCR==0x02)
    010B B785      IN	R24,0x35
    010C 3082      CPI	R24,2
    010D F459      BNE	0x0119
(0261) 		{
(0262) 			MCUCR  = 0x03;
    010E E083      LDI	R24,3
    010F BF85      OUT	0x35,R24
(0263) 			TCNT1  = 0x00;
    0110 2422      CLR	R2
    0111 BC2E      OUT	0x2E,R2
(0264)  			timeH  = 0x00;
    0112 92200067  STS	timeH,R2
(0265)  			timeL  = 0x00;
    0114 92200066  STS	timeL,R2
(0266)  			TCCR1B = 0x05;
    0116 E085      LDI	R24,5
    0117 BD8F      OUT	0x2F,R24
(0267)  			
(0268) 		}
    0118 C0AD      RJMP	0x01C6
(0269) 		else if(MCUCR==0x03)
    0119 B785      IN	R24,0x35
    011A 3083      CPI	R24,3
    011B F009      BEQ	0x011D
    011C C0A9      RJMP	0x01C6
(0270) 		{
(0271) 			TCCR1B = 0x00;
    011D 2422      CLR	R2
    011E BC2F      OUT	0x2F,R2
(0272) 			MCUCR  = 0x02;
    011F E082      LDI	R24,2
    0120 BF85      OUT	0x35,R24
(0273) 
(0274) 			i = timeH*256 + TCNT1;
    0121 B42E      IN	R2,0x2E
    0122 90300067  LDS	R3,timeH
    0124 2D13      MOV	R17,R3
    0125 2D02      MOV	R16,R2
(0275) 			if(i>1620 && timeH<1800) 	// 同步头
    0126 E584      LDI	R24,0x54
    0127 E096      LDI	R25,6
    0128 1780      CP	R24,R16
    0129 0791      CPC	R25,R17
    012A F008      BCS	0x012C
    012B C09A      RJMP	0x01C6
    012C 2D83      MOV	R24,R3
    012D 3088      CPI	R24,0x8
    012E F00C      BLT	0x0130
    012F C096      RJMP	0x01C6
(0276) 			{
(0277) 				start  = 1;
    0130 E081      LDI	R24,1
    0131 93800069  STS	start,R24
(0278) 				TCNT1  = 0x00;
    0133 2422      CLR	R2
    0134 BC2E      OUT	0x2E,R2
(0279) 	 			timeH  = 0x00;
    0135 92200067  STS	timeH,R2
(0280) 	 			timeL  = 0x00;
    0137 92200066  STS	timeL,R2
(0281) 	 			TCCR1B = 0x05;
    0139 E085      LDI	R24,5
    013A BD8F      OUT	0x2F,R24
(0282) 	 			
(0283) 	 			bits   = 0;
    013B 92200068  STS	bits,R2
(0284) 	 			addrL  = 0;
    013D 92200063  STS	addrL,R2
(0285) 				addrH  = 0;
    013F 92200064  STS	addrH,R2
(0286) 	 			datas  = 0;
    0141 92200065  STS	datas,R2
(0287) 	 			flag   = 0;
    0143 9220006B  STS	flag,R2
(0288) 			}	
(0289) 		}
(0290) 	}
    0145 C080      RJMP	0x01C6
(0291) 	else 
(0292) 	{
(0293)  		if(MCUCR==0x02)		// 下降沿读时间
    0146 B785      IN	R24,0x35
    0147 3082      CPI	R24,2
    0148 F009      BEQ	0x014A
    0149 C06F      RJMP	0x01B9
(0294)  		{	
(0295)  			TCCR1B = 0x00;
    014A 2422      CLR	R2
    014B BC2F      OUT	0x2F,R2
(0296)  			MCUCR  = 0x03;
    014C E083      LDI	R24,3
    014D BF85      OUT	0x35,R24
(0297)  			if(timeH>0) start = 0; // 超时
    014E 90300067  LDS	R3,timeH
    0150 1423      CP	R2,R3
    0151 F418      BCC	0x0155
    0152 92200069  STS	start,R2
    0154 C071      RJMP	0x01C6
(0298)  			else 
(0299)  			{
(0300) 	 			timeL = TCNT1;
    0155 B42E      IN	R2,0x2E
    0156 92200066  STS	timeL,R2
(0301) 	 			if(timeL>40 && timeL<60) temp = 0x00;
    0158 E288      LDI	R24,0x28
    0159 1582      CP	R24,R2
    015A F428      BCC	0x0160
    015B 2D82      MOV	R24,R2
    015C 338C      CPI	R24,0x3C
    015D F410      BCC	0x0160
    015E 2700      CLR	R16
    015F C009      RJMP	0x0169
(0302) 	 			else if(timeL>150 && timeL<170)  temp = 0x80;
    0160 E986      LDI	R24,0x96
    0161 90200066  LDS	R2,timeL
    0163 1582      CP	R24,R2
    0164 F420      BCC	0x0169
    0165 2D82      MOV	R24,R2
    0166 3A8A      CPI	R24,0xAA
    0167 F408      BCC	0x0169
    0168 E800      LDI	R16,0x80
(0303) 
(0304) 	 			if(flag==0)			// 地址低位
    0169 9020006B  LDS	R2,flag
    016B 2022      TST	R2
    016C F449      BNE	0x0176
(0305) 	 			{
(0306) 		 			addrL >>= 1;
    016D 90200063  LDS	R2,addrL
    016F 9426      LSR	R2
    0170 92200063  STS	addrL,R2
(0307) 		 			addrL |= temp;
    0172 2A20      OR	R2,R16
    0173 92200063  STS	addrL,R2
(0308) 		 		}
    0175 C019      RJMP	0x018F
(0309) 		 		else if(flag==1)	// 地址高位
    0176 9180006B  LDS	R24,flag
    0178 3081      CPI	R24,1
    0179 F449      BNE	0x0183
(0310) 		 		{
(0311) 		 			addrH >>= 1;
    017A 90200064  LDS	R2,addrH
    017C 9426      LSR	R2
    017D 92200064  STS	addrH,R2
(0312) 		 			addrH |= temp;
    017F 2A20      OR	R2,R16
    0180 92200064  STS	addrH,R2
(0313) 		 		}
    0182 C00C      RJMP	0x018F
(0314) 		 		else if(flag==2) 	// 数据
    0183 9180006B  LDS	R24,flag
    0185 3082      CPI	R24,2
    0186 F441      BNE	0x018F
(0315) 		 		{
(0316) 		 			datas >>= 1;	
    0187 90200065  LDS	R2,datas
    0189 9426      LSR	R2
    018A 92200065  STS	datas,R2
(0317) 		 			datas |= temp;
    018C 2A20      OR	R2,R16
    018D 92200065  STS	datas,R2
(0318) 		 		}
(0319) 	
(0320) 	 			bits ++;
    018F 91800068  LDS	R24,bits
    0191 5F8F      SUBI	R24,0xFF
    0192 93800068  STS	bits,R24
(0321) 	 			if(bits==8)  	  flag = 1;	
    0194 3088      CPI	R24,0x8
    0195 F421      BNE	0x019A
    0196 E081      LDI	R24,1
    0197 9380006B  STS	flag,R24
    0199 C02C      RJMP	0x01C6
(0322) 				else if(bits==16) flag = 2;	
    019A 91800068  LDS	R24,bits
    019C 3180      CPI	R24,0x10
    019D F421      BNE	0x01A2
    019E E082      LDI	R24,2
    019F 9380006B  STS	flag,R24
    01A1 C024      RJMP	0x01C6
(0323) 	 			else if(bits>=24) 
    01A2 91800068  LDS	R24,bits
    01A4 3188      CPI	R24,0x18
    01A5 F100      BCS	0x01C6
(0324) 	 			{
(0325) 	 				start = 0;
    01A6 2422      CLR	R2
    01A7 92200069  STS	start,R2
(0326) 	 				rxd_flag = 1;
    01A9 E081      LDI	R24,1
    01AA 9380006A  STS	rxd_flag,R24
(0327) 	 				rxd_data = datas;
    01AC 90200065  LDS	R2,datas
    01AE 92200060  STS	rxd_data,R2
(0328) 	 				addr = addrH*256 + addrL;
    01B0 90200063  LDS	R2,addrL
    01B2 90300064  LDS	R3,addrH
    01B4 92300062  STS	addr+1,R3
    01B6 92200061  STS	addr,R2
(0329) 	 			}
(0330) 			}
(0331)  		}
    01B8 C00D      RJMP	0x01C6
(0332)  		else if(MCUCR==0x03)	// 上升沿开始计时
    01B9 B785      IN	R24,0x35
    01BA 3083      CPI	R24,3
    01BB F451      BNE	0x01C6
(0333)  		{
(0334)  			MCUCR  = 0x02;
    01BC E082      LDI	R24,2
    01BD BF85      OUT	0x35,R24
(0335)  			
(0336)  			TCNT1  = 0x00;
    01BE 2422      CLR	R2
    01BF BC2E      OUT	0x2E,R2
(0337)  			timeH  = 0x00;
    01C0 92200067  STS	timeH,R2
(0338)  			timeL  = 0x00;
    01C2 92200066  STS	timeL,R2
(0339)  			TCCR1B = 0x05;
    01C4 E085      LDI	R24,5
    01C5 BD8F      OUT	0x2F,R24
(0340)  		}
(0341) 	}	
    01C6 9029      LD	R2,Y+
    01C7 BE2F      OUT	0x3F,R2
    01C8 9199      LD	R25,Y+
    01C9 9189      LD	R24,Y+
    01CA 9119      LD	R17,Y+
    01CB 9109      LD	R16,Y+
    01CC 9049      LD	R4,Y+
    01CD 9039      LD	R3,Y+
    01CE 9029      LD	R2,Y+
    01CF 9518      RETI
_timer1_ovf_isr:
    01D0 922A      ST	R2,-Y
    01D1 938A      ST	R24,-Y
    01D2 939A      ST	R25,-Y
    01D3 B62F      IN	R2,0x3F
    01D4 922A      ST	R2,-Y
(0342) }
(0343) 
(0344) 
(0345) 
(0346) 
(0347) #pragma interrupt_handler timer1_ovf_isr:6
(0348) void timer1_ovf_isr(void)
(0349) {
(0350) 	TCNT1 = 0x00; //reload counter	
    01D5 2422      CLR	R2
    01D6 BC2E      OUT	0x2E,R2
(0351) 	timeH ++;
    01D7 91800067  LDS	R24,timeH
    01D9 5F8F      SUBI	R24,0xFF
    01DA 93800067  STS	timeH,R24
    01DC 9029      LD	R2,Y+
    01DD BE2F      OUT	0x3F,R2
    01DE 9199      LD	R25,Y+
    01DF 9189      LD	R24,Y+
    01E0 9029      LD	R2,Y+
    01E1 9518      RETI
_timer0_ovf_isr:
    01E2 938A      ST	R24,-Y
    01E3 B78F      IN	R24,0x3F
    01E4 938A      ST	R24,-Y
(0352) }
(0353) 
(0354) 
(0355) 
(0356) #pragma interrupt_handler timer0_ovf_isr:7
(0357) void timer0_ovf_isr(void)
(0358) {
(0359)  	TCNT0 = 0x83; //reload counter value
    01E5 E883      LDI	R24,0x83
    01E6 BF82      OUT	0x32,R24
(0360)  	
(0361)  	flag_4ms = 1;
FILE: <library>
    01E7 E081      LDI	R24,1
    01E8 93800073  STS	flag_4ms,R24
    01EA 9189      LD	R24,Y+
    01EB BF8F      OUT	0x3F,R24
    01EC 9189      LD	R24,Y+
    01ED 9518      RETI

⌨️ 快捷键说明

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