📄 uart.lst
字号:
__start:
__text_start:
0043 E5CF LDI R28,0x5F
0044 E0D4 LDI R29,4
0045 BFCD OUT P3D,R28
0046 BFDE OUT P3E,R29
0047 51C0 SUBI R28,0x10
0048 40D0 SBCI R29,0
0049 EA0A LDI R16,0xAA
004A 8308 STD R16,0+Y
004B 2400 CLR R0
004C EBEF LDI R30,0xBF
004D E0F0 LDI R31,0
004E E010 LDI R17,0
004F 3BEF CPI R30,0xBF
0050 07F1 CPC R31,R17
0051 F011 BEQ 0x0054
0052 9201 ST R0,Z+
0053 CFFB RJMP 0x004F
0054 8300 STD R16,0+Z
0055 E2E6 LDI R30,0x26
0056 E0F0 LDI R31,0
0057 E6A0 LDI R26,0x60
0058 E0B0 LDI R27,0
0059 E010 LDI R17,0
005A 38E5 CPI R30,0x85
005B 07F1 CPC R31,R17
005C F021 BEQ 0x0061
005D 95C8 LPM
005E 9631 ADIW R30,1
005F 920D ST R0,X+
0060 CFF9 RJMP 0x005A
0061 D034 RCALL _main
_exit:
0062 CFFF RJMP _exit
FILE: C:\mega8\uart\uart.c
(0001) /******************************************/
(0002) /* 广州天河双龙电子公司 */
(0003) /* http://www.sl.com.cn */
(0004) /* RS232通信演示程序 */
(0005) /* 作者:ntzwq@wx88.net */
(0006) /* 2002年5月10日 */
(0007) /* 目标MCU:MEGA8 晶振:外部(EXT) 8MHZ */
(0008) /******************************************/
(0009) // 1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
(0010) // 2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
(0011) // 通信波特率为19200(Tools->Environment Options...)。
(0012) // 3、将PC屏幕光标定位于调试窗口中。
(0013) #include <iom8v.h>
(0014) #define fosc 8000000 //晶振8MHZ
(0015) #define baud 19200 //波特率
(0016) /* 字符输出函数 */
(0017) void putchar(unsigned char c)
(0018) {
(0019) while (!(UCSRA&(1<<UDRE)));
_putchar:
c --> R16
0063 9B5D SBIS P0B,5
0064 CFFE RJMP _putchar
(0020) UDR=c;
0065 B90C OUT P0C,R16
(0021) }
0066 9508 RET
(0022) /* 字符输入函数 */
(0023) unsigned char getchar(void)
(0024) {
(0025) while(!(UCSRA& (1<<RXC)));
_getchar:
0067 9B5F SBIS P0B,7
0068 CFFE RJMP _getchar
(0026) return UDR;
0069 B10C IN R16,P0C
006A 9508 RET
_puts:
s --> R20
006B D051 RCALL push_gset1
006C 01A8 MOVW R20,R16
(0027) }
(0028) /* 字符串输出函数 */
(0029) int puts(char *s)
(0030) {
006D C005 RJMP 0x0073
(0031) while (*s)
(0032) {
(0033) putchar(*s);
006E 01FA MOVW R30,R20
006F 8100 LDD R16,0+Z
0070 DFF2 RCALL _putchar
(0034) s++;
0071 5F4F SUBI R20,0xFF
0072 4F5F SBCI R21,0xFF
0073 01FA MOVW R30,R20
0074 8020 LDD R2,0+Z
0075 2022 TST R2
0076 F7B9 BNE 0x006E
(0035) }
(0036) putchar(0x0a);//回车换行
0077 E00A LDI R16,0xA
0078 DFEA RCALL _putchar
(0037) putchar(0x0d);
0079 E00D LDI R16,0xD
007A DFE8 RCALL _putchar
(0038) return 1;
007B E001 LDI R16,1
007C E010 LDI R17,0
007D D042 RCALL pop_gset1
007E 9508 RET
_putstr:
s --> R20
007F D03D RCALL push_gset1
0080 01A8 MOVW R20,R16
(0039) }
(0040) /* 不含回车换行的字符串输出函数 */
(0041) void putstr(char *s)
(0042) {
0081 C005 RJMP 0x0087
(0043) while (*s)
(0044) {
(0045) putchar(*s);
0082 01FA MOVW R30,R20
0083 8100 LDD R16,0+Z
0084 DFDE RCALL _putchar
(0046) s++;
0085 5F4F SUBI R20,0xFF
0086 4F5F SBCI R21,0xFF
0087 01FA MOVW R30,R20
0088 8020 LDD R2,0+Z
0089 2022 TST R2
008A F7B9 BNE 0x0082
(0047) }
(0048) }
008B D034 RCALL pop_gset1
008C 9508 RET
(0049) /* UART初始化 */
(0050) void uart_init(void)
(0051) {
(0052) UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
_uart_init:
008D E188 LDI R24,0x18
008E B98A OUT P0A,R24
(0053) UBRRL=(fosc/16/(baud+1))%256;
008F E18A LDI R24,0x1A
0090 B989 OUT P09,R24
(0054) UBRRH=(fosc/16/(baud+1))/256;
0091 2422 CLR R2
0092 BC20 OUT P20,R2
(0055) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0093 E886 LDI R24,0x86
0094 BD80 OUT P20,R24
(0056) }
0095 9508 RET
(0057) /* RS232通信main函数 */
(0058) void main(void)
(0059) {
(0060) unsigned char i;
(0061) uart_init();
_main:
i --> R20
0096 DFF6 RCALL _uart_init
(0062) puts("广州天河双龙电子公司RS232通信演示程序");
0097 E909 LDI R16,0x99
0098 E010 LDI R17,0
0099 DFD1 RCALL _puts
(0063) puts("HTTP://WWW.SL.COM.CN");
009A E804 LDI R16,0x84
009B E010 LDI R17,0
009C DFCE RCALL _puts
(0064) puts("MAIL TO:sllg@sl.com.cn");
009D E60D LDI R16,0x6D
009E E010 LDI R17,0
009F DFCB RCALL _puts
00A0 C01A RJMP 0x00BB
(0065) while(1)
(0066) {
(0067) i=getchar();
00A1 DFC5 RCALL _getchar
00A2 2F40 MOV R20,R16
(0068) if (i!=0)//按PC键盘开始测试
00A3 2300 TST R16
00A4 F0B1 BEQ 0x00BB
(0069) {
(0070) putstr("当前按键是:");
00A5 E600 LDI R16,0x60
00A6 E010 LDI R17,0
00A7 DFD7 RCALL _putstr
(0071) putchar(i);
00A8 2F04 MOV R16,R20
00A9 DFB9 RCALL _putchar
(0072) putchar(0x0a);
00AA E00A LDI R16,0xA
00AB DFB7 RCALL _putchar
(0073) putchar(0x0d);
00AC E00D LDI R16,0xD
00AD DFB5 RCALL _putchar
(0074) puts("广州天河双龙电子公司RS232通信演示程序");
00AE E909 LDI R16,0x99
00AF E010 LDI R17,0
00B0 DFBA RCALL _puts
(0075) puts("HTTP://WWW.SL.COM.CN");
00B1 E804 LDI R16,0x84
00B2 E010 LDI R17,0
00B3 DFB7 RCALL _puts
(0076) puts("MAIL TO:sllg@sl.com.cn");
00B4 E60D LDI R16,0x6D
00B5 E010 LDI R17,0
00B6 DFB4 RCALL _puts
(0077) putchar(0x0a);
00B7 E00A LDI R16,0xA
00B8 DFAA RCALL _putchar
(0078) putchar(0x0d);
00B9 E00D LDI R16,0xD
00BA DFA8 RCALL _putchar
00BB CFE5 RJMP 0x00A1
(0079) }
(0080) }
(0081) }FILE: <library>
00BC 9508 RET
push_gset1:
00BD 935A ST R21,-Y
00BE 934A ST R20,-Y
00BF 9508 RET
pop_gset1:
00C0 E0E1 LDI R30,1
pop:
00C1 9149 LD R20,Y+
00C2 9159 LD R21,Y+
00C3 FDE0 SBRC R30,0
00C4 9508 RET
00C5 9169 LD R22,Y+
00C6 9179 LD R23,Y+
00C7 FDE1 SBRC R30,1
00C8 9508 RET
00C9 90A9 LD R10,Y+
00CA 90B9 LD R11,Y+
00CB FDE2 SBRC R30,2
00CC 9508 RET
00CD 90C9 LD R12,Y+
00CE 90D9 LD R13,Y+
00CF FDE3 SBRC R30,3
00D0 9508 RET
00D1 90E9 LD R14,Y+
00D2 90F9 LD R15,Y+
00D3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -