📄 usart_scan.lis
字号:
.module usart_scan.c
.area text(rom, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\USART\USART_Scan\usart_scan.c
0000 .dbfunc e putchar _putchar fV
0000 ; c -> R16
.even
0000 _putchar::
0000 .dbline -1
0000 .dbline 17
0000 ; /******************************************/
0000 ; //文件名:usart_scan.c
0000 ; //功能: 扫描式串口通信的应用
0000 ; //作者: young
0000 ; //时间: 2006.11.16
0000 ; //目标MCU:ATmega8
0000 ; //晶振: 8MHZ
0000 ; /******************************************/
0000 ; //通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。
0000 ;
0000 ; #include <iom8v.h>
0000 ; #define fosc 8000000 //晶振8MHZ
0000 ; #define baud 9600 //波特率
0000 ;
0000 ; //字符输出函数
0000 ; void putchar(unsigned char c)
0000 ; {
0000 L2:
0000 .dbline 19
0000 L3:
0000 .dbline 19
0000 ; //等待写入UDR的字符被送到发送移位寄存器
0000 ; while (!(UCSRA&(1<<UDRE)));
0000 5D9B sbis 0xb,5
0002 FECF rjmp L2
0004 .dbline 20
0004 ; UDR=c;
0004 0CB9 out 0xc,R16
0006 .dbline -2
0006 .dbline 21
0006 ; }
0006 L1:
0006 .dbline 0 ; func end
0006 0895 ret
0008 .dbsym r c 16 c
0008 .dbend
0008 .dbfunc e getchar _getchar fc
.even
0008 _getchar::
0008 .dbline -1
0008 .dbline 25
0008 ;
0008 ; //字符输入函数
0008 ; unsigned char getchar(void)
0008 ; {
0008 L6:
0008 .dbline 27
0008 L7:
0008 .dbline 27
0008 ; //等待接收字符
0008 ; while(!(UCSRA&(1<<RXC)));
0008 5F9B sbis 0xb,7
000A FECF rjmp L6
000C .dbline 28
000C ; return UDR;
000C 0CB1 in R16,0xc
000E .dbline -2
000E L5:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e puts _puts fI
0010 ; s -> R20,R21
.even
0010 _puts::
0010 00D0 rcall push_gset1
0012 A801 movw R20,R16
0014 .dbline -1
0014 .dbline 33
0014 ; }
0014 ;
0014 ; //字符串输出函数
0014 ; int puts(char *s)
0014 ; {
0014 05C0 rjmp L11
0016 L10:
0016 .dbline 35
0016 .dbline 36
0016 FA01 movw R30,R20
0018 0081 ldd R16,z+0
001A F2DF rcall _putchar
001C .dbline 37
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 .dbline 38
0020 L11:
0020 .dbline 34
0020 ; while (*s)
0020 FA01 movw R30,R20
0022 2080 ldd R2,z+0
0024 2220 tst R2
0026 B9F7 brne L10
0028 .dbline 39
0028 ; {
0028 ; putchar(*s);
0028 ; s++;
0028 ; }
0028 ; return 1;
0028 01E0 ldi R16,1
002A 10E0 ldi R17,0
002C .dbline -2
002C L9:
002C 00D0 rcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r s 20 pc
0030 .dbend
0030 .dbfunc e puts_hh _puts_hh fV
0030 ; s -> R20,R21
.even
0030 _puts_hh::
0030 00D0 rcall push_gset1
0032 A801 movw R20,R16
0034 .dbline -1
0034 .dbline 44
0034 ; }
0034 ;
0034 ; //含回车换行的字符串输出函数
0034 ; void puts_hh(char *s)
0034 ; {
0034 05C0 rjmp L15
0036 L14:
0036 .dbline 46
0036 .dbline 47
0036 FA01 movw R30,R20
0038 0081 ldd R16,z+0
003A E2DF rcall _putchar
003C .dbline 48
003C 4F5F subi R20,255 ; offset = 1
003E 5F4F sbci R21,255
0040 .dbline 49
0040 L15:
0040 .dbline 45
0040 ; while (*s)
0040 FA01 movw R30,R20
0042 2080 ldd R2,z+0
0044 2220 tst R2
0046 B9F7 brne L14
0048 .dbline 50
0048 ; {
0048 ; putchar(*s);
0048 ; s++;
0048 ; }
0048 ; putchar(0x0a);//换行
0048 0AE0 ldi R16,10
004A DADF rcall _putchar
004C .dbline 51
004C ; putchar(0x0d);//回车
004C 0DE0 ldi R16,13
004E D8DF rcall _putchar
0050 .dbline -2
0050 .dbline 52
0050 ; }
0050 L13:
0050 00D0 rcall pop_gset1
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r s 20 pc
0054 .dbend
0054 .dbfunc e uart_init _uart_init fV
.even
0054 _uart_init::
0054 .dbline -1
0054 .dbline 56
0054 ;
0054 ; //UART初始化
0054 ; void uart_init(void)
0054 ; {
0054 .dbline 57
0054 ; UCSRB=(1<<RXEN)|(1<<TXEN); //允许发送和接收
0054 88E1 ldi R24,24
0056 8AB9 out 0xa,R24
0058 .dbline 58
0058 ; UBRRL=(fosc/16/baud-1)%256;
0058 83E3 ldi R24,51
005A 89B9 out 0x9,R24
005C .dbline 59
005C ; UBRRH=(fosc/16/baud-1)/256;
005C 2224 clr R2
005E 20BC out 0x20,R2
0060 .dbline 60
0060 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位停止位
0060 86E8 ldi R24,134
0062 80BD out 0x20,R24
0064 .dbline -2
0064 .dbline 61
0064 ; }
0064 L17:
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbend
0066 .dbfunc e main _main fV
0066 ; i -> R20
.even
0066 _main::
0066 .dbline -1
0066 .dbline 66
0066 ;
0066 ;
0066 ; //RS232通信main函数
0066 ; void main(void)
0066 ; {
0066 .dbline 67
0066 ; unsigned char i=0;
0066 4427 clr R20
0068 .dbline 68
0068 ; uart_init();
0068 F5DF rcall _uart_init
006A .dbline 71
006A ;
006A ; //proteus还不支持汉文显示
006A ; puts_hh("RS232 test demo!");
006A 00E0 ldi R16,<L19
006C 10E0 ldi R17,>L19
006E E0DF rcall _puts_hh
0070 .dbline 72
0070 ; puts_hh("MAIL:young45@126.com");
0070 00E0 ldi R16,<L20
0072 10E0 ldi R17,>L20
0074 DDDF rcall _puts_hh
0076 .dbline 73
0076 ; putchar(0x0a); //换行
0076 0AE0 ldi R16,10
0078 C3DF rcall _putchar
007A .dbline 74
007A ; putchar(0x0d); //回车
007A 0DE0 ldi R16,13
007C C1DF rcall _putchar
007E .dbline 77
007E ;
007E ; //键盘输入回显到终端
007E ; puts("put int please: ");
007E 00E0 ldi R16,<L21
0080 10E0 ldi R17,>L21
0082 C6DF rcall _puts
0084 14C0 rjmp L23
0086 L22:
0086 .dbline 80
0086 ;
0086 ; while(1)
0086 ; {
0086 .dbline 81
0086 ; i=getchar();
0086 C0DF rcall _getchar
0088 402F mov R20,R16
008A .dbline 82
008A ; if (i!=0) //按PC键盘开始测试
008A 0023 tst R16
008C 81F0 breq L25
008E .dbline 83
008E ; {
008E .dbline 84
008E ; putchar(0x0a); //换行
008E 0AE0 ldi R16,10
0090 B7DF rcall _putchar
0092 .dbline 85
0092 ; putchar(0x0d); //回车
0092 0DE0 ldi R16,13
0094 B5DF rcall _putchar
0096 .dbline 86
0096 ; puts("your put is: ");
0096 00E0 ldi R16,<L27
0098 10E0 ldi R17,>L27
009A BADF rcall _puts
009C .dbline 87
009C ; putchar(i);
009C 042F mov R16,R20
009E B0DF rcall _putchar
00A0 .dbline 88
00A0 ; putchar(0x0a); //换行
00A0 0AE0 ldi R16,10
00A2 AEDF rcall _putchar
00A4 .dbline 89
00A4 ; putchar(0x0d); //回车
00A4 0DE0 ldi R16,13
00A6 ACDF rcall _putchar
00A8 .dbline 90
00A8 ; puts("put int please: ");
00A8 00E0 ldi R16,<L21
00AA 10E0 ldi R17,>L21
00AC B1DF rcall _puts
00AE .dbline 91
00AE ; }
00AE L25:
00AE .dbline 92
00AE L23:
00AE .dbline 79
00AE EBCF rjmp L22
00B0 X0:
00B0 .dbline -2
00B0 .dbline 93
00B0 ; }
00B0 ; }
00B0 L18:
00B0 .dbline 0 ; func end
00B0 0895 ret
00B2 .dbsym r i 20 c
00B2 .dbend
.area data(ram, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\USART\USART_Scan\usart_scan.c
0000 L27:
0000 .blkb 14
.area idata
0000 796F7572207075742069733A2000 .byte 'y,'o,'u,'r,32,'p,'u,'t,32,'i,'s,58,32,0
.area data(ram, con, rel)
000E .dbfile F:\Learn\AVR\Pro_Mega8\USART\USART_Scan\usart_scan.c
000E L21:
000E .blkb 17
.area idata
000E 70757420696E7420706C656173653A20 .byte 'p,'u,'t,32,'i,'n,'t,32,'p,'l,'e,'a,'s,'e,58,32
001E 00 .byte 0
.area data(ram, con, rel)
001F .dbfile F:\Learn\AVR\Pro_Mega8\USART\USART_Scan\usart_scan.c
001F L20:
001F .blkb 21
.area idata
001F 4D41494C3A796F756E67343540313236 .byte 'M,'A,'I,'L,58,'y,'o,'u,'n,'g,52,53,64,49,50,54
002F 2E636F6D00 .byte 46,'c,'o,'m,0
.area data(ram, con, rel)
0034 .dbfile F:\Learn\AVR\Pro_Mega8\USART\USART_Scan\usart_scan.c
0034 L19:
0034 .blkb 17
.area idata
0034 525332333220746573742064656D6F21 .byte 'R,'S,50,51,50,32,'t,'e,'s,'t,32,'d,'e,'m,'o,33
0044 00 .byte 0
.area data(ram, con, rel)
0045 .dbfile F:\Learn\AVR\Pro_Mega8\USART\USART_Scan\usart_scan.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -