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

📄 infrared_measure.lst

📁 AVR 红外接收源代码,对学习红外的人很有帮助
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    0016 E5CF      LDI	R28,0x5F
    0017 E0D4      LDI	R29,4
    0018 BFCD      OUT	0x3D,R28
    0019 BFDE      OUT	0x3E,R29
    001A 51C0      SUBI	R28,0x10
    001B 40D0      SBCI	R29,0
    001C EA0A      LDI	R16,0xAA
    001D 8308      STD	Y+0,R16
    001E 2400      CLR	R0
    001F E6E6      LDI	R30,0x66
    0020 E0F0      LDI	R31,0
    0021 E011      LDI	R17,1
    0022 33E5      CPI	R30,0x35
    0023 07F1      CPC	R31,R17
    0024 F011      BEQ	0x0027
    0025 9201      ST	R0,Z+
    0026 CFFB      RJMP	0x0022
    0027 8300      STD	Z+0,R16
    0028 E2E6      LDI	R30,0x26
    0029 E0F0      LDI	R31,0
    002A E6A0      LDI	R26,0x60
    002B E0B0      LDI	R27,0
    002C E010      LDI	R17,0
    002D 32EC      CPI	R30,0x2C
    002E 07F1      CPC	R31,R17
    002F F021      BEQ	0x0034
    0030 95C8      LPM
    0031 9631      ADIW	R30,1
    0032 920D      ST	R0,X+
    0033 CFF9      RJMP	0x002D
    0034 D09A      RCALL	_main
_exit:
    0035 CFFF      RJMP	_exit
_delay_us:
  i                    --> R20
  n                    --> R16
    0036 D171      RCALL	push_gset1
FILE: E:\avr\开发板\source\INFRARED\infrared_measure\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) //  3、输出高低电平的保持时间,单位是微秒。
(0011) #include <iom8v.h>
(0012) #include "infrared_measure.h"
(0013) #define fosc 8000000 //晶振8MHZ
(0014) #define baud 9600	 //波特率
(0015) 
(0016) extern void init_infr(void);
(0017) unsigned char uia_data[5];  //5位ASC码存储区
(0018) 
(0019) void delay_us(unsigned int n)
(0020) {
(0021)   unsigned int i;
(0022)   for(i=n;i>0;i--);
    0037 01A8      MOVW	R20,R16
    0038 C002      RJMP	0x003B
    0039 5041      SUBI	R20,1
    003A 4050      SBCI	R21,0
    003B 3040      CPI	R20,0
    003C 0745      CPC	R20,R21
    003D F7D9      BNE	0x0039
(0023)   }
    003E D16C      RCALL	pop_gset1
    003F 9508      RET
(0024)   
(0025) void delay_1ms(void)
(0026) { unsigned int i;
(0027)  for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
  i                    --> R16
    0040 E001      LDI	R16,1
    0041 E010      LDI	R17,0
    0042 C002      RJMP	0x0045
    0043 5F0F      SUBI	R16,0xFF
    0044 4F1F      SBCI	R17,0xFF
    0045 3706      CPI	R16,0x76
    0046 E0E4      LDI	R30,4
    0047 071E      CPC	R17,R30
    0048 F3D0      BCS	0x0043
(0028)     ;
(0029) }
    0049 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    004A D174      RCALL	push_gset2
    004B 01B8      MOVW	R22,R16
(0030) void delay_ms(unsigned int n)
(0031) {
(0032)  unsigned int i=0;
    004C 2744      CLR	R20
    004D 2755      CLR	R21
    004E C003      RJMP	0x0052
(0033)    while(i<n)
(0034)    {delay_1ms();
    004F DFF0      RCALL	_delay_1ms
(0035)     i++;
    0050 5F4F      SUBI	R20,0xFF
    0051 4F5F      SBCI	R21,0xFF
    0052 1746      CP	R20,R22
    0053 0757      CPC	R21,R23
    0054 F3D0      BCS	0x004F
(0036)    }
(0037) }  													
    0055 D14E      RCALL	pop_gset2
    0056 9508      RET
_uint_asc:
  temp                 --> R22
  uia                  --> R20
  data                 --> R10
    0057 D16A      RCALL	push_gset3
    0058 0158      MOVW	R10,R16
(0038) 
(0039) unsigned char *uint_asc(unsigned int data)  //字转换为5位ASC码
(0040) {
(0041)   unsigned char *uia;
(0042)   unsigned int temp;
(0043)   uia=uia_data;
    0059 E646      LDI	R20,0x66
    005A E050      LDI	R21,0
(0044)   
(0045)   temp=data;
    005B 01B5      MOVW	R22,R10
(0046)   uia+=4;
    005C 5F4C      SUBI	R20,0xFC
    005D 4F5F      SBCI	R21,0xFF
(0047)   *uia--=temp%10+0x30;
    005E 011A      MOVW	R2,R20
    005F 5041      SUBI	R20,1
    0060 4050      SBCI	R21,0
    0061 E02A      LDI	R18,0xA
    0062 E030      LDI	R19,0
    0063 018B      MOVW	R16,R22
    0064 D113      RCALL	mod16u
    0065 01C8      MOVW	R24,R16
    0066 96C0      ADIW	R24,0x30
    0067 01F1      MOVW	R30,R2
    0068 8380      STD	Z+0,R24
(0048)   temp=data;
(0049)   *uia--=(temp/10)%10+0x30;
    0069 011A      MOVW	R2,R20
    006A 5041      SUBI	R20,1
    006B 4050      SBCI	R21,0
    006C E02A      LDI	R18,0xA
    006D E030      LDI	R19,0
    006E 018B      MOVW	R16,R22
    006F D10A      RCALL	div16u
    0070 E02A      LDI	R18,0xA
    0071 E030      LDI	R19,0
    0072 D105      RCALL	mod16u
    0073 01C8      MOVW	R24,R16
    0074 96C0      ADIW	R24,0x30
    0075 01F1      MOVW	R30,R2
    0076 8380      STD	Z+0,R24
(0050)   temp=data;
(0051)   *uia--=(temp/100)%10+0x30;
    0077 011A      MOVW	R2,R20
    0078 5041      SUBI	R20,1
    0079 4050      SBCI	R21,0
    007A E624      LDI	R18,0x64
    007B E030      LDI	R19,0
    007C 018B      MOVW	R16,R22
    007D D0FC      RCALL	div16u
    007E E02A      LDI	R18,0xA
    007F E030      LDI	R19,0
    0080 D0F7      RCALL	mod16u
    0081 01C8      MOVW	R24,R16
    0082 96C0      ADIW	R24,0x30
    0083 01F1      MOVW	R30,R2
    0084 8380      STD	Z+0,R24
(0052)   temp=data;
(0053)   *uia--=(temp/1000)%10+0x30;
    0085 011A      MOVW	R2,R20
    0086 5041      SUBI	R20,1
    0087 4050      SBCI	R21,0
    0088 EE28      LDI	R18,0xE8
    0089 E033      LDI	R19,3
    008A 018B      MOVW	R16,R22
    008B D0EE      RCALL	div16u
    008C E02A      LDI	R18,0xA
    008D E030      LDI	R19,0
    008E D0E9      RCALL	mod16u
    008F 01C8      MOVW	R24,R16
    0090 96C0      ADIW	R24,0x30
    0091 01F1      MOVW	R30,R2
    0092 8380      STD	Z+0,R24
(0054)   *uia=temp/10000+0x30;
    0093 E120      LDI	R18,0x10
    0094 E237      LDI	R19,0x27
    0095 018B      MOVW	R16,R22
    0096 D0E3      RCALL	div16u
    0097 01C8      MOVW	R24,R16
    0098 96C0      ADIW	R24,0x30
    0099 01FA      MOVW	R30,R20
    009A 8380      STD	Z+0,R24
(0055)   uia=uia_data;
    009B E646      LDI	R20,0x66
    009C E050      LDI	R21,0
(0056)   return(uia);
    009D 018A      MOVW	R16,R20
    009E D107      RCALL	pop_gset3
    009F 9508      RET
(0057) }
(0058) 
(0059) /*  		字符输出函数 		 */
(0060) void putchar(unsigned char c)
(0061) 	{	 
(0062)      while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    00A0 9B5D      SBIS	0x0B,5
    00A1 CFFE      RJMP	_putchar
(0063) 	 UDR=c;    
    00A2 B90C      OUT	0x0C,R16
(0064) 	}
    00A3 9508      RET
_puts:
  s                    --> R20
    00A4 D103      RCALL	push_gset1
    00A5 01A8      MOVW	R20,R16
(0065) 
(0066) /*			字符串输出函数	   	 */	
(0067) int puts(char *s)
(0068) 	{
    00A6 C005      RJMP	0x00AC
(0069) 	while (*s)
(0070) 		{
(0071) 		putchar(*s);
    00A7 01FA      MOVW	R30,R20
    00A8 8100      LDD	R16,Z+0
    00A9 DFF6      RCALL	_putchar
(0072) 		s++;
    00AA 5F4F      SUBI	R20,0xFF
    00AB 4F5F      SBCI	R21,0xFF
    00AC 01FA      MOVW	R30,R20
    00AD 8020      LDD	R2,Z+0
    00AE 2022      TST	R2
    00AF F7B9      BNE	0x00A7
(0073) 		}	
(0074)     	return 1;
    00B0 E001      LDI	R16,1
    00B1 E010      LDI	R17,0
    00B2 D0F8      RCALL	pop_gset1
    00B3 9508      RET
_puts_hh:
  s                    --> R20
    00B4 D0F3      RCALL	push_gset1
    00B5 01A8      MOVW	R20,R16
(0075) 	}
(0076) /*	 	   含回车换行的字符串输出函数 	 */	
(0077) void puts_hh(char *s)
(0078) 	{
    00B6 C005      RJMP	0x00BC
(0079) 	while (*s)
(0080) 		{
(0081) 		putchar(*s);
    00B7 01FA      MOVW	R30,R20
    00B8 8100      LDD	R16,Z+0
    00B9 DFE6      RCALL	_putchar
(0082) 		s++;
    00BA 5F4F      SUBI	R20,0xFF
    00BB 4F5F      SBCI	R21,0xFF
    00BC 01FA      MOVW	R30,R20
    00BD 8020      LDD	R2,Z+0
    00BE 2022      TST	R2
    00BF F7B9      BNE	0x00B7
(0083) 		}	
(0084)     putchar(0x0a);//换行
    00C0 E00A      LDI	R16,0xA
    00C1 DFDE      RCALL	_putchar
(0085) 	putchar(0x0d);//回车
    00C2 E00D      LDI	R16,0xD
    00C3 DFDC      RCALL	_putchar
(0086) 	}	
    00C4 D0E6      RCALL	pop_gset1
    00C5 9508      RET
(0087) /*			UART初始化				*/	
(0088) void uart_init(void)
(0089) {
(0090)  UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
_uart_init:
    00C6 E188      LDI	R24,0x18
    00C7 B98A      OUT	0x0A,R24
(0091)  UBRRL=(fosc/16/(baud+1))%256;
    00C8 E384      LDI	R24,0x34
    00C9 B989      OUT	0x09,R24
(0092)  UBRRH=(fosc/16/(baud+1))/256;
    00CA 2422      CLR	R2
    00CB BC20      OUT	0x20,R2
(0093)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位停止位
    00CC E886      LDI	R24,0x86
    00CD BD80      OUT	0x20,R24
(0094) }
    00CE 9508      RET
(0095) 
(0096) void main(void)
(0097) {
(0098)  
(0099)   unsigned char i,*p;
(0100)   uart_init();
_main:
  p                    --> R22
  i                    --> R20
    00CF DFF6      RCALL	_uart_init
(0101)   init_infr();
    00D0 D047      RCALL	_init_infr
    00D1 C044      RJMP	0x0116
(0102)   
(0103)  
(0104)  
(0105)   
(0106)    while(1)
(0107)    {
(0108)    		   delay_ms(2000);
    00D2 ED00      LDI	R16,0xD0
    00D3 E017      LDI	R17,7
    00D4 DF75      RCALL	_delay_ms
(0109)   		   for(i=0;i<100;i++)
    00D5 2744      CLR	R20
    00D6 C023      RJMP	0x00FA

⌨️ 快捷键说明

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