📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile C:\mega8\PS2_KEYBOARD\uart.c
0000 .dbfunc e putchar _putchar fV
0000 ; c -> R16
.even
0000 _putchar::
0000 .dbline -1
0000 .dbline 20
0000 ; /******************************************/
0000 ; /* 广州天河双龙电子公司 */
0000 ; /* http://www.sl.com.cn */
0000 ; /* PS2键盘演示程序 */
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、将PS2键盘插入SL-MEGA8开发板的PS2键盘插座。
0000 ; #include <iom8v.h>
0000 ; #define fosc 8000000 //晶振8MHZ
0000 ; #define baud 19200 //波特率
0000 ; extern unsigned char read_flash(unsigned int add);
0000 ; extern void init_kb(void);
0000 ; /* 字符输出函数 */
0000 ; void putchar(unsigned char c)
0000 ; {
0000 L2:
0000 .dbline 21
0000 L3:
0000 .dbline 21
0000 ; while (!(UCSRA&(1<<UDRE)));
0000 5D9B sbis 0xb,5
0002 FECF rjmp L2
0004 .dbline 22
0004 ; UDR=c;
0004 0CB9 out 0xc,R16
0006 .dbline -2
0006 .dbline 23
0006 ; }
0006 L1:
0006 .dbline 0 ; func end
0006 0895 ret
0008 .dbsym r c 16 c
0008 .dbend
0008 .dbfunc e puts _puts fI
0008 ; s -> R20,R21
.even
0008 _puts::
0008 00D0 rcall push_gset1
000A A801 movw R20,R16
000C .dbline -1
000C .dbline 27
000C ; extern unsigned char getchar(void);
000C ; /* 字符串输出函数 */
000C ; int puts(char *s)
000C ; {
000C 05C0 rjmp L7
000E L6:
000E .dbline 29
000E .dbline 30
000E FA01 movw R30,R20
0010 0081 ldd R16,z+0
0012 F6DF rcall _putchar
0014 .dbline 31
0014 4F5F subi R20,255 ; offset = 1
0016 5F4F sbci R21,255
0018 .dbline 32
0018 L7:
0018 .dbline 28
0018 ; while (*s)
0018 FA01 movw R30,R20
001A 2080 ldd R2,z+0
001C 2220 tst R2
001E B9F7 brne L6
0020 .dbline 33
0020 ; {
0020 ; putchar(*s);
0020 ; s++;
0020 ; }
0020 ; putchar(0x0a);//回车换行
0020 0AE0 ldi R16,10
0022 EEDF rcall _putchar
0024 .dbline 34
0024 ; putchar(0x0d);
0024 0DE0 ldi R16,13
0026 ECDF rcall _putchar
0028 .dbline 35
0028 ; return 1;
0028 01E0 ldi R16,1
002A 10E0 ldi R17,0
002C .dbline -2
002C L5:
002C 00D0 rcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r s 20 pc
0030 .dbend
0030 .dbfunc e putstr _putstr fV
0030 ; s -> R20,R21
.even
0030 _putstr::
0030 00D0 rcall push_gset1
0032 A801 movw R20,R16
0034 .dbline -1
0034 .dbline 39
0034 ; }
0034 ; /* 不含回车换行的字符串输出函数 */
0034 ; void putstr(char *s)
0034 ; {
0034 05C0 rjmp L11
0036 L10:
0036 .dbline 41
0036 .dbline 42
0036 FA01 movw R30,R20
0038 0081 ldd R16,z+0
003A E2DF rcall _putchar
003C .dbline 43
003C 4F5F subi R20,255 ; offset = 1
003E 5F4F sbci R21,255
0040 .dbline 44
0040 L11:
0040 .dbline 40
0040 ; while (*s)
0040 FA01 movw R30,R20
0042 2080 ldd R2,z+0
0044 2220 tst R2
0046 B9F7 brne L10
0048 .dbline -2
0048 .dbline 45
0048 ; {
0048 ; putchar(*s);
0048 ; s++;
0048 ; }
0048 ; }
0048 L9:
0048 00D0 rcall pop_gset1
004A .dbline 0 ; func end
004A 0895 ret
004C .dbsym r s 20 pc
004C .dbend
004C .dbfunc e uart_init _uart_init fV
.even
004C _uart_init::
004C .dbline -1
004C .dbline 48
004C ; /* UART初始化 */
004C ; void uart_init(void)
004C ; {
004C .dbline 49
004C ; OSCCAL=read_flash(0x1f20);
004C 00E2 ldi R16,7968
004E 1FE1 ldi R17,31
0050 00D0 rcall _read_flash
0052 01BF out 0x31,R16
0054 .dbline 50
0054 ; UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
0054 88E1 ldi R24,24
0056 8AB9 out 0xa,R24
0058 .dbline 51
0058 ; UBRRL=(fosc/16/(baud+1))%256;
0058 8AE1 ldi R24,26
005A 89B9 out 0x9,R24
005C .dbline 52
005C ; UBRRH=(fosc/16/(baud+1))/256;
005C 2224 clr R2
005E 20BC out 0x20,R2
0060 .dbline 53
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 54
0064 ; }
0064 L13:
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 57
0066 ; /* RS232通信main函数 */
0066 ; void main(void)
0066 ; {
0066 .dbline 59
0066 ; unsigned char i;
0066 ; init_kb();
0066 00D0 rcall _init_kb
0068 .dbline 60
0068 ; uart_init();
0068 F1DF rcall _uart_init
006A .dbline 61
006A ; puts("广州天河双龙电子公司PS2键盘演示程序");
006A 00E0 ldi R16,<L15
006C 10E0 ldi R17,>L15
006E CCDF rcall _puts
0070 .dbline 62
0070 ; puts("HTTP://WWW.SL.COM.CN");
0070 00E0 ldi R16,<L16
0072 10E0 ldi R17,>L16
0074 C9DF rcall _puts
0076 .dbline 63
0076 ; puts("MAIL TO:sllg@sl.com.cn");
0076 00E0 ldi R16,<L17
0078 10E0 ldi R17,>L17
007A C6DF rcall _puts
007C .dbline 64
007C ; putchar(0x0a);
007C 0AE0 ldi R16,10
007E C0DF rcall _putchar
0080 .dbline 65
0080 ; putchar(0x0d);//换行
0080 0DE0 ldi R16,13
0082 BEDF rcall _putchar
0084 1AC0 rjmp L19
0086 L18:
0086 .dbline 67
0086 ; while(1)
0086 ; {
0086 .dbline 68
0086 ; i=getchar();
0086 00D0 rcall _getchar
0088 402F mov R20,R16
008A .dbline 69
008A ; if (i!=0)//按PC键盘开始测试
008A 0023 tst R16
008C B1F0 breq L21
008E .dbline 70
008E ; {
008E .dbline 71
008E ; putstr("当前按键是:");
008E 00E0 ldi R16,<L23
0090 10E0 ldi R17,>L23
0092 CEDF rcall _putstr
0094 .dbline 72
0094 ; putchar(i);
0094 042F mov R16,R20
0096 B4DF rcall _putchar
0098 .dbline 73
0098 ; putchar(0x0a);
0098 0AE0 ldi R16,10
009A B2DF rcall _putchar
009C .dbline 74
009C ; putchar(0x0d);
009C 0DE0 ldi R16,13
009E B0DF rcall _putchar
00A0 .dbline 75
00A0 ; puts("广州天河双龙电子公司PS2键盘演示程序");
00A0 00E0 ldi R16,<L15
00A2 10E0 ldi R17,>L15
00A4 B1DF rcall _puts
00A6 .dbline 76
00A6 ; puts("HTTP://WWW.SL.COM.CN");
00A6 00E0 ldi R16,<L16
00A8 10E0 ldi R17,>L16
00AA AEDF rcall _puts
00AC .dbline 77
00AC ; puts("MAIL TO:sllg@sl.com.cn");
00AC 00E0 ldi R16,<L17
00AE 10E0 ldi R17,>L17
00B0 ABDF rcall _puts
00B2 .dbline 78
00B2 ; putchar(0x0a);
00B2 0AE0 ldi R16,10
00B4 A5DF rcall _putchar
00B6 .dbline 79
00B6 ; putchar(0x0d);
00B6 0DE0 ldi R16,13
00B8 A3DF rcall _putchar
00BA .dbline 80
00BA ; }
00BA L21:
00BA .dbline 81
00BA L19:
00BA .dbline 66
00BA E5CF rjmp L18
00BC X0:
00BC .dbline -2
00BC .dbline 82
00BC ; }
00BC ; }
00BC L14:
00BC .dbline 0 ; func end
00BC 0895 ret
00BE .dbsym r i 20 c
00BE .dbend
.area data(ram, con, rel)
0000 .dbfile C:\mega8\PS2_KEYBOARD\uart.c
0000 L23:
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\PS2_KEYBOARD\uart.c
000D L17:
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\PS2_KEYBOARD\uart.c
0024 L16:
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\PS2_KEYBOARD\uart.c
0039 L15:
0039 .blkb 36
.area idata
0039 B9E3D6DDCCECBAD3CBABC1FAB5E7D7D3 .byte 185,227,214,221,204,236,186,211,203,171,193,250,181,231,215,211
0049 B9ABCBBE505332BCFCC5CCD1DDCABEB3 .byte 185,171,203,190,'P,'S,50,188,252,197,204,209,221,202,190,179
0059 CCD0F200 .byte 204,208,242,0
.area data(ram, con, rel)
005D .dbfile C:\mega8\PS2_KEYBOARD\uart.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -