📄 uart.lst
字号:
C51 COMPILER V7.50 UART 03/09/2005 10:13:44 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: E:\学习工具\Keil51\C51\BIN\C51.EXE uart.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************************
2 * 文件:uart.c
3 * 功能:UART0和UART1基本操作程序库
4 * 作者:宋智宁
5 * 日期:2005.3.8
6 * 备注:支持P89C669,中断服务程序由用户来修改
7 *********************************************************************************/
8 #include "config.h"
9
10 /******************************************************************************
11 * 名称:Uart_Init()
12 * 功能:UART初始化子程序
13 * 入口参数:bit uart_no --选择串口(0或1)
14 * unsigned char mode--串口模式
15 * unsigned int bd_rate--常用波特率
16 * 出口参数:无
17 * 使用全局变量:无
18 * 说明:(1) CPU:P89C669
19 * (2) 晶振频率:11.0592 MHz
20 * (3) 机器周期:0.54 us
21 * (4) UART0: 用TIMER1 ; UART1: 用BRG
22 * (5) 注意串口工作方式和中断的开启
23 ******************************************************************************/
24 void Uart_Init(bit uart_no, unsigned char mode, unsigned int bd_rate)
25 {
26 1 unsigned int timerval;
27 1
28 1 EA = 0; //初始化时关总中断
29 1
30 1 if(!uart_no) //uart0
31 1 {
32 2 //----Timer1-Init-----------------------------
33 2 TMOD = (TMOD&0x0f)+0x20; //TIMER1,MODE2
34 2
35 2 timerval = 0x00 - 57600/bd_rate; //BD_RATE = (fosc/(6*N))/32;
36 2 TR1 = 0;
37 2 TH1 = (unsigned char)timerval;
38 2 TL1 = (unsigned char)timerval;
39 2 TR1 = 1;
40 2 //----Uart0-Init-----------------------------
41 2 PCON &= 0xBF; //SMOD0 = 0;
42 2 if(mode<=3)
43 2 {
44 3 S0CON = (mode<<6) | 0x10; //SERIAL0 MODE=mode ; REN=1; SM2=0
*** ERROR C202 IN LINE 44 OF UART.C: 'S0CON': undefined identifier
45 3 }
46 2
47 2 #if SERIAL_INT_EN==1
ES0 = 1;
#else
50 2 ES0 = 0;
*** ERROR C202 IN LINE 50 OF UART.C: 'ES0': undefined identifier
51 2 #endif
52 2 }
53 1 else //uart1
C51 COMPILER V7.50 UART 03/09/2005 10:13:44 PAGE 2
54 1 {
55 2 //----BRG-Init-------------------------------
56 2 timerval = (57600/bd_rate)*32*6 - 16; //bd_rate = fosc/(brate+16);
57 2 BRGCON &= 0xFE; //BRGEN = 0;
*** ERROR C202 IN LINE 57 OF UART.C: 'BRGCON': undefined identifier
58 2 BRGR1 = (unsigned char)(timerval>>8);
*** ERROR C202 IN LINE 58 OF UART.C: 'BRGR1': undefined identifier
59 2 BRGR0 = (unsigned char)timerval;
*** ERROR C202 IN LINE 59 OF UART.C: 'BRGR0': undefined identifier
60 2 BRGCON |= 0x01; //BRGEN = 1;
*** ERROR C202 IN LINE 60 OF UART.C: 'BRGCON': undefined identifier
61 2 //----Uart1-Init-----------------------------
62 2 PCON &= 0x7F; // SMOD1 = 0;
63 2 if(mode<=3)
64 2 {
65 3 S1CON = (mode<<6) | 0x10; //SERIAL1 MODE=mode ; REN=1; SM2=0
*** ERROR C202 IN LINE 65 OF UART.C: 'S1CON': undefined identifier
66 3 }
67 2
68 2 #if SERIAL_INT_EN==1
ES1 = 1;
#else
71 2 ES1 = 0;
*** ERROR C202 IN LINE 71 OF UART.C: 'ES1': undefined identifier
72 2 #endif
73 2 }
74 1 EA = 1; //开总中断 (注意串行中断的ISR)
75 1 }
76
77 /******************************************************************************
78 * 名称:Uart_Send_Byte()
79 * 功能:Uart发送 N Byte子程序
80 * 入口参数:bit uart_no --选择串口(0或1)
81 * unsigned char buf[] --发送数据指针
82 * unsigned char num --发送字节数
83 * 出口参数:无
84 * 使用全局变量:无
85 ******************************************************************************/
86 void Uart_Send_Byte(bit uart_no, unsigned char buf[], unsigned char num)
87 {
88 1 unsigned char i;
89 1
90 1 if(!uart_no) //uart0
91 1 {
92 2 #if SERIAL_INT_EN==1
ES0 = 0; //关中断
#endif
95 2 for(i=0; i<num; i++)
96 2 {
97 3 S0BUF = buf[i]; //Uart
*** ERROR C202 IN LINE 97 OF UART.C: 'S0BUF': undefined identifier
98 3 while(!TI_0); //wait for send
*** ERROR C202 IN LINE 98 OF UART.C: 'TI_0': undefined identifier
99 3 TI_0 = 0;
*** ERROR C202 IN LINE 99 OF UART.C: 'TI_0': undefined identifier
100 3 }
101 2 #if SERIAL_INT_EN==1
ES0 = 1; //开中断
#endif
104 2 }
105 1 else //uart1
106 1 {
C51 COMPILER V7.50 UART 03/09/2005 10:13:44 PAGE 3
107 2 #if SERIAL_INT_EN==1
ES1 = 0; //关中断
#endif
110 2 for(i=0; i<num; i++)
111 2 {
112 3 S1BUF = buf[i]; //Uart
*** ERROR C202 IN LINE 112 OF UART.C: 'S1BUF': undefined identifier
113 3 while(!TI_1); //wait for send
*** ERROR C202 IN LINE 113 OF UART.C: 'TI_1': undefined identifier
114 3 TI_1 = 0;
*** ERROR C202 IN LINE 114 OF UART.C: 'TI_1': undefined identifier
115 3 }
116 2 #if SERIAL_INT_EN==1
ES1 = 1; //开中断
#endif
119 2 }
120 1
121 1 }
122 /******************************************************************************
123 * 名称:Uart_Send_Str()
124 * 功能:Uart顺序发送字符串子程序
125 * 入口参数:bit uart_no --选择串口(0或1)
126 * unsigned char *str_dat ----字符串指针
127 * 出口参数:无
128 * 使用全局变量:无
129 ******************************************************************************/
130 void Uart_Send_Str(bit uart_no, unsigned char *str_p)
131 {
132 1 if(!uart_no) //uart0
133 1 {
134 2 #if SERIAL_INT_EN==1
ES0 = 0; //关中断
#endif
137 2 while((*str_p)!=0)
138 2 {
139 3 S0BUF = (*str_p++); //uart0
*** ERROR C202 IN LINE 139 OF UART.C: 'S0BUF': undefined identifier
140 3 while(!TI_0); //wait for send
*** ERROR C202 IN LINE 140 OF UART.C: 'TI_0': undefined identifier
141 3 TI_0 = 0;
*** ERROR C202 IN LINE 141 OF UART.C: 'TI_0': undefined identifier
142 3 }
143 2 #if SERIAL_INT_EN==1
ES0 = 1; //开中断
#endif
146 2 }
147 1 else //uart1
148 1 {
149 2 #if SERIAL_INT_EN==1
ES1 = 0; //关中断
#endif
152 2 while((*str_p)!=0)
153 2 {
154 3 S1BUF = (*str_p++); //uart1
*** ERROR C202 IN LINE 154 OF UART.C: 'S1BUF': undefined identifier
155 3 while(!TI_1); //wait for send
*** ERROR C202 IN LINE 155 OF UART.C: 'TI_1': undefined identifier
156 3 TI_1 = 0;
*** ERROR C202 IN LINE 156 OF UART.C: 'TI_1': undefined identifier
157 3 }
158 2 #if SERIAL_INT_EN==1
ES1 = 1; //开中断
C51 COMPILER V7.50 UART 03/09/2005 10:13:44 PAGE 4
#endif
161 2 }
162 1 }
163 /******************************************************************************
164 * 名称:Uart_Rev_Byte()
165 * 功能:Uart等待接收 N Byte中断子程序
166 * 入口参数:bit uart_no --选择串口(0或1)
167 * unsigned char buf[] --接收缓冲区
168 * unsigned char num --接收字节数
169 * 出口参数:无
170 * 使用全局变量:无
171 ******************************************************************************/
172 void Uart_Rev_Byte(bit uart_no, unsigned char buf[], unsigned char num)
173 {
174 1 unsigned char i;
175 1
176 1 if(!uart_no) //uart0
177 1 {
178 2 #if SERIAL_INT_EN==1
ES0 = 0; //关中断
#endif
181 2 for(i=0; i<num; i++)
182 2 {
183 3 while(!RI_0); //uart0
*** ERROR C202 IN LINE 183 OF UART.C: 'RI_0': undefined identifier
184 3 buf[i] = S0BUF; //receive data
*** ERROR C202 IN LINE 184 OF UART.C: 'S0BUF': undefined identifier
185 3 RI_0 = 0;
*** ERROR C202 IN LINE 185 OF UART.C: 'RI_0': undefined identifier
186 3 }
187 2 #if SERIAL_INT_EN==1
ES0 = 1; //开中断
#endif
190 2 }
191 1 else //uart1
192 1 {
193 2 #if SERIAL_INT_EN==1
ES1 = 0; //关中断
#endif
196 2 for(i=0; i<num; i++)
197 2 {
198 3 while(!RI_1); //uart1
*** ERROR C202 IN LINE 198 OF UART.C: 'RI_1': undefined identifier
199 3 buf[i] = S1BUF; //receive data
*** ERROR C202 IN LINE 199 OF UART.C: 'S1BUF': undefined identifier
200 3 RI_1 = 0;
*** ERROR C202 IN LINE 200 OF UART.C: 'RI_1': undefined identifier
201 3 }
202 2 #if SERIAL_INT_EN==1
ES1 = 1; //开中断
#endif
205 2 }
206 1 }
207
208
209 #if SERIAL_INT_EN==1
/******************************************************************************
* 名称:ISR_Uart0_Rev()
* 功能:Uart0接收数据中断服务程序
* 入口参数:无
* 出口参数:无
C51 COMPILER V7.50 UART 03/09/2005 10:13:44 PAGE 5
* 使用全局变量:unsigned char buf[]--接收缓冲区
* 说明:本函数由用户根据需要修改
******************************************************************************/
void ISR_Uart0_Rev(void) interrupt 4
{
//GM8125_Byte_Rev(); //GM8125数据接收子程序(供中断服务程序调用)
}
/******************************************************************************
* 名称:ISR_Uart1_Rev()
* 功能:Uart1接收数据中断服务程序
* 入口参数:无
* 出口参数:无
* 使用全局变量:unsigned char buf[]--接收缓冲区
* 说明:本函数由用户根据需要修改
******************************************************************************/
void ISR_Uart1_Rev(void) interrupt 10
{
if(TI_1) //发送中断
{
TI_1 = 0;
return;
}
if(RI_1) //接收中断
{
RI_1 = 0;
GM8125_Byte_Rev(S1BUF); //GM8125数据接收处理子程序(供中断服务程序调用)
}
}
#endif
C51 COMPILATION COMPLETE. 0 WARNING(S), 26 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -