📄 uart.lst
字号:
C51 COMPILER V7.50 UART 04/25/2008 10:51:19 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN Uart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Uart.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************
2 * Copyright (c) 2004,西安铭朗电子科技有限责任公司
3 * All rights reserved.
4 *
5 * 文件名称: Uart.c
6 * 文件标识: none
7 * 适用器件: C8051F040
8 *
9 * 摘 要: 本文件是串口0、1子程序;使用外部22.1184MHz晶振. Uart驱动程序,包括初始化、
10 * 波特率设置,单字节发送接收、字符串发送接受等。将跳线器JP7、短接。
11 * 使用外部22.1184MHz晶振。
12 *
13 * 当前版本:1.2
14 * 作 者:张宁强
15 * 完成日期:2006年1月10日
16 *
17 * 历史版本:1.0
18 * 原作者 : 李林利 卢阳
19 * 完成日期:2005年6月1日
20 *************************************************************************************/
21
22 /************************************************************************************/
23 // 引用外部头文件
24
25 #include "c8051F040.h"
26 #include "intrins.h"
27 #include "const.h"
28 #include "uart.h"
29
30 /************************************************************************************/
31
32 /************************************************************************************
33 // 常量及全局变量定义
34 *************************************************************************************/
35 unsigned char data utxok=1;
36
37 /************************************************************************************
38 * Uart子程序
39 *************************************************************************************/
40
41 /***********************************************************************************
42 * 函数名称:Uart1_Init;
43 *
44 * 函数功能描述:Uart1初始化;
45 *
46 * 输入参数:unsigned char类型,发送数据波特率;
47 *
48 * 返回数据:none;
49 *
50 * 注意: none;
51 ************************************************************************************/
52 void Uart1_Init(unsigned long BaudRate) //Uart1初始化
53 {
54 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
55 1 SFRPAGE = SFR_PAGE_0; // set SFR page 0
C51 COMPILER V7.50 UART 04/25/2008 10:51:19 PAGE 2
56 1
57 1 TR1=0; // 关闭定时器Timer1
58 1 ET1=0; // 关闭定时器Timer1中断
59 1 PT1=0; // 关闭定时器Timer1中断优先权
60 1 TMOD&= 0x0f; // TMOD: 定时器1, 模式2, 8位重载
61 1 TMOD|= 0x20; // TMOD: 定时器1, 模式2, 8位重载
62 1
63 1 if (BaudRate>=57600)
64 1 {
65 2 CKCON |= 0x10; // 定时器Timer1使用系统时钟作为时间基准
66 2 TH1 = 256-(SYSCLK/(BaudRate*2)); // 设置定时器Timer1重载值
67 2 }
68 1 else if ((BaudRate<57600)&&(BaudRate>=9600))
69 1 {
70 2 CKCON = 0x00; // 定时器Timer1使用系统时钟作为时间/12基准
71 2 TH1 = 256-(SYSCLK/(BaudRate*2*12)); // 设置定时器Timer1重载值
72 2 }
73 1 else
74 1 {
75 2
76 2 CKCON = 0x02; // 定时器Timer1使用系统时钟作为时间/48基准
77 2 TH1 = 256-(SYSCLK/(BaudRate*2*48)); // 设置定时器Timer1重载值
78 2 }
79 1
80 1 //ES0=0; // 打开串口Uart1中断
81 1 EIE2 |= 0x40;
82 1 //PS=0; // 串口Uart1中断优先权设为"低"
83 1 EIP2 &= 0xBF;
84 1 utxok=1; //can send bytes
85 1 TR1=1; // 打开串口Uart1
86 1
87 1
88 1 SFRPAGE = SFR_PAGE_1;// set SFR page 1
89 1 SCON1=0x56; // SCON1:模式1, 8字节UART, 打开RX, TI1=1,RI1=0
90 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
91 1 }
92
93 /***********************************************************************************
94 * 函数名称:Uart1_Enable;
95 *
96 * 函数功能描述:Uart0初始化;
97 *
98 * 输入参数:bool类型,打开输入1;关闭输入0;
99 *
100 * 返回数据:none;
101 *
102 * 注意: none;
103 ************************************************************************************/
104 /*
105 void Uart1_Enable(bool Flag)
106 {
107 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
108 SFRPAGE = SFR_PAGE_2;
109
110 if (Flag)
111 TMR4CN|=0x04; // 打开Uart1
112 else
113 TMR4CN&=~0x04; // 关闭Uart1
114
115 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
116 }
117 */
C51 COMPILER V7.50 UART 04/25/2008 10:51:19 PAGE 3
118 /***********************************************************************************
119 * 函数名称: Uart1_SendString;
120 *
121 * 函数功能描述:Uart0初始化;
122 *
123 * 输入参数:unsigned char类型指针,发送数据;
124 *
125 * 返回数据:none;
126 *
127 * 注意: none;
128 ************************************************************************************/
129
130 void Uart1_SendString(unsigned char *pt)
131 {
132 1 while(*pt)
133 1 {
134 2 Uart1_SendByte(*pt++);
135 2 }
136 1 }
137
138 /***********************************************************************************
139 * 函数名称:Uart1_SendByte;
140 *
141 * 函数功能描述:Uart0初始化;
142 *
143 * 输入参数:unsigned char类型指针,发送数据;
144 *
145 * 返回数据:none;
146 *
147 * 注意: none;
148 ************************************************************************************/
149
150 void Uart1_SendByte(unsigned char value)
151 {
152 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
153 1 SFRPAGE = SFR_PAGE_1;
154 1 /*
155 1 while(utxok!=1); // 等待发送1个字节数据完成
156 1 SBUF1=value; // 发送数据到uart1
157 1 utxok=0;
158 1 //SCON1&=~0x02; // 清除中断标志
159 1 */
160 1 while(!(SCON1&0x02));
161 1 SBUF1 = value;
162 1 SCON1 &= ~0x02;
163 1 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
164 1 }
165
166 /***********************************************************************************
167 * 函数名称:Uart1_ReceiveData;
168 *
169 * 函数功能描述:Uart0初始化;
170 *
171 * 输入参数:none;
172 *
173 * 返回数据:unsigned char类型,接收数据;
174 *
175 * 注意: none;
176 ************************************************************************************/
177
178 unsigned char Uart1_ReceiveData(void)
179 {
C51 COMPILER V7.50 UART 04/25/2008 10:51:19 PAGE 4
180 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
181 1 SFRPAGE = SFR_PAGE_1;
182 1 while(!(SCON1&0x01));
183 1 SCON1 &= ~0x01;
184 1 return SBUF1;
185 1 }
186
187 void Uart1_ReceiveLong(char command[])
188 {
189 1 unsigned int i;
190 1 char data SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
191 1 SFRPAGE = SFR_PAGE_1;
192 1 for (i=0;i<3;i++)
193 1 {
194 2 command[i] = Uart1_ReceiveData();//当收到3个字节命令的时候,command收满了跳到主函数main()
195 2
196 2 }
197 1
198 1 }
199 /***********************************************************************************/
200 // 文件结束
201 /***********************************************************************************/
202
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 276 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 13
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -