📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile C:\mega8\uart\uart.c
0000 .dbfunc e putchar _putchar fI
0000 ; c -> R16
.even
0000 _putchar::
0000 .dbline -1
0000 .dbline 18
0000 ; /******************************************/
0000 ; /* 广州天河双龙电子公司 */
0000 ; /* http://www.sl.com.cn */
0000 ; /* RS232通信演示程序 */
0000 ; /* 作者:ntzwq@wx88.net */
0000 ; /* 2002年5月10日 */
0000 ; /* 目标MCU:MEGA8 晶振:外部(EXT) 8MHZ */
0000 ; /******************************************/
0000 ; // 1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
0000 ; // 2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
0000 ; // 通信波特率为19200(Tools->Environment Options...)。
0000 ; // 3、将PC屏幕光标定位于调试窗口中。
0000 ; #include <iom8v.h>
0000 ; #define fosc 8000000 //晶振8MHZ
0000 ; #define baud 19200 //波特率
0000 ; /* 字符输出函数 */
0000 ; void putchar(unsigned char c)
0000 ; {
0000 L2:
0000 .dbline 19
0000 L3:
0000 .dbline 19
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 .dbfunc e getchar _getchar fI
.even
0008 _getchar::
0008 .dbline -1
0008 .dbline 24
0008 ; /* 字符输入函数 */
0008 ; unsigned char getchar(void)
0008 ; {
0008 L6:
0008 .dbline 25
0008 L7:
0008 .dbline 25
0008 ; while(!(UCSRA& (1<<RXC)));
0008 5F9B sbis 0xb,7
000A FECF rjmp L6
000C .dbline 26
000C ; return UDR;
000C 0CB1 in R16,0xc
000E .dbline -2
000E L5:
000E .dbline 0 ; func end
000E 0895 ret
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 30
0014 ; }
0014 ; /* 字符串输出函数 */
0014 ; int puts(char *s)
0014 ; {
0014 05C0 rjmp L11
0016 L10:
0016 .dbline 32
0016 .dbline 33
0016 FA01 movw R30,R20
0018 0081 ldd R16,z+0
001A F2DF rcall _putchar
001C .dbline 34
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 .dbline 35
0020 L11:
0020 .dbline 31
0020 ; while (*s)
0020 FA01 movw R30,R20
0022 2080 ldd R2,z+0
0024 2220 tst R2
0026 B9F7 brne L10
0028 .dbline 36
0028 ; {
0028 ; putchar(*s);
0028 ; s++;
0028 ; }
0028 ; putchar(0x0a);//回车换行
0028 0AE0 ldi R16,10
002A EADF rcall _putchar
002C .dbline 37
002C ; putchar(0x0d);
002C 0DE0 ldi R16,13
002E E8DF rcall _putchar
0030 .dbline 38
0030 ; return 1;
0030 01E0 ldi R16,1
0032 10E0 ldi R17,0
0034 .dbline -2
0034 L9:
0034 00D0 rcall pop_gset1
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbsym r s 20 pc
0038 .dbfunc e putstr _putstr fI
0038 ; s -> R20,R21
.even
0038 _putstr::
0038 00D0 rcall push_gset1
003A A801 movw R20,R16
003C .dbline -1
003C .dbline 42
003C ; }
003C ; /* 不含回车换行的字符串输出函数 */
003C ; void putstr(char *s)
003C ; {
003C 05C0 rjmp L15
003E L14:
003E .dbline 44
003E .dbline 45
003E FA01 movw R30,R20
0040 0081 ldd R16,z+0
0042 DEDF rcall _putchar
0044 .dbline 46
0044 4F5F subi R20,255 ; offset = 1
0046 5F4F sbci R21,255
0048 .dbline 47
0048 L15:
0048 .dbline 43
0048 ; while (*s)
0048 FA01 movw R30,R20
004A 2080 ldd R2,z+0
004C 2220 tst R2
004E B9F7 brne L14
0050 .dbline -2
0050 .dbline 48
0050 ; {
0050 ; putchar(*s);
0050 ; s++;
0050 ; }
0050 ; }
0050 L13:
0050 00D0 rcall pop_gset1
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r s 20 pc
0054 .dbfunc e uart_init _uart_init fI
.even
0054 _uart_init::
0054 .dbline -1
0054 .dbline 51
0054 ; /* UART初始化 */
0054 ; void uart_init(void)
0054 ; {
0054 .dbline 52
0054 ; UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
0054 88E1 ldi R24,24
0056 8AB9 out 0xa,R24
0058 .dbline 53
0058 ; UBRRL=(fosc/16/(baud+1))%256;
0058 8AE1 ldi R24,26
005A 89B9 out 0x9,R24
005C .dbline 54
005C ; UBRRH=(fosc/16/(baud+1))/256;
005C 2224 clr R2
005E 20BC out 0x20,R2
0060 .dbline 55
0060 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0060 86E8 ldi R24,134
0062 80BD out 0x20,R24
0064 .dbline -2
0064 .dbline 56
0064 ; }
0064 L17:
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbfunc e main _main fI
0066 ; i -> R20
.even
0066 _main::
0066 .dbline -1
0066 .dbline 59
0066 ; /* RS232通信main函数 */
0066 ; void main(void)
0066 ; {
0066 .dbline 61
0066 ; unsigned char i;
0066 ; uart_init();
0066 F6DF rcall _uart_init
0068 .dbline 62
0068 ; puts("广州天河双龙电子公司RS232通信演示程序");
0068 00E0 ldi R16,<L19
006A 10E0 ldi R17,>L19
006C D1DF rcall _puts
006E .dbline 63
006E ; puts("HTTP://WWW.SL.COM.CN");
006E 00E0 ldi R16,<L20
0070 10E0 ldi R17,>L20
0072 CEDF rcall _puts
0074 .dbline 64
0074 ; puts("MAIL TO:sllg@sl.com.cn");
0074 00E0 ldi R16,<L21
0076 10E0 ldi R17,>L21
0078 CBDF rcall _puts
007A 1AC0 rjmp L23
007C L22:
007C .dbline 66
007C ; while(1)
007C ; {
007C .dbline 67
007C ; i=getchar();
007C C5DF rcall _getchar
007E 402F mov R20,R16
0080 .dbline 68
0080 ; if (i!=0)//按PC键盘开始测试
0080 0023 tst R16
0082 B1F0 breq L25
0084 .dbline 69
0084 ; {
0084 .dbline 70
0084 ; putstr("当前按键是:");
0084 00E0 ldi R16,<L27
0086 10E0 ldi R17,>L27
0088 D7DF rcall _putstr
008A .dbline 71
008A ; putchar(i);
008A 042F mov R16,R20
008C B9DF rcall _putchar
008E .dbline 72
008E ; putchar(0x0a);
008E 0AE0 ldi R16,10
0090 B7DF rcall _putchar
0092 .dbline 73
0092 ; putchar(0x0d);
0092 0DE0 ldi R16,13
0094 B5DF rcall _putchar
0096 .dbline 74
0096 ; puts("广州天河双龙电子公司RS232通信演示程序");
0096 00E0 ldi R16,<L19
0098 10E0 ldi R17,>L19
009A BADF rcall _puts
009C .dbline 75
009C ; puts("HTTP://WWW.SL.COM.CN");
009C 00E0 ldi R16,<L20
009E 10E0 ldi R17,>L20
00A0 B7DF rcall _puts
00A2 .dbline 76
00A2 ; puts("MAIL TO:sllg@sl.com.cn");
00A2 00E0 ldi R16,<L21
00A4 10E0 ldi R17,>L21
00A6 B4DF rcall _puts
00A8 .dbline 77
00A8 ; putchar(0x0a);
00A8 0AE0 ldi R16,10
00AA AADF rcall _putchar
00AC .dbline 78
00AC ; putchar(0x0d);
00AC 0DE0 ldi R16,13
00AE A8DF rcall _putchar
00B0 .dbline 79
00B0 ; }
00B0 L25:
00B0 .dbline 80
00B0 L23:
00B0 .dbline 65
00B0 E5CF rjmp L22
00B2 X0:
00B2 .dbline -2
00B2 .dbline 81
00B2 ; }
00B2 ; }
00B2 L18:
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbsym r i 20 c
.area data(ram, con, rel)
0000 .dbfile C:\mega8\uart\uart.c
0000 L27:
0000 .blkb 13
.area idata
0000 B5B1C7B0B0B4BCFCCAC7A3BA00 .byte 181,177,199,176,176,180,188,252,202,199,163,186,0
.area data(ram, con, rel)
000D .dbfile C:\mega8\uart\uart.c
000D L21:
000D .blkb 23
.area idata
000D 4D41494C20544F3A736C6C6740736C2E .byte 'M,'A,'I,'L,32,'T,'O,58,'s,'l,'l,'g,64,'s,'l,46
001D 636F6D2E636E00 .byte 'c,'o,'m,46,'c,'n,0
.area data(ram, con, rel)
0024 .dbfile C:\mega8\uart\uart.c
0024 L20:
0024 .blkb 21
.area idata
0024 485454503A2F2F5757572E534C2E434F .byte 'H,'T,'T,'P,58,47,47,'W,'W,'W,46,'S,'L,46,'C,'O
0034 4D2E434E00 .byte 'M,46,'C,'N,0
.area data(ram, con, rel)
0039 .dbfile C:\mega8\uart\uart.c
0039 L19:
0039 .blkb 38
.area idata
0039 B9E3D6DDCCECBAD3CBABC1FAB5E7D7D3 .byte 185,227,214,221,204,236,186,211,203,171,193,250,181,231,215,211
0049 B9ABCBBE5253323332CDA8D0C5D1DDCA .byte 185,171,203,190,'R,'S,50,51,50,205,168,208,197,209,221,202
0059 BEB3CCD0F200 .byte 190,179,204,208,242,0
.area data(ram, con, rel)
005F .dbfile C:\mega8\uart\uart.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -