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

📄 infrared_test.lst

📁 AVR 红外接收源代码,对学习红外的人很有帮助
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    001F E5CF      LDI	R28,0x5F
    0020 E0D4      LDI	R29,4
    0021 BFCD      OUT	0x3D,R28
    0022 BFDE      OUT	0x3E,R29
    0023 51C0      SUBI	R28,0x10
    0024 40D0      SBCI	R29,0
    0025 EA0A      LDI	R16,0xAA
    0026 8308      STD	Y+0,R16
    0027 2400      CLR	R0
    0028 E7E7      LDI	R30,0x77
    0029 E0F0      LDI	R31,0
    002A E011      LDI	R17,1
    002B 31EB      CPI	R30,0x1B
    002C 07F1      CPC	R31,R17
    002D F011      BEQ	0x0030
    002E 9201      ST	R0,Z+
    002F CFFB      RJMP	0x002B
    0030 8300      STD	Z+0,R16
    0031 E2E6      LDI	R30,0x26
    0032 E0F0      LDI	R31,0
    0033 E6A0      LDI	R26,0x60
    0034 E0B0      LDI	R27,0
    0035 E010      LDI	R17,0
    0036 33ED      CPI	R30,0x3D
    0037 07F1      CPC	R31,R17
    0038 F021      BEQ	0x003D
    0039 95C8      LPM
    003A 9631      ADIW	R30,1
    003B 920D      ST	R0,X+
    003C CFF9      RJMP	0x0036
    003D D09A      RCALL	_main
_exit:
    003E CFFF      RJMP	_exit
_delay_us:
  i                    --> R20
  n                    --> R16
    003F D2F6      RCALL	push_gset1
FILE: D:\开发板\source\infrared\infrared_test\main.c
(0001) /******************************************/
(0002) /*             北京MCU学习之家            */
(0003) /*            红外输入演示程序            */
(0004) /*             作者:白如冰                */
(0005) /*             2005年10月1日              */
(0006) /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
(0007) /******************************************/
(0008) //  1、使用WIN9X/WIN2000/XP的超级终端,进行通信调试。
(0009) //  2、通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。
(0010) 
(0011) #include <iom8v.h>
(0012) #include <macros.h>
(0013) #include "infrared_test.h"
(0014) #define fosc 8000000 //晶振8MHZ
(0015) #define baud 9600	 //波特率
(0016) #define buffer_max    75
(0017) 
(0018) extern void init_infr(void);
(0019) unsigned char uia_data[5];  //5位ASC码存储区
(0020) 
(0021) void delay_us(unsigned int n)
(0022) {
(0023)   unsigned int i;
(0024)   for(i=n;i>0;i--);
    0040 01A8      MOVW	R20,R16
    0041 C002      RJMP	0x0044
    0042 5041      SUBI	R20,1
    0043 4050      SBCI	R21,0
    0044 3040      CPI	R20,0
    0045 0745      CPC	R20,R21
    0046 F7D9      BNE	0x0042
    0047 D2F1      RCALL	pop_gset1
    0048 9508      RET
(0025)   }
(0026)   
(0027) void delay_1ms(void)
(0028) { unsigned int i;
(0029)  for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
  i                    --> R16
    0049 E001      LDI	R16,1
    004A E010      LDI	R17,0
    004B C002      RJMP	0x004E
    004C 5F0F      SUBI	R16,0xFF
    004D 4F1F      SBCI	R17,0xFF
    004E 3706      CPI	R16,0x76
    004F E0E4      LDI	R30,4
    0050 071E      CPC	R17,R30
    0051 F3D0      BCS	0x004C
    0052 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    0053 D2E0      RCALL	push_gset2
    0054 01B8      MOVW	R22,R16
(0030)     ;
(0031) }
(0032) void delay_ms(unsigned int n)
(0033) {
(0034)  unsigned int i=0;
    0055 2744      CLR	R20
    0056 2755      CLR	R21
    0057 C003      RJMP	0x005B
(0035)    while(i<n)
(0036)    {delay_1ms();
    0058 DFF0      RCALL	_delay_1ms
(0037)     i++;
    0059 5F4F      SUBI	R20,0xFF
    005A 4F5F      SBCI	R21,0xFF
    005B 1746      CP	R20,R22
    005C 0757      CPC	R21,R23
    005D F3D0      BCS	0x0058
    005E D2CB      RCALL	pop_gset2
    005F 9508      RET
_uint_asc:
  temp                 --> R22
  uia                  --> R20
  data                 --> R10
    0060 D2D1      RCALL	push_gset3
    0061 0158      MOVW	R10,R16
(0038)    }
(0039) }  													
(0040) 
(0041) unsigned char *uint_asc(unsigned int data)  //字转换为5位ASC码
(0042) {
(0043)   unsigned char *uia;
(0044)   unsigned int temp;
(0045)   uia=uia_data;
    0062 E747      LDI	R20,0x77
    0063 E050      LDI	R21,0
(0046)   
(0047)   temp=data;
    0064 01B5      MOVW	R22,R10
(0048)   uia+=4;
    0065 5F4C      SUBI	R20,0xFC
    0066 4F5F      SBCI	R21,0xFF
(0049)   *uia--=temp%10+0x30;
    0067 011A      MOVW	R2,R20
    0068 5041      SUBI	R20,1
    0069 4050      SBCI	R21,0
    006A E02A      LDI	R18,0xA
    006B E030      LDI	R19,0
    006C 018B      MOVW	R16,R22
    006D D290      RCALL	mod16u
    006E 01C8      MOVW	R24,R16
    006F 96C0      ADIW	R24,0x30
    0070 01F1      MOVW	R30,R2
    0071 8380      STD	Z+0,R24
(0050)   temp=data;
(0051)   *uia--=(temp/10)%10+0x30;
    0072 011A      MOVW	R2,R20
    0073 5041      SUBI	R20,1
    0074 4050      SBCI	R21,0
    0075 E02A      LDI	R18,0xA
    0076 E030      LDI	R19,0
    0077 018B      MOVW	R16,R22
    0078 D287      RCALL	div16u
    0079 E02A      LDI	R18,0xA
    007A E030      LDI	R19,0
    007B D282      RCALL	mod16u
    007C 01C8      MOVW	R24,R16
    007D 96C0      ADIW	R24,0x30
    007E 01F1      MOVW	R30,R2
    007F 8380      STD	Z+0,R24
(0052)   temp=data;
(0053)   *uia--=(temp/100)%10+0x30;
    0080 011A      MOVW	R2,R20
    0081 5041      SUBI	R20,1
    0082 4050      SBCI	R21,0
    0083 E624      LDI	R18,0x64
    0084 E030      LDI	R19,0
    0085 018B      MOVW	R16,R22
    0086 D279      RCALL	div16u
    0087 E02A      LDI	R18,0xA
    0088 E030      LDI	R19,0
    0089 D274      RCALL	mod16u
    008A 01C8      MOVW	R24,R16
    008B 96C0      ADIW	R24,0x30
    008C 01F1      MOVW	R30,R2
    008D 8380      STD	Z+0,R24
(0054)   temp=data;
(0055)   *uia--=(temp/1000)%10+0x30;
    008E 011A      MOVW	R2,R20
    008F 5041      SUBI	R20,1
    0090 4050      SBCI	R21,0
    0091 EE28      LDI	R18,0xE8
    0092 E033      LDI	R19,3
    0093 018B      MOVW	R16,R22
    0094 D26B      RCALL	div16u
    0095 E02A      LDI	R18,0xA
    0096 E030      LDI	R19,0
    0097 D266      RCALL	mod16u
    0098 01C8      MOVW	R24,R16
    0099 96C0      ADIW	R24,0x30
    009A 01F1      MOVW	R30,R2
    009B 8380      STD	Z+0,R24
(0056)   *uia=temp/10000+0x30;
    009C E120      LDI	R18,0x10
    009D E237      LDI	R19,0x27
    009E 018B      MOVW	R16,R22
    009F D260      RCALL	div16u
    00A0 01C8      MOVW	R24,R16
    00A1 96C0      ADIW	R24,0x30
    00A2 01FA      MOVW	R30,R20
    00A3 8380      STD	Z+0,R24
(0057)   uia=uia_data;
    00A4 E747      LDI	R20,0x77
    00A5 E050      LDI	R21,0
(0058)   return(uia);
    00A6 018A      MOVW	R16,R20
    00A7 D284      RCALL	pop_gset3
    00A8 9508      RET
(0059) }
(0060) 
(0061) /*  		字符输出函数 		 */
(0062) void putchar(unsigned char c)
(0063) 	{	 
(0064)      while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    00A9 9B5D      SBIS	0x0B,5
    00AA CFFE      RJMP	_putchar
(0065) 	 UDR=c;    
    00AB B90C      OUT	0x0C,R16
    00AC 9508      RET
_puts:
  s                    --> R20
    00AD D288      RCALL	push_gset1
    00AE 01A8      MOVW	R20,R16
(0066) 	}
(0067) 
(0068) /*			字符串输出函数	   	 */	
(0069) int puts(char *s)
(0070) 	{
    00AF C005      RJMP	0x00B5
(0071) 	while (*s)
(0072) 		{
(0073) 		putchar(*s);
    00B0 01FA      MOVW	R30,R20
    00B1 8100      LDD	R16,Z+0
    00B2 DFF6      RCALL	_putchar
(0074) 		s++;
    00B3 5F4F      SUBI	R20,0xFF
    00B4 4F5F      SBCI	R21,0xFF
    00B5 01FA      MOVW	R30,R20
    00B6 8020      LDD	R2,Z+0
    00B7 2022      TST	R2
    00B8 F7B9      BNE	0x00B0
(0075) 		}	
(0076)     	return 1;
    00B9 E001      LDI	R16,1
    00BA E010      LDI	R17,0
    00BB D27D      RCALL	pop_gset1
    00BC 9508      RET
_puts_hh:
  s                    --> R20
    00BD D278      RCALL	push_gset1
    00BE 01A8      MOVW	R20,R16
(0077) 	}
(0078) /*	 	   含回车换行的字符串输出函数 	 */	
(0079) void puts_hh(char *s)
(0080) 	{
    00BF C005      RJMP	0x00C5
(0081) 	while (*s)
(0082) 		{
(0083) 		putchar(*s);
    00C0 01FA      MOVW	R30,R20
    00C1 8100      LDD	R16,Z+0
    00C2 DFE6      RCALL	_putchar
(0084) 		s++;
    00C3 5F4F      SUBI	R20,0xFF
    00C4 4F5F      SBCI	R21,0xFF
    00C5 01FA      MOVW	R30,R20
    00C6 8020      LDD	R2,Z+0
    00C7 2022      TST	R2
    00C8 F7B9      BNE	0x00C0
(0085) 		}	
(0086)     putchar(0x0a);//换行
    00C9 E00A      LDI	R16,0xA
    00CA DFDE      RCALL	_putchar
(0087) 	putchar(0x0d);//回车
    00CB E00D      LDI	R16,0xD
    00CC DFDC      RCALL	_putchar
    00CD D26B      RCALL	pop_gset1
    00CE 9508      RET
(0088) 	}	
(0089) /*			UART初始化				*/	
(0090) void uart_init(void)
(0091) {
(0092)  UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
_uart_init:
    00CF E188      LDI	R24,0x18
    00D0 B98A      OUT	0x0A,R24
(0093)  UBRRL=(fosc/16/(baud+1))%256;
    00D1 E384      LDI	R24,0x34
    00D2 B989      OUT	0x09,R24
(0094)  UBRRH=(fosc/16/(baud+1))/256;
    00D3 2422      CLR	R2
    00D4 BC20      OUT	0x20,R2
(0095)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位停止位
    00D5 E886      LDI	R24,0x86
    00D6 BD80      OUT	0x20,R24
    00D7 9508      RET
(0096) }
(0097) 
(0098) void main(void)
(0099) {
(0100)   unsigned char i;
(0101)  
(0102)   uart_init();
_main:
  i                    --> Y+1
    00D8 DFF6      RCALL	_uart_init
(0103)   init_infr();
    00D9 D07E      RCALL	_init_infr
    00DA C07B      RJMP	0x0156
(0104)   
(0105)   while(1)
(0106)    {
(0107)      puts("请按键: ");
    00DB E60D      LDI	R16,0x6D
    00DC E010      LDI	R17,0
    00DD DFCF      RCALL	_puts
(0108) 	 
(0109)     while(rece_flag==0);
    00DE 90200116  LDS	R2,rece_flag
    00E0 2022      TST	R2
    00E1 F3E1      BEQ	0x00DE
(0110) 	
(0111) 	  putchar(0x0a);//换行
    00E2 E00A      LDI	R16,0xA
    00E3 DFC5      RCALL	_putchar
(0112) 	  putchar(0x0d);//回车
    00E4 E00D      LDI	R16,0xD
    00E5 DFC3      RCALL	_putchar
(0113) 	  puts("您输入的是:");
    00E6 E600      LDI	R16,0x60
    00E7 E010      LDI	R17,0
    00E8 DFC4      RCALL	_puts
(0114) 	 if((infra_data[0]==infra_data[1])&&
    00E9 90200118  LDS	R2,infra_data+1
    00EB 90300117  LDS	R3,infra_data
    00ED 1432      CP	R3,R2
    00EE F009      BEQ	0x00F0
    00EF C061      RJMP	0x0151
    00F0 9020011A  LDS	R2,infra_data+3
    00F2 9420      COM	R2
    00F3 90300119  LDS	R3,infra_data+2
    00F5 1432      CP	R3,R2
    00F6 F009      BEQ	0x00F8
    00F7 C059      RJMP	0x0151
(0115) 	    (infra_data[2]==(~infra_data[3])))
(0116) 		{
(0117) 		//如果是有效数据
(0118) 		 switch(infra_data[2])
    00F8 2D43      MOV	R20,R3
    00F9 2755      CLR	R21
    00FA 3040      CPI	R20,0
    00FB 0745      CPC	R20,R21
    00FC F129      BEQ	0x0122
    00FD 3041      CPI	R20,1
    00FE E0E0      LDI	R30,0
    00FF 075E      CPC	R21,R30
    0100 F121      BEQ	0x0125
    0101 3042      CPI	R20,2
    0102 E0E0      LDI	R30,0
    0103 075E      CPC	R21,R30
    0104 F119      BEQ	0x0128
    0105 3043      CPI	R20,3
    0106 E0E0      LDI	R30,0
    0107 075E      CPC	R21,R30
    0108 F111      BEQ	0x012B
    0109 3044      CPI	R20,4
    010A E0E0      LDI	R30,0
    010B 075E      CPC	R21,R30
    010C F109      BEQ	0x012E
    010D 3045      CPI	R20,5
    010E E0E0      LDI	R30,0
    010F 075E      CPC	R21,R30
    0110 F101      BEQ	0x0131
    0111 3046      CPI	R20,6
    0112 E0E0      LDI	R30,0
    0113 075E      CPC	R21,R30

⌨️ 快捷键说明

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