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

📄 hw.lst

📁 万能遥控器解码
💻 LST
字号:
__start:
__text_start:
      11 E5CF      LDI	R28,0x5F
      12 E0D2      LDI	R29,2
      13 BFCD      OUT	0x3D,R28
      14 BFDE      OUT	0x3E,R29
      15 51CE      SUBI	R28,0x1E
      16 40D0      SBCI	R29,0
      17 EA0A      LDI	R16,0xAA
      18 8308      STD	Y+0,R16
      19 2400      CLR	R0
      1A E6E0      LDI	R30,0x60
      1B E0F0      LDI	R31,0
      1C E010      LDI	R17,0
      1D 36E5      CPI	R30,0x65
      1E 07F1      CPC	R31,R17
      1F F011      BEQ	0x0022
      20 9201      ST	R0,Z+
      21 CFFB      RJMP	0x001D
      22 8300      STD	Z+0,R16
      23 E2E2      LDI	R30,0x22
      24 E0F0      LDI	R31,0
      25 E6A0      LDI	R26,0x60
      26 E0B0      LDI	R27,0
      27 E010      LDI	R17,0
      28 E000      LDI	R16,0
      29 BF0B      OUT	0x3B,R16
      2A 32E2      CPI	R30,0x22
      2B 07F1      CPC	R31,R17
      2C F021      BEQ	0x0031
      2D 95C8      LPM
      2E 9631      ADIW	R30,1
      2F 920D      ST	R0,X+
      30 CFF9      RJMP	0x002A
      31 D0B6      RCALL	_main
_exit:
      32 CFFF      RJMP	_exit
_delay_nus:
  i                    --> R20
  n                    --> R16
      33 934A      ST	R20,-Y
      34 935A      ST	R21,-Y
FILE: C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\实验板红外avr解码\hongwai.c
(0001) //ICC-AVR application builder : 2008-8-7 8:30:21
(0002) // Target : M8515
(0003) // Crystal: 4.0000Mhz
(0004) #include <iom8515v.h>//和单片机类型相对应的头文件,选择Atmega8515做实验; 
(0005) #include <macros.h>
(0006) #define uchar unsigned char
(0007) #define uint unsigned int
(0008) #define DQ    PD2
(0009) #define    HW   (PIND&(1<<DQ))  //数据的状态
(0010) unsigned char IRCode[3],IRCON,flag;
(0011) void delay_nus(unsigned int n)//n微秒延时函数 
(0012) { 
(0013) unsigned int i; 
(0014) for (i=0;i<n;i++) 
      35 2744      CLR	R20
      36 2755      CLR	R21
      37 C003      RJMP	0x003B
(0015)   { 
(0016)       asm("nop"); 
      38 0000      NOP
      39 5F4F      SUBI	R20,0xFF
      3A 4F5F      SBCI	R21,0xFF
      3B 1740      CP	R20,R16
      3C 0751      CPC	R21,R17
      3D F3D0      BCS	0x0038
      3E 9159      LD	R21,Y+
      3F 9149      LD	R20,Y+
      40 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R10
      41 D0AF      RCALL	push_xgset300C
      42 0158      MOVW	R10,R16
(0017)   } 
(0018) } 
(0019) void delay_nms(unsigned int n)//n毫秒延时函数 
(0020) { 
(0021)   unsigned int i; 
(0022)   for (i=0;i<n;i++) //执行n次1毫秒延时 
      43 2744      CLR	R20
      44 2755      CLR	R21
      45 C005      RJMP	0x004B
(0023)   delay_nus(10);  
      46 E00A      LDI	R16,0xA
      47 E010      LDI	R17,0
      48 DFEA      RCALL	_delay_nus
      49 5F4F      SUBI	R20,0xFF
      4A 4F5F      SBCI	R21,0xFF
      4B 154A      CP	R20,R10
      4C 055B      CPC	R21,R11
      4D F3C0      BCS	0x0046
      4E C0A7      RJMP	pop_xgset300C
(0024) }             
(0025) /************************* UART 发送数据函数*********************************************************/
(0026) void uart0_init(void)
(0027) {
(0028)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
      4F 2422      CLR	R2
      50 B82A      OUT	0x0A,R2
(0029)  UCSRA = 0x00;
      51 B82B      OUT	0x0B,R2
(0030)  UCSRC = BIT(URSEL) | 0x26;
      52 EA86      LDI	R24,0xA6
      53 BD80      OUT	0x20,R24
(0031)  UBRRL = 0x33; //set baud rate lo
      54 E383      LDI	R24,0x33
      55 B989      OUT	0x09,R24
(0032)  UBRRH = 0x00; //set baud rate hi
      56 BC20      OUT	0x20,R2
(0033)  UCSRB = 0x18;
      57 E188      LDI	R24,0x18
      58 B98A      OUT	0x0A,R24
      59 9508      RET
(0034) }
(0035) void sendchar(uchar num)
(0036)   { 	   
(0037)       UDR=num;
_sendchar:
  num                  --> R16
      5A B90C      OUT	0x0C,R16
(0038)       while(!(UCSRA&(1<<TXC)));
      5B 9B5E      SBIS	0x0B,6
      5C CFFE      RJMP	0x005B
(0039) 	  UCSRA |= (1<<TXC);
      5D 9A5E      SBI	0x0B,6
      5E 9508      RET
(0040)   }
(0041) 
(0042) void panduan(void)
(0043)      {
(0044) 	 	      IRCode[IRCON]<<=1;     //每读一次放入变量中的二进制的一个位,每次左移一位
_panduan:
      5F E682      LDI	R24,0x62
      60 E090      LDI	R25,0
      61 9020 0061 LDS	R2,IRCON
      63 2433      CLR	R3
      64 0E28      ADD	R2,R24
      65 1E39      ADC	R3,R25
      66 01F1      MOVW	R30,R2
      67 8020      LDD	R2,Z+0
      68 0C22      LSL	R2
      69 8220      STD	Z+0,R2
(0045)             if(!HW)      delay_nms(42);      //延时1107us   44	    
      6A 9982      SBIC	0x10,2
      6B C004      RJMP	0x0070
      6C E20A      LDI	R16,0x2A
      6D E010      LDI	R17,0
      6E DFD2      RCALL	_delay_nms
      6F C00E      RJMP	0x007E
(0046) 	             else
(0047) 	                 {
(0048) 			          IRCode[IRCON]|=0x01; //左移后最后一位写入 1
      70 E682      LDI	R24,0x62
      71 E090      LDI	R25,0
      72 9020 0061 LDS	R2,IRCON
      74 2433      CLR	R3
      75 0E28      ADD	R2,R24
      76 1E39      ADC	R3,R25
      77 01F1      MOVW	R30,R2
      78 8180      LDD	R24,Z+0
      79 6081      ORI	R24,1
      7A 8380      STD	Z+0,R24
(0049) 	                  delay_nms(89);    //延时2207us  88
      7B E509      LDI	R16,0x59
      7C E010      LDI	R17,0
      7D DFC3      RCALL	_delay_nms
(0050) 		             }
(0051)                         flag++;
      7E 9180 0060 LDS	R24,flag
      80 5F8F      SUBI	R24,0xFF
      81 9380 0060 STS	flag,R24
(0052) 					  if(flag==8) 
      83 3088      CPI	R24,0x8
      84 F461      BNE	0x0091
(0053) 						    { 
(0054) 							    flag=0; //8为填满一个数组,计数清零
      85 2422      CLR	R2
      86 9220 0060 STS	flag,R2
(0055) 		                    	IRCON++;  //填满一个字节,指向下一个变量						    
      88 9180 0061 LDS	R24,IRCON
      8A 5F8F      SUBI	R24,0xFF
      8B 9380 0061 STS	IRCON,R24
(0056) 								if(IRCON==4)  IRCON=0;                  
      8D 3084      CPI	R24,4
      8E F411      BNE	0x0091
      8F 9220 0061 STS	IRCON,R2
(0057) 		                    }  					      
      91 9508      RET
_int0_isr:
  i                    --> R20
      92 920A      ST	R0,-Y
      93 921A      ST	R1,-Y
      94 922A      ST	R2,-Y
      95 923A      ST	R3,-Y
      96 924A      ST	R4,-Y
      97 925A      ST	R5,-Y
      98 926A      ST	R6,-Y
      99 927A      ST	R7,-Y
      9A 928A      ST	R8,-Y
      9B 929A      ST	R9,-Y
      9C 930A      ST	R16,-Y
      9D 931A      ST	R17,-Y
      9E 932A      ST	R18,-Y
      9F 933A      ST	R19,-Y
      A0 938A      ST	R24,-Y
      A1 939A      ST	R25,-Y
      A2 93AA      ST	R26,-Y
      A3 93BA      ST	R27,-Y
      A4 93EA      ST	R30,-Y
      A5 93FA      ST	R31,-Y
      A6 B60F      IN	R0,0x3F
      A7 920A      ST	R0,-Y
      A8 934A      ST	R20,-Y
(0058)      }
(0059) /*****************************外部中断服务函数*****************************************/
(0060) #pragma interrupt_handler int0_isr:iv_INT0
(0061) void int0_isr(void)
(0062) {
(0063)   uchar i;
(0064)  GICR = 0x00;    //禁止外部中断
      A9 2422      CLR	R2
      AA BE2B      OUT	0x3B,R2
(0065)  delay_nms(616);   //延时15400us   616
      AB E608      LDI	R16,0x68
      AC E012      LDI	R17,2
      AD DF93      RCALL	_delay_nms
(0066)  for(i=0;i<32;i++)
      AE 2744      CLR	R20
      AF C002      RJMP	0x00B2
(0067)   {
(0068)    panduan();
      B0 DFAE      RCALL	_panduan
      B1 9543      INC	R20
      B2 3240      CPI	R20,0x20
      B3 F3E0      BCS	0x00B0
(0069)   }
(0070)  
(0071)  uart0_init();
      B4 DF9A      RCALL	_uart0_init
(0072)    for(i=0;i<4;i++)
      B5 2744      CLR	R20
      B6 C00C      RJMP	0x00C3
(0073)          {
(0074) 		 delay_nms(5000);
      B7 E808      LDI	R16,0x88
      B8 E113      LDI	R17,0x13
      B9 DF87      RCALL	_delay_nms
(0075) 	//	 PORTB=IRCode[i];
(0076)           sendchar(IRCode[i]);
      BA E682      LDI	R24,0x62
      BB E090      LDI	R25,0
      BC 2FE4      MOV	R30,R20
      BD 27FF      CLR	R31
      BE 0FE8      ADD	R30,R24
      BF 1FF9      ADC	R31,R25
      C0 8100      LDD	R16,Z+0
      C1 DF98      RCALL	_sendchar
      C2 9543      INC	R20
      C3 3044      CPI	R20,4
      C4 F390      BCS	0x00B7
(0077)         }  
(0078) 	GICR = 0x40;	
      C5 E480      LDI	R24,0x40
      C6 BF8B      OUT	0x3B,R24
      C7 9149      LD	R20,Y+
      C8 9009      LD	R0,Y+
      C9 BE0F      OUT	0x3F,R0
      CA 91F9      LD	R31,Y+
      CB 91E9      LD	R30,Y+
      CC 91B9      LD	R27,Y+
      CD 91A9      LD	R26,Y+
      CE 9199      LD	R25,Y+
      CF 9189      LD	R24,Y+
      D0 9139      LD	R19,Y+
      D1 9129      LD	R18,Y+
      D2 9119      LD	R17,Y+
      D3 9109      LD	R16,Y+
      D4 9099      LD	R9,Y+
      D5 9089      LD	R8,Y+
      D6 9079      LD	R7,Y+
      D7 9069      LD	R6,Y+
      D8 9059      LD	R5,Y+
      D9 9049      LD	R4,Y+
      DA 9039      LD	R3,Y+
      DB 9029      LD	R2,Y+
      DC 9019      LD	R1,Y+
      DD 9009      LD	R0,Y+
      DE 9518      RETI
(0079) }
(0080) 
(0081) /*****************外部中断设置***********************************/
(0082) void init_devices_int0(void)
(0083) {
(0084)  CLI(); //disable all interrupts
_init_devices_int0:
      DF 94F8      BCLR	7
(0085)  MCUCR = 0x02;    //下降沿触发方式
      E0 E082      LDI	R24,2
      E1 BF85      OUT	0x35,R24
(0086)  EMCUCR = 0x00;
      E2 2422      CLR	R2
      E3 BE26      OUT	0x36,R2
(0087)  GICR = 0x40;    //外部中断请求 0 使能
      E4 E480      LDI	R24,0x40
      E5 BF8B      OUT	0x3B,R24
(0088)  SEI(); //re-enable interrupts
      E6 9478      BSET	7
      E7 9508      RET
(0089) }                                                                                                               
(0090)                                 
(0091) void main(void)//主函数 
(0092) {
(0093)   DDRB=0XFF;
_main:
      E8 EF8F      LDI	R24,0xFF
      E9 BB87      OUT	0x17,R24
(0094)   PORTB=0XFF;
      EA BB88      OUT	0x18,R24
(0095)   DDRD&=~BIT(0);
      EB 9888      CBI	0x11,0
(0096)   DDRD|=BIT(1);
      EC 9A89      SBI	0x11,1
(0097)   DDRD&=~BIT(2);//设置PD2为输入口 
      ED 988A      CBI	0x11,2
(0098)   init_devices_int0();   //外部中断初始化并开外部中断   
      EE DFF0      RCALL	_init_devices_int0
(0099)  while(1);
FILE: <library>
      EF CFFF      RJMP	0x00EF
      F0 9508      RET
push_xgset300C:
      F1 935A      ST	R21,-Y
      F2 934A      ST	R20,-Y
      F3 92BA      ST	R11,-Y
      F4 92AA      ST	R10,-Y
      F5 9508      RET
pop_xgset300C:
      F6 90A9      LD	R10,Y+
      F7 90B9      LD	R11,Y+
      F8 9149      LD	R20,Y+
      F9 9159      LD	R21,Y+
      FA 9508      RET

⌨️ 快捷键说明

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