📄 uart.lst
字号:
C51 COMPILER V7.50 UART 04/25/2007 16:01:14 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\output\Uart.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE driver\Uart.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\output\Uart.lst) OBJE
-CT(.\output\Uart.obj)
line level source
1 /************************************************************************************
2 * Copyright (c) 2004,西安铭朗电子科技有限责任公司
3 * All rights reserved.
4 *
5 * 文件名称: uart.c
6 * 文件标识: none
7 * 适用器件: c8051f020
8 *
9 * 摘 要: 本文件是uart0,uart1硬件驱动程序;
10 *
11 * 当前版本:1.0
12 * 作 者:李林利
13 * 完成日期:2004年11月14日
14 *
15 * 历史版本:0.9
16 * 原作者 : 李林利
17 * 完成日期:2004年1月1日
18 *************************************************************************************/
19
20 /************************************************************************************/
21 // 引用外部头文件
22 #include "..\config\common.h"
23 #include "uart.h"
24 /************************************************************************************/
25
26
27 /************************************************************************************
28 // 常量及全局变量定义
29 *************************************************************************************/
30
31
32
33 /************************************************************************************
34 * Uart0 功能子程序
35 *************************************************************************************/
36
37 /***********************************************************************************
38 * 函数名称:uart0_init;
39 *
40 * 函数功能描述:uart0 初始化函数,使用定时器1作为时钟,关闭了发送和接收中断;
41 *
42 * 输入参数:BaudRate: byte, 波特率变量,可选择以下波特率:
43 * BaudRate_1200,BaudRate_2400,BaudRate_4800,BaudRate_4800,BaudRate_9600;
44 * BaudRate_19200,BaudRate_38400,BaudRate_57600,BaudRate_115200;
45 *
46 * 返回数据:none;
47 *
48 * 注意: 定时器1资源被占用,SYSCLK = 22.1184Mhz;
49 ************************************************************************************/
50 void uart0_init(INT32U BaudRate) // Init Uart0
51 {
52 1 TR1=0; // Close Timer1
53 1 ET1=0; // Disable Timer1 interrupt
54 1 PT1=0; // Disable Timer1 interrupt Priority
C51 COMPILER V7.50 UART 04/25/2007 16:01:14 PAGE 2
55 1 TMOD&= 0x0f; // TMOD: timer 1, mode 2, 8-bit reload
56 1 TMOD|= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
57 1
58 1 SCON = 0x50; // SCON0: mode 1, 8-bit UART, enable RX
59 1 PCON |= 0x80; // SMOD00 = 1
60 1
61 1
62 1 if (BaudRate>=9600)
63 1 {
64 2 CKCON |= 0x10; // Timer1 uses SYSCLK as time base
65 2 TH1 = -(SYSCLK/(BaudRate*16)); // set Timer1 reload value for baudrate
66 2 }
67 1 else
68 1 {
69 2 CKCON &= ~0x10; // Timer1 uses SYSCLK as time base
70 2 TH1 = -(SYSCLK/(BaudRate*16*12)); // set Timer1 reload value for baudrate
71 2 }
72 1
73 1 ES=0; // Disable Uart0 Interrupt
74 1 PS0=0; // Disable Uart0 Interrupt Priority
75 1
76 1 TI = 1; // Indicate TX0 ready
77 1 RI = 0; // Indicate RX0 ready
78 1
79 1 TR1=1;
80 1 }
81
82
83 /***********************************************************************************
84 * 函数名称:Uart0_ChangeBaudRate;
85 *
86 * 函数功能描述:重新设置uart0波特率;
87 *
88 * 输入参数:BaudRate: byte, 波特率变量,可选择以下波特率:
89 * BaudRate_1200,BaudRate_2400,BaudRate_4800,BaudRate_4800,BaudRate_9600;
90 * BaudRate_19200,BaudRate_38400,BaudRate_57600,BaudRate_115200;
91 *
92 * 返回数据:none;
93 *
94 * 注意: 定时器1资源被占用,SYSCLK = 22.1184Mhz;
95 ************************************************************************************/
96 void Uart0_ChangeBaudRate(INT32U BaudRate)
97 {
98 1
99 1 TR1=0; // Close Timer1
100 1
101 1 if (BaudRate>=9600)
102 1 {
103 2 CKCON |= 0x10; // Timer1 uses SYSCLK as time base
104 2 TH1 = -(SYSCLK/(BaudRate*16)); // set Timer1 reload value for baudrate
105 2 }
106 1 else
107 1 {
108 2 CKCON &= ~0x10; // Timer1 uses SYSCLK as time base
109 2 TH1 = -(SYSCLK/(BaudRate*16*12)); // set Timer1 reload value for baudrate
110 2 }
111 1
112 1 TR1=1;
113 1 }
114
115 /***********************************************************************************
116 * 函数名称:Uart0_Enable;
C51 COMPILER V7.50 UART 04/25/2007 16:01:14 PAGE 3
117 *
118 * 函数功能描述:uart0使能函数,打开或关闭uart0;
119 *
120 * 输入参数:Flag: bool, uart0使能变量;
121 * Flag: true,打开uart0; Flag: false,关闭uart0;
122 *
123 * 返回数据:none;
124 *
125 * 注意: none;
126 ************************************************************************************/
127 void Uart0_Enable(bool Flag)
128 {
129 1 if (Flag)
130 1 TR1=1; // Open Uart0
131 1 else
132 1 TR1=0; // Close Uart0
133 1 }
134
135
136 /***********************************************************************************
137 * 函数名称:Uart0_ISR_Enable;
138 *
139 * 函数功能描述:uart0中断使能函数;
140 *
141 * 输入参数:Flag: bool, uart0中断使能变量;
142 * Flag: true,允许uart0中断; Flag: false,关闭uart0中断;
143 *
144 * 返回数据:none;
145 *
146 * 注意: none;
147 ************************************************************************************/
148 void Uart0_ISR_Enable(bool Flag)
149 {
150 1
151 1 if (Flag)
152 1 ES=1; // Enable Uart0 Interrupt
153 1 else
154 1 ES=0; // Disable Uart0 Interrupt
155 1
156 1 }
157
158
159 /***********************************************************************************
160 * 函数名称:Uart0_ISR;
161 *
162 * 函数功能描述:uart0中断函数;
163 *
164 * 输入参数:none;
165 *
166 * 返回数据:none;
167 *
168 * 注意: 在中断程序内处理尽可能少的事情;
169 ************************************************************************************/
170 void Uart0_ISR(void) interrupt 4
171 {
172 1
173 1 }
174
175
176 /***********************************************************************************
177 * 函数名称:Uart0_SendByte;
178 *
C51 COMPILER V7.50 UART 04/25/2007 16:01:14 PAGE 4
179 * 函数功能描述:通过uart0发送一个字节数据;
180 *
181 * 输入参数:value:unsigned char, 要发送的数据变量;
182 *
183 * 返回数据:none;
184 *
185 * 注意: 发送完数据要清除中断标志;
186 ************************************************************************************/
187 void Uart0_SendByte(unsigned char value)
188 {
189 1 while(!TI); // Wait send 1 byte data finish
190 1 SBUF=value; // Send the data to uart0
191 1 TI=0; // Clear interrupt flag
192 1 }
193
194 /***********************************************************************************
195 * 函数名称:Uart0_SendString;
196 *
197 * 函数功能描述:通过uart0发送一个字符串数据;
198 *
199 * 输入参数:pt: unsigned char xdata *, 要发送的字符串数据变量的指针;
200 *
201 * 返回数据:none;
202 *
203 * 注意: 字符串数据要以零为结束符;
204 ************************************************************************************/
205 void Uart0_SendString(unsigned char code *pt)
206 {
207 1 while(*pt)
208 1 Uart0_SendByte(*pt++);
209 1 }
210
211
212 /***********************************************************************************
213 * 函数名称:Uart0_ReceiveData;
214 *
215 * 函数功能描述:通过uart0接收一个字节数据;
216 *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -