📄 main.lst
字号:
A51 MACRO ASSEMBLER MAIN 09/27/2006 14:44:10 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN main.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE main.A51 SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;***********************************************************************************
2 ;程序名称:简单的串行口收发
3 ;硬件接法:RXD和TXD通过RS-232电平转换电路接到电脑的串行口上
4 ;运行效果:开机时向电脑发送Hello,然后接收电脑发出的字符并回显
5 ;***********************************************************************************
6
7
8 ;***********************************************************************************
9 ;定义波特率(取值1200、2400、4800、9600、19200等)
10 ;***********************************************************************************
2580 11 BaudRate EQU 9600
12
13
14 ;***********************************************************************************
15 ;复位入口
16 ;***********************************************************************************
0000 17 ORG 0x0000
0000 020003 18 LJMP PreMain
19
20
21 ;***********************************************************************************
22 ;程序段:PreMain
23 ;功能:进入主程序之前的初始化操作
24 ;***********************************************************************************
0003 25 PreMain:
0003 758130 26 MOV SP, #0x30
0006 020035 27 LJMP main
28
29
30 ;***********************************************************************************
31 ;函数:void UartInit()
32 ;功能:串行口初始化
33 ;***********************************************************************************
0009 34 UartInit:
0009 759850 35 MOV SCON, #0x50 ;串口方式1(8位UART),允许接收
000C 438780 36 ORL PCON, #0x80 ;波特率加倍
000F 53890F 37 ANL TMOD, #0x0F ;设置T1为8位自动重装定时器,用于产生波特率
0012 438920 38 ORL TMOD, #0x20
0015 758BFA 39 MOV TL1, #(256-57600/BaudRate) ;根据波特率设置T1初值
0018 858B8D 40 MOV TH1, TL1
001B D28E 41 SETB TR1 ;启动T1
001D 22 42 RET
43
44
45 ;***********************************************************************************
46 ;函数:void UartSendChar(char c)
47 ;功能:通过串行口发送单个字节
48 ;参数:c = R7,是被发送的字节数据,取值0x00~0xFF
49 ;***********************************************************************************
001E 50 UartSendChar:
001E 8F99 51 MOV SBUF, R7 ;数据写入SBUF,同时启动硬件发送过程
0020 3099FD 52 JNB TI, $ ;等待发送完毕
0023 C299 53 CLR TI ;清除发送标志
0025 22 54 RET
55
56
57 ;***********************************************************************************
58 ;函数:void UartSendStr(char *s)
A51 MACRO ASSEMBLER MAIN 09/27/2006 14:44:10 PAGE 2
59 ;功能:通过串行口发送单个字节
60 ;参数:*s = (R6,R7),是被发送的字符串
61 ;***********************************************************************************
0026 62 UartSendStr:
0026 8E83 63 MOV DPH, R6
0028 8F82 64 MOV DPL, R7
002A 65 UartSendStr_Loop:
002A E4 66 CLR A
002B 93 67 MOVC A, @A+DPTR
002C A3 68 INC DPTR
002D 6005 69 JZ UartSendStr_end ;遇到字符串结束标志0x00时,停止发送
002F FF 70 MOV R7, A
0030 111E 71 CALL UartSendChar
0032 80F6 72 SJMP UartSendStr_Loop
0034 73 UartSendStr_end:
0034 22 74 RET
75
76
77 ;***********************************************************************************
78 ;函数:void main()
79 ;功能:主函数
80 ;***********************************************************************************
0035 81 main:
0035 1109 82 CALL UartInit ;串行口初始化
0037 7E00 83 MOV R6, #HIGH(main_String)
0039 7F48 84 MOV R7, #LOW(main_String)
003B 1126 85 CALL UartSendStr ;发送Hello字符串
003D 86 main_Loop:
003D 3098FD 87 JNB RI, $ ;等待接收数据
0040 C298 88 CLR RI ;清除接收标志
0042 AF99 89 MOV R7, SBUF ;读取接收到的数据
0044 111E 90 CALL UartSendChar ;回送收到的数据
0046 80F5 91 SJMP main_Loop
0048 92 main_String:
0048 48656C6C 93 DB 'Hello',0x0D,0x0A,0x00
004C 6F0D0A00
94
95
96 ;***********************************************************************************
97 ;程序结束
98 ;***********************************************************************************
99 END
A51 MACRO ASSEMBLER MAIN 09/27/2006 14:44:10 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
BAUDRATE . . . . . N NUMB 2580H A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
MAIN . . . . . . . C ADDR 0035H A
MAIN_LOOP. . . . . C ADDR 003DH A
MAIN_STRING. . . . C ADDR 0048H A
PCON . . . . . . . D ADDR 0087H A
PREMAIN. . . . . . C ADDR 0003H A
RI . . . . . . . . B ADDR 0098H.0 A
SBUF . . . . . . . D ADDR 0099H A
SCON . . . . . . . D ADDR 0098H A
SP . . . . . . . . D ADDR 0081H A
TH1. . . . . . . . D ADDR 008DH A
TI . . . . . . . . B ADDR 0098H.1 A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
TR1. . . . . . . . B ADDR 0088H.6 A
UARTINIT . . . . . C ADDR 0009H A
UARTSENDCHAR . . . C ADDR 001EH A
UARTSENDSTR. . . . C ADDR 0026H A
UARTSENDSTR_END. . C ADDR 0034H A
UARTSENDSTR_LOOP . C ADDR 002AH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -