📄 uartcom2.lst
字号:
C51 COMPILER V7.09 UARTCOM2 12/05/2005 10:23:19 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE UARTCOM2
OBJECT MODULE PLACED IN UARTCom2.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE UARTCom2.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*********************************************************************/
3 /* 模 块 名:单片机(C51) 文件名:uart_com2.c */
4 /* 提交日期:2005年11月29日 作 者:金雨和 */
5 /* 版 本:V1.0 --Copyright(c) 2005-2006中太视讯技术有限公司 */
6 /* 描 述:单片机(C51)串口2处理程序 */
7 /* 修改记录: */
8 /* 日 期 版本 修改人 修改内容 */
9 /* 1. */
10 /*********************************************************************/
11 #include <Reg935.h>
12 #include "uart.h"
13 #include "string.h"
14
15 #define TxD2 INT1 //COM2数据发送脚
16 #define RxD2 RST //COM2数据接收脚
17
18 uchar xdata g_sndBuf[MAX_I2CDATALEN]; //数据发送缓冲
19 uchar g_sndBufLen=20; //数据发送缓冲长度
20 uchar g_sndBufOffset=0; //数据发送偏移
21
22 uchar g_bitSndCnt=0; //数据位发送计数器
23 //uchar g_bitRcvCnt=0; //数据位接收计数器
24 uchar g_rcvByte=0; //所接收到的字节
25 bit g_rcvStartFlag=0; //收到起始位后,数据开始接收标志
26 uchar g_hasRcvOneByte=9; //是否已经完整接收到字符
27
28 extern unsigned char xdata g_ucI2CSendBuf[MAX_I2CDATALEN]; //IIC数据缓存
29 extern unsigned char xdata g_ucI2CSendBuf_Len; //IIC数据缓存内容长度
30 extern unsigned char xdata g_ucI2CSendBuf_offset; //IIC缓存数据读取当前位移
31
32 /*******************************************************************
33 ** 函 数 名: UART2_Init()
34 ** 输 入: 无
35 ** 输 出: 无
36 ** 描 述: UART初始化,波特率9600bit/s
37 ** 全局变量: 无
38 ** 调用模块: 无
39 ** 被调模块:
40 ** main -- 主循环处理函数
41 ** 作 者: 金雨和
42 ** 创建日期: 2005年11月30日
43 ** 修 改:
44 ** 日 期 版本 修改人 修改内容
45 ** 1.
46 ********************************************************************/
47 #define IR_TEST KB0 //红外输入
48
49 void UART2_Init()
50 {
51 1 //P1.4脚为TxD,P1.5脚为RxD,将其设置为准双向口模式
52 1 P1M1 = P1M1 & 0xCF;
53 1 P1M2 = P1M2 & 0xCF;
54 1
55 1 //红外接收 仅为输入
C51 COMPILER V7.09 UARTCOM2 12/05/2005 10:23:19 PAGE 2
56 1 P0M1 = P0M1 & 0xFE; //Input status,set P0.0 input mode
57 1 P0M2 = P0M2 & 0xFE;
58 1
59 1 memset(g_sndBuf, 0, sizeof(g_sndBuf));
60 1 memcpy(g_sndBuf, "this is jinyh test\r\n", 20);
61 1 }
62
63
64 /*******************************************************************
65 ** 函 数 名: timer1_Init()
66 ** 输 入: 无
67 ** 输 出: 无
68 ** 描 述: 初始化定时器0。
69 ** 全局变量: 无
70 ** 调用模块: 无
71 ** 被调模块: 无
72 ** 作 者:
73 ** 创建日期: 2005年11月30日
74 ** 修 改:
75 ** 日 期 版本 修改人 修改内容
76 ** 1.
77 ********************************************************************/
78 void timer1_Init()
79 {
80 1 /* 使能定时器0中断 1 */
81 1 TMOD = TMOD | 0x10;
82 1 TR1 = 1;
83 1 ET1 = 1;
84 1
85 1 //加上红外接收定时器
86 1 //TL1 = 0x01; //100uS
87 1 //TH1 = 0xFF; //定时器0 happen per 0.1MS
88 1
89 1 //去掉红外接收定时器
90 1 // TL1 = 0xC7; //100uS
91 1 // TH1 = 0xFE; //定时器0 happen per 0.1MS
92 1
93 1 TL1 = 0xDD; //100uS
94 1 TH1 = 0xFD; //定时器0 happen per 0.1MS
95 1 }
96
97
98 /*******************************************************************
99 ** 函 数 名: timer1_Isr()
100 ** 输 入: 无
101 ** 输 出: 无
102 ** 描 述: 定时器0中断函数,每0.1ms检测是否有脉冲。
103 ** 全局变量:
104 ** g_pulseNum -- 脉冲数
105 ** g_keyPressed -- 连续按键标志
106 ** 调用模块:
107 ** checkPulse -- 检测脉冲
108 ** 被调模块:
109 ** 作 者: 金雨和
110 ** 创建日期: 2005年08月25日
111 ** 修 改:
112 ** 日 期 版本 修改人 修改内容
113 ** 1.
114 ********************************************************************/
115 void timer1_Isr() interrupt 3
116 {
117 1 if(IR_TEST)
C51 COMPILER V7.09 UARTCOM2 12/05/2005 10:23:19 PAGE 3
118 1 IR_TEST=0;
119 1 else
120 1 IR_TEST=1;
121 1
122 1 //开始发送字符串
123 1 if(g_sndBufLen > 0)
124 1 {
125 2 if(g_bitSndCnt == 0)
126 2 {
127 3 TxD2 = 0;
128 3 g_bitSndCnt++;
129 3 }
130 2 else if(g_bitSndCnt == 9)
131 2 {
132 3 TxD2 = 1;
133 3 g_sndBufOffset++;
134 3 g_sndBufLen--;
135 3 g_bitSndCnt = 0;
136 3 }
137 2 else
138 2 {
139 3 TxD2 = (g_sndBuf[g_sndBufOffset] >> (g_bitSndCnt-1)) & 0x01;
140 3 g_bitSndCnt++;
141 3 }
142 2 }
143 1
144 1 //接收字符串
145 1 if(RxD2 == 0)
146 1 g_rcvStartFlag = 1;
147 1
148 1 //开始接受
149 1 if(g_rcvStartFlag == 1)
150 1 {
151 2 if(g_hasRcvOneByte > 0)
152 2 {
153 3 if(g_hasRcvOneByte <= 8)
154 3 {
155 4 g_rcvByte >>= 1;
156 4 if(RxD2)
157 4 {
158 5 g_sndBuf[g_hasRcvOneByte] = '1';
159 5 g_rcvByte |= 0x80;
160 5 }
161 4 else
162 4 {
163 5 g_sndBuf[g_hasRcvOneByte] = '0';
164 5 g_rcvByte |= 0x00;
165 5 }
166 4 }
167 3
168 3 g_hasRcvOneByte--;
169 3 }
170 2 else
171 2 {
172 3 if(RxD2 == 1) //收到停止位,正确接收到字符
173 3 {
174 4 if(g_rcvByte == 0x0D) //回车键
175 4 {
176 5 memcpy(g_sndBuf, "\r\n", 2);
177 5 g_sndBufLen = 2;
178 5 }
179 4 else if(g_rcvByte == 0x0A) //换行
C51 COMPILER V7.09 UARTCOM2 12/05/2005 10:23:19 PAGE 4
180 4 {
181 5 memcpy(g_sndBuf, "\r\n", 2);
182 5 g_sndBufLen = 2;
183 5 }
184 4 else if(g_rcvByte == 0x08) //backspace键
185 4 {
186 5 g_sndBuf[0] = 0x08;
187 5 g_sndBuf[1] = ' ';
188 5 g_sndBuf[2] = 0x08;
189 5 g_sndBufLen = 3;
190 5 }
191 4 else if(g_rcvByte >= 127) //发送接收到的字符
192 4 {
193 5 g_sndBufLen = 0;
194 5 }
195 4 else
196 4 {
197 5 g_sndBuf[0] = g_rcvByte;
198 5 g_sndBufLen = 1;
199 5
200 5 //将接收到的数据通过IIC发送给BSP15
201 5 g_ucI2CSendBuf[0] = UART2;
202 5 g_ucI2CSendBuf[1] = g_rcvByte;
203 5 g_ucI2CSendBuf_Len = 2;
204 5 g_ucI2CSendBuf_offset = 0;
205 5 IICSendIntToCPU();
206 5
207 5 }
208 4 g_sndBufOffset = 0;
209 4 }
210 3
211 3 g_hasRcvOneByte = 9;
212 3 g_rcvStartFlag = 0;
213 3
214 3 g_rcvByte = 0;
215 3 }
216 2 }
217 1
218 1 //加上红外接收定时器
219 1 //TL1 = 0x01; //100uS
220 1 //TH1 = 0xFF; //定时器0 happen per 0.1MS
221 1
222 1 //去掉红外接收定时器
223 1 // TL1 = 0xC7; //100uS
224 1 // TH1 = 0xFE; //定时器0 happen per 0.1MS
225 1
226 1 TL1 = 0xDD; //100uS
227 1 TH1 = 0xFD; //定时器0 happen per 0.1MS
228 1
229 1 }
230
231
232 /*******************************************************************
233 ** 函 数 名: UART1SendData()
234 ** 输 入:
235 ** pbuf -- 发送数据缓冲
236 ** len -- 发送数据长度
237 ** 输 出: 无
238 ** 描 述: 通过UART连续发送字节数据
239 ** 注意:此程序采用查询方式发送。
240 ** 全局变量: 无
241 ** 调用模块: 无
C51 COMPILER V7.09 UARTCOM2 12/05/2005 10:23:19 PAGE 5
242 ** 被调模块:
243 ** main -- 主循环处理函数
244 ** 作 者: 金雨和
245 ** 创建日期: 2005年11月16日
246 ** 修 改:
247 ** 日 期 版本 修改人 修改内容
248 ** 1.
249 ********************************************************************/
250 void UART2SendData(uchar *pbuf, uchar len)
251 {
252 1 uchar i;
253 1 TI=0;
254 1 for(i=0; i<len; i++)
255 1 {
256 2 SBUF=pbuf[i];
257 2 while(!TI);
258 2 TI=0;
259 2 }
260 1 }
261
262
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 421 ----
CONSTANT SIZE = 24 ----
XDATA SIZE = 20 ----
PDATA SIZE = ---- ----
DATA SIZE = 5 3
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -