📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile E:\avr\开发板\source\INFRARED\infrared_measure\main.c
.dbfunc e delay_us _delay_us fV
; i -> R20,R21
; n -> R16,R17
.even
_delay_us::
rcall push_gset1
.dbline -1
.dbline 20
; /******************************************/
; /* 北京MCU学习之家 */
; /* 采集红外输入数据的高低电平保持时间程序 */
; /* 作者:白如冰 */
; /* 2005年10月1日 */
; /* 目标MCU:MEGA8 晶振:外部(EXT) 8MHZ */
; /******************************************/
; // 1、使用WIN9X/WIN2000/XP的超级终端,进行通信调试。
; // 2、通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。
; // 3、输出高低电平的保持时间,单位是微秒。
; #include <iom8v.h>
; #include "infrared_measure.h"
; #define fosc 8000000 //晶振8MHZ
; #define baud 9600 //波特率
;
; extern void init_infr(void);
; unsigned char uia_data[5]; //5位ASC码存储区
;
; void delay_us(unsigned int n)
; {
.dbline 22
movw R20,R16
rjmp L5
L2:
.dbline 22
L3:
.dbline 22
subi R20,1
sbci R21,0
L5:
.dbline 22
; unsigned int i;
; for(i=n;i>0;i--);
cpi R20,0
cpc R20,R21
brne L2
X0:
.dbline -2
.dbline 23
; }
L1:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 16 i
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 26
;
; void delay_1ms(void)
; { unsigned int i;
.dbline 27
; for(i=1;i<(unsigned int)(1144-2);i++)
ldi R16,1
ldi R17,0
rjmp L10
L7:
.dbline 28
L8:
.dbline 27
subi R16,255 ; offset = 1
sbci R17,255
L10:
.dbline 27
cpi R16,118
ldi R30,4
cpc R17,R30
brlo L7
.dbline -2
.dbline 29
; ;
; }
L6:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_ms _delay_ms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_ms::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 31
; void delay_ms(unsigned int n)
; {
.dbline 32
; unsigned int i=0;
clr R20
clr R21
rjmp L13
L12:
.dbline 34
.dbline 34
rcall _delay_1ms
.dbline 35
subi R20,255 ; offset = 1
sbci R21,255
.dbline 36
L13:
.dbline 33
; while(i<n)
cp R20,R22
cpc R21,R23
brlo L12
.dbline -2
.dbline 37
; {delay_1ms();
; i++;
; }
; }
L11:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e uint_asc _uint_asc fpc
; temp -> R22,R23
; uia -> R20,R21
; data -> R10,R11
.even
_uint_asc::
rcall push_gset3
movw R10,R16
.dbline -1
.dbline 40
;
; unsigned char *uint_asc(unsigned int data) //字转换为5位ASC码
; {
.dbline 43
; unsigned char *uia;
; unsigned int temp;
; uia=uia_data;
ldi R20,<_uia_data
ldi R21,>_uia_data
.dbline 45
;
; temp=data;
movw R22,R10
.dbline 46
; uia+=4;
subi R20,252 ; offset = 4
sbci R21,255
.dbline 47
; *uia--=temp%10+0x30;
movw R2,R20
subi R20,1
sbci R21,0
ldi R18,10
ldi R19,0
movw R16,R22
rcall mod16u
movw R24,R16
adiw R24,48
movw R30,R2
std z+0,R24
.dbline 48
; temp=data;
.dbline 49
; *uia--=(temp/10)%10+0x30;
movw R2,R20
subi R20,1
sbci R21,0
ldi R18,10
ldi R19,0
movw R16,R22
rcall div16u
ldi R18,10
ldi R19,0
rcall mod16u
movw R24,R16
adiw R24,48
movw R30,R2
std z+0,R24
.dbline 50
; temp=data;
.dbline 51
; *uia--=(temp/100)%10+0x30;
movw R2,R20
subi R20,1
sbci R21,0
ldi R18,100
ldi R19,0
movw R16,R22
rcall div16u
ldi R18,10
ldi R19,0
rcall mod16u
movw R24,R16
adiw R24,48
movw R30,R2
std z+0,R24
.dbline 52
; temp=data;
.dbline 53
; *uia--=(temp/1000)%10+0x30;
movw R2,R20
subi R20,1
sbci R21,0
ldi R18,1000
ldi R19,3
movw R16,R22
rcall div16u
ldi R18,10
ldi R19,0
rcall mod16u
movw R24,R16
adiw R24,48
movw R30,R2
std z+0,R24
.dbline 54
; *uia=temp/10000+0x30;
ldi R18,10000
ldi R19,39
movw R16,R22
rcall div16u
movw R24,R16
adiw R24,48
movw R30,R20
std z+0,R24
.dbline 55
; uia=uia_data;
ldi R20,<_uia_data
ldi R21,>_uia_data
.dbline 56
; return(uia);
movw R16,R20
.dbline -2
L15:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp 22 i
.dbsym r uia 20 pc
.dbsym r data 10 i
.dbend
.dbfunc e putchar _putchar fV
; c -> R16
.even
_putchar::
.dbline -1
.dbline 61
; }
;
; /* 字符输出函数 */
; void putchar(unsigned char c)
; {
L17:
.dbline 62
L18:
.dbline 62
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L17
.dbline 63
; UDR=c;
out 0xc,R16
.dbline -2
.dbline 64
; }
L16:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e puts _puts fI
; s -> R20,R21
.even
_puts::
rcall push_gset1
movw R20,R16
.dbline -1
.dbline 68
;
; /* 字符串输出函数 */
; int puts(char *s)
; {
rjmp L22
L21:
.dbline 70
.dbline 71
movw R30,R20
ldd R16,z+0
rcall _putchar
.dbline 72
subi R20,255 ; offset = 1
sbci R21,255
.dbline 73
L22:
.dbline 69
; while (*s)
movw R30,R20
ldd R2,z+0
tst R2
brne L21
.dbline 74
; {
; putchar(*s);
; s++;
; }
; return 1;
ldi R16,1
ldi R17,0
.dbline -2
L20:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r s 20 pc
.dbend
.dbfunc e puts_hh _puts_hh fV
; s -> R20,R21
.even
_puts_hh::
rcall push_gset1
movw R20,R16
.dbline -1
.dbline 78
; }
; /* 含回车换行的字符串输出函数 */
; void puts_hh(char *s)
; {
rjmp L26
L25:
.dbline 80
.dbline 81
movw R30,R20
ldd R16,z+0
rcall _putchar
.dbline 82
subi R20,255 ; offset = 1
sbci R21,255
.dbline 83
L26:
.dbline 79
; while (*s)
movw R30,R20
ldd R2,z+0
tst R2
brne L25
.dbline 84
; {
; putchar(*s);
; s++;
; }
; putchar(0x0a);//换行
ldi R16,10
rcall _putchar
.dbline 85
; putchar(0x0d);//回车
ldi R16,13
rcall _putchar
.dbline -2
.dbline 86
; }
L24:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r s 20 pc
.dbend
.dbfunc e uart_init _uart_init fV
.even
_uart_init::
.dbline -1
.dbline 89
; /* UART初始化 */
; void uart_init(void)
; {
.dbline 90
; UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
ldi R24,24
out 0xa,R24
.dbline 91
; UBRRL=(fosc/16/(baud+1))%256;
ldi R24,52
out 0x9,R24
.dbline 92
; UBRRH=(fosc/16/(baud+1))/256;
clr R2
out 0x20,R2
.dbline 93
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位停止位
ldi R24,134
out 0x20,R24
.dbline -2
.dbline 94
; }
L28:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; p -> R22,R23
; i -> R20
.even
_main::
.dbline -1
.dbline 97
;
; void main(void)
; {
.dbline 100
;
; unsigned char i,*p;
; uart_init();
rcall _uart_init
.dbline 101
; init_infr();
rcall _init_infr
rjmp L31
L30:
.dbline 107
;
;
;
;
; while(1)
; {
.dbline 108
; delay_ms(2000);
ldi R16,2000
ldi R17,7
rcall _delay_ms
.dbline 109
; for(i=0;i<100;i++)
clr R20
rjmp L36
L33:
.dbline 110
.dbline 111
ldi R24,2
mul R24,R20
movw R30,R0
ldi R24,<_counter_buffer
ldi R25,>_counter_buffer
add R30,R24
adc R31,R25
ldd R16,z+0
ldd R17,z+1
rcall _uint_asc
movw R22,R16
.dbline 112
movw R30,R22
ld R16,Z+
movw R22,R30
rcall _putchar
.dbline 113
movw R30,R22
ld R16,Z+
movw R22,R30
rcall _putchar
.dbline 114
movw R30,R22
ld R16,Z+
movw R22,R30
rcall _putchar
.dbline 115
movw R30,R22
ld R16,Z+
movw R22,R30
rcall _putchar
.dbline 116
movw R30,R22
ld R16,Z+
movw R22,R30
rcall _putchar
.dbline 118
ldi R16,<L37
ldi R17,>L37
rcall _puts
.dbline 119
L34:
.dbline 109
inc R20
L36:
.dbline 109
cpi R20,100
brsh X2
rjmp L33
X2:
.dbline 120
; {
; p=uint_asc(counter_buffer[i]);
; putchar(*p++);
; putchar(*p++);
; putchar(*p++);
; putchar(*p++);
; putchar(*p++);
;
; puts(" ");
; }
; for(i=0;i<100;i++)
clr R20
rjmp L41
L38:
.dbline 121
ldi R24,2
mul R24,R20
movw R30,R0
ldi R24,<_counter_buffer
ldi R25,>_counter_buffer
add R30,R24
adc R31,R25
clr R2
clr R3
std z+1,R3
std z+0,R2
L39:
.dbline 120
inc R20
L41:
.dbline 120
cpi R20,100
brlo L38
.dbline 122
clr R2
sts _n,R2
.dbline 123
sts _flag_start,R2
.dbline 124
out 0x2e,R2
.dbline 125
clr R3
out 0x2d,R3
out 0x2c,R2
.dbline 127
L31:
.dbline 106
rjmp L30
X1:
.dbline -2
.dbline 128
; counter_buffer[i]=0;
; n=0;
; flag_start=0;
; TCCR1B=0;
; TCNT1=0;
;
; }
; }
L29:
.dbline 0 ; func end
ret
.dbsym r p 22 pc
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\avr\开发板\source\INFRARED\infrared_measure\main.c
_uia_data::
.blkb 5
.dbsym e uia_data _uia_data A[5:5]c
.area data(ram, con, rel)
.dbfile E:\avr\开发板\source\INFRARED\infrared_measure\main.c
L37:
.blkb 6
.area idata
.byte 32,32,32,32,32,0
.area data(ram, con, rel)
.dbfile E:\avr\开发板\source\INFRARED\infrared_measure\main.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -