📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\avr\开发板\source\INFRARED\infrared_measure\main.c
0000 .dbfunc e delay_us _delay_us fV
0000 ; i -> R20,R21
0000 ; n -> R16,R17
.even
0000 _delay_us::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 20
0002 ; /******************************************/
0002 ; /* 北京MCU学习之家 */
0002 ; /* 采集红外输入数据的高低电平保持时间程序 */
0002 ; /* 作者:白如冰 */
0002 ; /* 2005年10月1日 */
0002 ; /* 目标MCU:MEGA8 晶振:外部(EXT) 8MHZ */
0002 ; /******************************************/
0002 ; // 1、使用WIN9X/WIN2000/XP的超级终端,进行通信调试。
0002 ; // 2、通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。
0002 ; // 3、输出高低电平的保持时间,单位是微秒。
0002 ; #include <iom8v.h>
0002 ; #include "infrared_measure.h"
0002 ; #define fosc 8000000 //晶振8MHZ
0002 ; #define baud 9600 //波特率
0002 ;
0002 ; extern void init_infr(void);
0002 ; unsigned char uia_data[5]; //5位ASC码存储区
0002 ;
0002 ; void delay_us(unsigned int n)
0002 ; {
0002 .dbline 22
0002 A801 movw R20,R16
0004 02C0 rjmp L5
0006 L2:
0006 .dbline 22
0006 L3:
0006 .dbline 22
0006 4150 subi R20,1
0008 5040 sbci R21,0
000A L5:
000A .dbline 22
000A ; unsigned int i;
000A ; for(i=n;i>0;i--);
000A 4030 cpi R20,0
000C 4507 cpc R20,R21
000E D9F7 brne L2
0010 X0:
0010 .dbline -2
0010 .dbline 23
0010 ; }
0010 L1:
0010 00D0 rcall pop_gset1
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 20 i
0014 .dbsym r n 16 i
0014 .dbend
0014 .dbfunc e delay_1ms _delay_1ms fV
0014 ; i -> R16,R17
.even
0014 _delay_1ms::
0014 .dbline -1
0014 .dbline 26
0014 ;
0014 ; void delay_1ms(void)
0014 ; { unsigned int i;
0014 .dbline 27
0014 ; for(i=1;i<(unsigned int)(1144-2);i++)
0014 01E0 ldi R16,1
0016 10E0 ldi R17,0
0018 02C0 rjmp L10
001A L7:
001A .dbline 28
001A L8:
001A .dbline 27
001A 0F5F subi R16,255 ; offset = 1
001C 1F4F sbci R17,255
001E L10:
001E .dbline 27
001E 0637 cpi R16,118
0020 E4E0 ldi R30,4
0022 1E07 cpc R17,R30
0024 D0F3 brlo L7
0026 .dbline -2
0026 .dbline 29
0026 ; ;
0026 ; }
0026 L6:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r i 16 i
0028 .dbend
0028 .dbfunc e delay_ms _delay_ms fV
0028 ; i -> R20,R21
0028 ; n -> R22,R23
.even
0028 _delay_ms::
0028 00D0 rcall push_gset2
002A B801 movw R22,R16
002C .dbline -1
002C .dbline 31
002C ; void delay_ms(unsigned int n)
002C ; {
002C .dbline 32
002C ; unsigned int i=0;
002C 4427 clr R20
002E 5527 clr R21
0030 03C0 rjmp L13
0032 L12:
0032 .dbline 34
0032 .dbline 34
0032 F0DF rcall _delay_1ms
0034 .dbline 35
0034 4F5F subi R20,255 ; offset = 1
0036 5F4F sbci R21,255
0038 .dbline 36
0038 L13:
0038 .dbline 33
0038 ; while(i<n)
0038 4617 cp R20,R22
003A 5707 cpc R21,R23
003C D0F3 brlo L12
003E .dbline -2
003E .dbline 37
003E ; {delay_1ms();
003E ; i++;
003E ; }
003E ; }
003E L11:
003E 00D0 rcall pop_gset2
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r i 20 i
0042 .dbsym r n 22 i
0042 .dbend
0042 .dbfunc e uint_asc _uint_asc fpc
0042 ; temp -> R22,R23
0042 ; uia -> R20,R21
0042 ; data -> R10,R11
.even
0042 _uint_asc::
0042 00D0 rcall push_gset3
0044 5801 movw R10,R16
0046 .dbline -1
0046 .dbline 40
0046 ;
0046 ; unsigned char *uint_asc(unsigned int data) //字转换为5位ASC码
0046 ; {
0046 .dbline 43
0046 ; unsigned char *uia;
0046 ; unsigned int temp;
0046 ; uia=uia_data;
0046 40E0 ldi R20,<_uia_data
0048 50E0 ldi R21,>_uia_data
004A .dbline 45
004A ;
004A ; temp=data;
004A B501 movw R22,R10
004C .dbline 46
004C ; uia+=4;
004C 4C5F subi R20,252 ; offset = 4
004E 5F4F sbci R21,255
0050 .dbline 47
0050 ; *uia--=temp%10+0x30;
0050 1A01 movw R2,R20
0052 4150 subi R20,1
0054 5040 sbci R21,0
0056 2AE0 ldi R18,10
0058 30E0 ldi R19,0
005A 8B01 movw R16,R22
005C 00D0 rcall mod16u
005E C801 movw R24,R16
0060 C096 adiw R24,48
0062 F101 movw R30,R2
0064 8083 std z+0,R24
0066 .dbline 48
0066 ; temp=data;
0066 .dbline 49
0066 ; *uia--=(temp/10)%10+0x30;
0066 1A01 movw R2,R20
0068 4150 subi R20,1
006A 5040 sbci R21,0
006C 2AE0 ldi R18,10
006E 30E0 ldi R19,0
0070 8B01 movw R16,R22
0072 00D0 rcall div16u
0074 2AE0 ldi R18,10
0076 30E0 ldi R19,0
0078 00D0 rcall mod16u
007A C801 movw R24,R16
007C C096 adiw R24,48
007E F101 movw R30,R2
0080 8083 std z+0,R24
0082 .dbline 50
0082 ; temp=data;
0082 .dbline 51
0082 ; *uia--=(temp/100)%10+0x30;
0082 1A01 movw R2,R20
0084 4150 subi R20,1
0086 5040 sbci R21,0
0088 24E6 ldi R18,100
008A 30E0 ldi R19,0
008C 8B01 movw R16,R22
008E 00D0 rcall div16u
0090 2AE0 ldi R18,10
0092 30E0 ldi R19,0
0094 00D0 rcall mod16u
0096 C801 movw R24,R16
0098 C096 adiw R24,48
009A F101 movw R30,R2
009C 8083 std z+0,R24
009E .dbline 52
009E ; temp=data;
009E .dbline 53
009E ; *uia--=(temp/1000)%10+0x30;
009E 1A01 movw R2,R20
00A0 4150 subi R20,1
00A2 5040 sbci R21,0
00A4 28EE ldi R18,1000
00A6 33E0 ldi R19,3
00A8 8B01 movw R16,R22
00AA 00D0 rcall div16u
00AC 2AE0 ldi R18,10
00AE 30E0 ldi R19,0
00B0 00D0 rcall mod16u
00B2 C801 movw R24,R16
00B4 C096 adiw R24,48
00B6 F101 movw R30,R2
00B8 8083 std z+0,R24
00BA .dbline 54
00BA ; *uia=temp/10000+0x30;
00BA 20E1 ldi R18,10000
00BC 37E2 ldi R19,39
00BE 8B01 movw R16,R22
00C0 00D0 rcall div16u
00C2 C801 movw R24,R16
00C4 C096 adiw R24,48
00C6 FA01 movw R30,R20
00C8 8083 std z+0,R24
00CA .dbline 55
00CA ; uia=uia_data;
00CA 40E0 ldi R20,<_uia_data
00CC 50E0 ldi R21,>_uia_data
00CE .dbline 56
00CE ; return(uia);
00CE 8A01 movw R16,R20
00D0 .dbline -2
00D0 L15:
00D0 00D0 rcall pop_gset3
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym r temp 22 i
00D4 .dbsym r uia 20 pc
00D4 .dbsym r data 10 i
00D4 .dbend
00D4 .dbfunc e putchar _putchar fV
00D4 ; c -> R16
.even
00D4 _putchar::
00D4 .dbline -1
00D4 .dbline 61
00D4 ; }
00D4 ;
00D4 ; /* 字符输出函数 */
00D4 ; void putchar(unsigned char c)
00D4 ; {
00D4 L17:
00D4 .dbline 62
00D4 L18:
00D4 .dbline 62
00D4 ; while (!(UCSRA&(1<<UDRE)));
00D4 5D9B sbis 0xb,5
00D6 FECF rjmp L17
00D8 .dbline 63
00D8 ; UDR=c;
00D8 0CB9 out 0xc,R16
00DA .dbline -2
00DA .dbline 64
00DA ; }
00DA L16:
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbsym r c 16 c
00DC .dbend
00DC .dbfunc e puts _puts fI
00DC ; s -> R20,R21
.even
00DC _puts::
00DC 00D0 rcall push_gset1
00DE A801 movw R20,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -