📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile D:\开发板\source\infrared\infrared_test\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 22
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 ;
0002 ; #include <iom8v.h>
0002 ; #include <macros.h>
0002 ; #include "infrared_test.h"
0002 ; #define fosc 8000000 //晶振8MHZ
0002 ; #define baud 9600 //波特率
0002 ; #define buffer_max 75
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 24
0002 A801 movw R20,R16
0004 02C0 rjmp L5
0006 L2:
0006 .dbline 24
0006 L3:
0006 .dbline 24
0006 4150 subi R20,1
0008 5040 sbci R21,0
000A L5:
000A .dbline 24
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 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 28
0014 ; }
0014 ;
0014 ; void delay_1ms(void)
0014 ; { unsigned int i;
0014 .dbline 29
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 30
001A L8:
001A .dbline 29
001A 0F5F subi R16,255 ; offset = 1
001C 1F4F sbci R17,255
001E L10:
001E .dbline 29
001E 0637 cpi R16,118
0020 E4E0 ldi R30,4
0022 1E07 cpc R17,R30
0024 D0F3 brlo L7
0026 .dbline -2
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 33
002C ; ;
002C ; }
002C ; void delay_ms(unsigned int n)
002C ; {
002C .dbline 34
002C ; unsigned int i=0;
002C 4427 clr R20
002E 5527 clr R21
0030 03C0 rjmp L13
0032 L12:
0032 .dbline 36
0032 .dbline 36
0032 F0DF rcall _delay_1ms
0034 .dbline 37
0034 4F5F subi R20,255 ; offset = 1
0036 5F4F sbci R21,255
0038 .dbline 38
0038 L13:
0038 .dbline 35
0038 ; while(i<n)
0038 4617 cp R20,R22
003A 5707 cpc R21,R23
003C D0F3 brlo L12
003E .dbline -2
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 42
0046 ; {delay_1ms();
0046 ; i++;
0046 ; }
0046 ; }
0046 ;
0046 ; unsigned char *uint_asc(unsigned int data) //字转换为5位ASC码
0046 ; {
0046 .dbline 45
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 47
004A ;
004A ; temp=data;
004A B501 movw R22,R10
004C .dbline 48
004C ; uia+=4;
004C 4C5F subi R20,252 ; offset = 4
004E 5F4F sbci R21,255
0050 .dbline 49
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 50
0066 ; temp=data;
0066 .dbline 51
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 52
0082 ; temp=data;
0082 .dbline 53
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 54
009E ; temp=data;
009E .dbline 55
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 56
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 57
00CA ; uia=uia_data;
00CA 40E0 ldi R20,<_uia_data
00CC 50E0 ldi R21,>_uia_data
00CE .dbline 58
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 63
00D4 ; }
00D4 ;
00D4 ; /* 字符输出函数 */
00D4 ; void putchar(unsigned char c)
00D4 ; {
00D4 L17:
00D4 .dbline 64
00D4 L18:
00D4 .dbline 64
00D4 ; while (!(UCSRA&(1<<UDRE)));
00D4 5D9B sbis 0xb,5
00D6 FECF rjmp L17
00D8 .dbline 65
00D8 ; UDR=c;
00D8 0CB9 out 0xc,R16
00DA .dbline -2
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
00E0 .dbline -1
00E0 .dbline 70
00E0 ; }
00E0 ;
00E0 ; /* 字符串输出函数 */
00E0 ; int puts(char *s)
00E0 ; {
00E0 05C0 rjmp L22
00E2 L21:
00E2 .dbline 72
00E2 .dbline 73
00E2 FA01 movw R30,R20
00E4 0081 ldd R16,z+0
00E6 F6DF rcall _putchar
00E8 .dbline 74
00E8 4F5F subi R20,255 ; offset = 1
00EA 5F4F sbci R21,255
00EC .dbline 75
00EC L22:
00EC .dbline 71
00EC ; while (*s)
00EC FA01 movw R30,R20
00EE 2080 ldd R2,z+0
00F0 2220 tst R2
00F2 B9F7 brne L21
00F4 .dbline 76
00F4 ; {
00F4 ; putchar(*s);
00F4 ; s++;
00F4 ; }
00F4 ; return 1;
00F4 01E0 ldi R16,1
00F6 10E0 ldi R17,0
00F8 .dbline -2
00F8 L20:
00F8 00D0 rcall pop_gset1
00FA .dbline 0 ; func end
00FA 0895 ret
00FC .dbsym r s 20 pc
00FC .dbend
00FC .dbfunc e puts_hh _puts_hh fV
00FC ; s -> R20,R21
.even
00FC _puts_hh::
00FC 00D0 rcall push_gset1
00FE A801 movw R20,R16
0100 .dbline -1
0100 .dbline 80
0100 ; }
0100 ; /* 含回车换行的字符串输出函数 */
0100 ; void puts_hh(char *s)
0100 ; {
0100 05C0 rjmp L26
0102 L25:
0102 .dbline 82
0102 .dbline 83
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -