📄 uart.lst
字号:
C51 COMPILER V7.10 UART 12/14/2004 10:51:16 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\Uart.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE ..\SourceFile\Uart.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\
-Uart.lst) OBJECT(.\Uart.obj)
line level source
1 /*************************************************/
2
3 /**************串行口控制********************/
4
5 /*************2003年1月24日*********************/
6
7 /************WROTE BY WANGSW********************/
8
9 /*
10 UART所需的定时器由T1或T2提供,而不是T0
11
12 SCON:串行口控制寄存器
13 SM0(9F),SM1(9E)
14 SM0,SM1|工作方式| 说明 |所用波特率
15 0,0 | 方式0 |同步移位寄存器| Fosc/12
16 0,1 | 方式1 | 10位异步收发 |由定时器控制
17 1,0 | 方式2 | 11位异步收发 |Fosc/32或Fosc/64
18 1,1 | 方式3 | 11位异步收发 |由定时器控制
19 SM2(9D) 多机通信0:单机,1:多机
20 REN(9C) 接收控制0:禁止接收,1:允许接收
21 TB8 (9B) 发送数据第九位
22 RB8 (9A) 接收数据第九位
23 TI (99) 发送中断标记
24 RI (98) 接收中断标志
25 */
26
27 #include "reg52x2.h"
28 #include <stdlib.h>
29 #include <stdio.h>
30
31 #include "define.h"
32
33 #include "uart.h"
34
35 #include "lcd.h"
36 #include "timer.h"
37 #include "string.h"
38
39
40
41 bool bDC = FALSE;
42 byte len = 0;
43 byte idata UartCommandPool[0x10]; /*r定义串口命令堆栈(数组),数组中元素为明码形式的字符串型命令的每个字符的
-ASCII码字*/
44 byte idata UartDataPool[3];
45 byte* pUartCommandPool;
46 byte* pUartDataPool;
47
48 UartSign eUartSign;
49
50 static byte code *UartCmdString[] =
51 {
52 /*系统命令*/
53 "DEBUG START",
C51 COMPILER V7.10 UART 12/14/2004 10:51:16 PAGE 2
54 "DEBUG END"
55
56 /*用户命令*/
57
58 };
59
60 #define UART_CMD sizeof(UartCmdString) / 2
61
62 static void UartInterruptServer(void);
63
64 static void UartCmdProcess(void);
65
66 static void UartDataProcess(void);
67
68
69
70 /******************************************************************************************
71 *函数名: UartInterruptServer
72 *参数: 无
73 *返回值: 无
74 *描述: 串口中断服务子程序
75 *编写: 王绍伟
76 *版本信息: V1.0 2003年8月15日
77 ******************************************************************************************/
78 static void UartInterruptServer(void) interrupt 4
79 {
80 1 ES = 0;
81 1 RI = 0;
82 1
83 1 if(bDC == FALSE) /*命令即字符串*/
84 1 {
85 2 *pUartCommandPool = SBUF;
86 2 if(*pUartCommandPool == 0x0D) /*回车*/
87 2 {
88 3 *pUartCommandPool = 0; /*字符串最后一位为NULL*/
89 3 pUartCommandPool = UartCommandPool;
90 3 msg_queue_in(MSG_UART, NONE);
91 3 return;
92 3 }
93 2 else
94 2 {
95 3 pUartCommandPool++;
96 3 }
97 2 }
98 1 else
99 1 {
100 2 *(pUartDataPool++) =SBUF; /*r如果是数据,则存放于数据堆栈*/
101 2 if(!(--len))
102 2 {
103 3 *pUartDataPool = '\0';
104 3 pUartDataPool = UartDataPool;
105 3 msg_queue_in(MSG_UART, NONE);
106 3 return;
107 3 }
108 2 }
109 1 ES=1;
110 1 }
111
112
113 /******************************************************************************************
114 *函数名: UartCommand
115 *参数: 无
C51 COMPILER V7.10 UART 12/14/2004 10:51:16 PAGE 3
116 *返回值: 无
117 *描述: 串口消息处理/执行程序
118 *编写: 王绍伟
119 *版本信息: V1.0 2003年8月15日
120 ******************************************************************************************/
121 static void UartCmdProcess()
122 {
123 1 switch(eUartSign)
124 1 {
125 2 case DEBUG_START:
126 2 bDC = 0;
127 2 break;
128 2 case DEBUG_END:
129 2 bDC=0;
130 2 break;
131 2 }
132 1 }
133
134
135 /******************************************************************************************
136 *函数名: UartData
137 *参数: 无
138 *返回值: 无
139 *描述:
140 *编写: 王绍伟
141 *版本信息: V1.0 2003年8月15日
142 ******************************************************************************************/
143 static void UartDataProcess()
144 {
145 1 switch(eUartSign)
146 1 {
147 2 case UART_SETUP:
148 2 bDC = 0;
149 2 break;
150 2 }
151 1 /*命令处理程序*/
152 1 }
153
154
155
156 /******************************************************************************************
157 *函数名: uart_init
158 *参数: eBaudRate
159 *返回值: 无
160 *描述: 串口初始化程序,主要设定了波特率以及T1作为波特率产生
161 器的工作方式等,并且指定了串口数据以及命令存放堆栈
162 *编写: 王绍伟
163 *版本信息: V1.0 2003年8月15日
164 ******************************************************************************************/
165 extern void uart_init(UartBaudrate eBaudRate)
166 {
167 1 ES = 0; /*关串行口中断*/
168 1
169 1 #ifdef SPEEDUP
170 1 RESETBIT(PCON, 7); /*SMOD=1 波特率加速位*/
171 1 #else
SETBIT(PCON, 7);
#endif
174 1
175 1 TMOD &= 0x0F;
176 1 TMOD |= 0x20;
177 1 ET1 = 0; /*中断无效*/
C51 COMPILER V7.10 UART 12/14/2004 10:51:16 PAGE 4
178 1 TH1 = eBaudRate;
179 1 TL1 = eBaudRate;
180 1 TR1 = 1; /*定时器开启*/
181 1 SCON = 0x50;
182 1 pUartDataPool = UartDataPool;
183 1 pUartCommandPool = UartCommandPool;
184 1 ES = 1; /*串行口中断printf需要串口关闭*/
185 1 }
186
187
188 /******************************************************************************************
189 *函数名: uart_send_data
190 *参数: pData
191 *返回值: len
192 *描述: 以串口发送以pData为首地址,len长度的字节数据
193 *编写: 王绍伟
194 *版本信息: V1.0 2003年8月15日
195 ******************************************************************************************/
196 extern void uart_send(byte* pData, byte len)
197 {
198 1 bool bES;
199 1 byte data i;
200 1 bES = ES; /*禁止串口产生中断,而以查询的方式发送数据*/
201 1 ES = 0;
202 1 if(!len)
203 1 {
204 2 i = len;
205 2 }
206 1 else
207 1 {
208 2 i = strlen(pData);
209 2 }
210 1 while(i--)
211 1 {
212 2 SBUF = *pData++;
213 2 while(!TI);
214 2 TI = 0;
215 2 }
216 1 ES = bES;
217 1 }
218
219
220 /******************************************************************************************
221 *函数名: uart_process
222 *参数: 无
223 *返回值: 无
224 *描述: 串口处理程序,
225 *编写: 王绍伟
226 *版本信息: V1.0 2003年8月15日
227 ******************************************************************************************/
228 extern void uart_process(void)
229 {
230 1 byte i;
231 1 if(bDC == FALSE) /*若是命令,则比较命令字符串,设置串口命令标识*/
232 1 {
233 2
234 2 for(i = 0; i < UART_CMD; i++)
235 2 {
236 3 if(!strcmp(UartCommandPool, UartCmdString[i]))
237 3 {
238 4 eUartSign = i;
239 4 ES = 1;
C51 COMPILER V7.10 UART 12/14/2004 10:51:16 PAGE 5
240 4 UartCmdProcess(); /*对命令进行处理*/
241 4 break;
242 4 }
243 3 }
244 2
245 2 ES = 1; /*设置完命令标识后允许串口中断*/
246 2 }
247 1 else
248 1 {
249 2 UartDataProcess();
250 2 }
251 1 }
252
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 431 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = 12 4
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = 19 ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -