📄 uart.lst
字号:
C51 COMPILER V7.50 UART 10/12/2007 17:05:46 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE UART.c OBJECTADVANCED OPTIMIZE(11,SIZE) REGFILE(.\nand_fw2k.ORC) BROWSE ORD
-ER INCDIR(c:\cypress\usb\target\inc) DEFINE(NAND_2K) DEBUG
line level source
1 /************************************************************************************
2 Copyright (C), 1988-2007, Xi'an Keyway Control & Measurement Technology Co., Ltd
3 FileName: UART.c
4 Description :串口模块,主要实现串口初始化及数据传输
5 Version :1.0
6 Function List :
7 History: // 历史修改记录
8 <author> <time> <version > <desc>
9 LigangWang 07/08/07 1.0 build this moudle
10 *************************************************************************************/
11
12 #include "globals.h"
13
14 /*************************************************************************************
15 Function: UM_InitUART
16 Description: 初始化串口,串口参数由CM_ConfigParameter全局变量决定
17 Called By: fw.c main()
18 Input: N/A
19 Output: N/A
20 Return: void
21 Others: 该函数依赖全军变量 CM_ConfigParameter,故在调用该函数前需对其进行
22 初始化。
23 *************************************************************************************/
24
25 void UM_InitUART()
26 {
27 1 TMOD = (TMOD & 0x0F) | 0x20; // 设置定时器1工作方式2,自动重载方式
28 1 if(CM_ConfigParameter.RS232_bps <= RS232_57600
29 1 && CM_ConfigParameter.RS232_bps != 0x00)
30 1 {
31 2 CKCON |= 0x10; //T1M = CLKOUT/4
32 2 PCON |= 0x80 ; // 设置SMOD0=1,波特率加倍
33 2 EICON |= 0x80; // 设置SMOD1=1,波特率加倍
34 2 }
35 1 else if(CM_ConfigParameter.RS232_bps == RS232_115200) //快速波特率模式
36 1 {
37 2 UART230 |= 3;
38 2 PCON &= 0x7F ; // 设置SMOD0=0,
39 2 EICON &= 0x7F; // 设置SMOD1=0,
40 2 }
41 1
42 1 SCON0 = 0x50; // 设置串行口0工作方式1,10位异步收发,REN=0,允许接收。RI=0,TI=0
43 1 SCON1 = 0x50; // 设置串行口1工作方式1,10位异步收发,REN=0,允许接收。RI1=0,TI1=0
44 1 TH1 = CM_ConfigParameter.RS232_bps ; // 设置定时器1的初值
45 1 TL1 = CM_ConfigParameter.RS232_bps;
46 1 ES1 = 1; //允许串口1中断
47 1 TR1 = 1; //允许串口1工作
48 1
49 1 EA = 1; //打开中断
50 1 }
51
52 #ifdef DEBUG_VER
/*************************************************************************************
C51 COMPILER V7.50 UART 10/12/2007 17:05:46 PAGE 2
Function: UM_SendChar
Description: 以发送单字符值到串口1
Called By: ...
Input: ch @ char:欲发送的字符
Output: N/A
Return: void
Others: 调用该函数前须调用UM_InitUART进行初始化串口
*************************************************************************************/
void UM_SendChar(char ch)
{
SBUF1 = ch; //写字符到发送缓冲区
while(TI1 == 0); //等待发送完
TI1 = 0;
}
/*************************************************************************************
Function: UM_SendString
Description: 以发送字符串到串口1,字符串以0结束,长度不固定
Called By: ...
Input: str @ char *:欲发送的字符串
Output: N/A
Return: void
Others: 调用该函数前须调用UM_InitUART进行初始化串口
*************************************************************************************/
void UM_SendString(const char * str)
{
while(*str != 0)
{
UM_SendChar(*str);
str++;
}
}
/*************************************************************************************
Function: UM_SendByte
Description: 发送一个Byte类型值转换成16进制字符串到串口,例如0x5A,则分别发送
5、A的ASIIC值到串口
Called By: ...
Input: ch @ BYTE :欲发送的数值
Output: N/A
Return: void
Others: 调用该函数前须调用UM_InitUART进行初始化串口
*************************************************************************************/
void UM_SendByte(BYTE ch)
{
if((ch >> 4) > 9) //先发送高4位
UM_SendChar((ch >> 4)+0x41-10); //A~F,0x41为'A'的ASIIC码
else
UM_SendChar((ch >> 4)+0x30); //0~9,0x30为'0'的ASIIC码
if((ch & 0x0f) > 9) //处理低4位
UM_SendChar((ch & 0x0f)+0x41-10);
else
UM_SendChar((ch & 0x0f)+0x30);
UM_SendChar(' ');
}
/*************************************************************************************
Function: UM_SendDword
Description: 发送一个双Word类型值转换成16进制字符串到串口
Called By: ...
C51 COMPILER V7.50 UART 10/12/2007 17:05:46 PAGE 3
Input: ch @ BYTE :欲发送的数值
Output: N/A
Return: void
Others: 调用该函数前须调用UM_InitUART进行初始化串口
*************************************************************************************/
void UM_SendDword(DWORD ch)
{
UM_SendByte(((BYTE*)&ch)[0]); //高位优先
UM_SendByte(((BYTE*)&ch)[1]);
UM_SendByte(((BYTE*)&ch)[2]);
UM_SendByte(((BYTE*)&ch)[3]);
UM_SendChar(' ');
}
/*************************************************************************************
Function: UM_SendWord
Description: 发送一个Word类型值转换成16进制字符串到串口
Called By: ...
Input: ch @ BYTE :欲发送的数值
Output: N/A
Return: void
Others: 调用该函数前须调用UM_InitUART进行初始化串口
*************************************************************************************/
void UM_SendWord(WORD ch)
{
UM_SendByte(((BYTE*)&ch)[0]); //高位优先
UM_SendByte(((BYTE*)&ch)[1]);
UM_SendChar(' ');
}
#endif //endif DEBUG_VER
148
149 /*************************************************************************************
150 Function: Serial_Interrupt1
151 Description: 串口1接收中断服务程序,用于接收单个字符并保存到缓冲区
152 Called By: ...
153 Input: N/A
154 Output: N/A
155 Return: void
156 Others: 调用该函数前须调用UM_InitUART进行初始化串口
157 1.FM_CurrentBuff用于指示当前缓冲区 0为FM_DataBuff1,1为FM_DataBuff2
158 2.FM_DPointer1、FM_DPointer2分别用于缓冲区索引
159 3.每接收一个字符索引加以,当当前缓冲区满后切换到另外一个缓冲区+
160 4.每接收一个字符时清除timer0定时值
161 *************************************************************************************/
162 void Serial_Interrupt1() interrupt COM1_VECT
163 {
164 1 if(RI1 == 1)
165 1 {
166 2 RI1 = 0;
167 2 if(FM_CurrentBuff == 0) //当前缓冲区为1
168 2 {
169 3 FM_DataBuff1[FM_DPointer1] = SBUF1; //保存数据
170 3 FM_DPointer1 ++; //索引加1
171 3 if(FM_DPointer1 >= MAX_RS232_BUFF) //缓冲区满后切换缓冲区
172 3 FM_CurrentBuff = 1;
173 3 }
174 2 else //当前缓冲区为2
175 2 {
176 3 FM_DataBuff2[FM_DPointer2] = SBUF1;
177 3 FM_DPointer2 ++;
178 3 if(FM_DPointer2 >= MAX_RS232_BUFF)
C51 COMPILER V7.50 UART 10/12/2007 17:05:46 PAGE 4
179 3 FM_CurrentBuff = 0;
180 3 }
181 2 }
182 1
183 1 timer0_tick = 0; //定时器清零
184 1 }
185
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 247 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -