📄 io_uart232.lst
字号:
C51 COMPILER V7.10 IO_UART232 11/09/2006 11:52:13 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE IO_UART232
OBJECT MODULE PLACED IN io_uart232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE io_uart232.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 *******************************************************************************
3 *51 IO口模拟串口通讯C源程序
4 * Copyright (Ren) 17-Oct-2006
5 * All rights reserved
6 * 文件名称: C51io_uart_t0.C
7 * 当前版本: 2.0V
8 * 作 者: JACK.REN(任永)
9 * 完成日期: Nov./02/2006
10 *------------------------------------------------------------------------------
11 * 取代版本: 1.0V
12 * 作 者: JACK.REN(任永)
13 * 完成日期: Oct./30/2006
14 *------------------------------------------------------------------------------
15 *******************************************************************************
16 * 硬件描述
17 * VCC: DC-5V
18 * VSS: DC-0V
19 * CPU: MCS51
20 * Fosc: CPU —— 22.1184 MHz
21 * RS232 IC: MAX232EPA
22 *******************************************************************************
23 * MCS51 IO模拟UART(232)通讯占用MCS51硬件资源
24 * 1、占用引脚端口:P3.0,P3.1;
25 *
26 * 通讯方式:
27 * 1、Baudrate 9600,8位数据位,1位起始位,1位停止位,无效验位;
28 *
29 *******************************************************************************
30 * 功能描述
31 * 按上层函数提供的数据播发语音。如在播发语音时,又有新的语音到来,放弃
32 * 当前正在播发的语音,立即播放新的语音。
33 *******************************************************************************
34 */
35 #include "marco.H"
36
37 #include "IO_UART_H.H"
38 #include <string.H>
39
40 #include <stdio.H>
41 /*
42 **-----------------------------------------------------
43 ** 函数原型: void IO_UART_Send_1Byte( uint_8 In_ch )
44 ** 功能描述: 该函数用于模拟232端口发送一个字节
45 ** 参数说明: In_ch 将要从模拟232端口发送的——
46 ** 字节缓存寄存器。
47 **
48 ** 返回值: 无
49 **
50 ** 全局变量: 无
51 **
52 ** 调用模块: 无
53 **
54 ** 作 者: 任永
55 ** 日 期: 2006年10月30日
C51 COMPILER V7.10 IO_UART232 11/09/2006 11:52:13 PAGE 2
56 **-----------------------------------------------------
57 */
58 void IO_UART_Send_1Byte( uint_8 In_ch )
59 {
60 1 uint_8 xdata ii, iVal;
61 1 uint_8 xdata iBaud;
62 1
63 1 Dis_CPU_ISR();
64 1
65 1 iVal = In_ch;
66 1 InitAUART232_IO( );
67 1 A_TXD = LOW; //start bit
68 1 iBaud = UART_baudrate + 1;
69 1 BaudrateDelay( iBaud );
70 1 _nop_();_nop_();
71 1 // 发送数据位,低位在前
72 1 for (ii = 0; ii < 8; ii++ )
73 1 {
74 2 iVal >>= 1;
75 2 A_TXD = CY; // data bit
76 2 iBaud = UART_baudrate + 1;
77 2 BaudrateDelay( iBaud );
78 2 }
79 1
80 1 _nop_();_nop_();_nop_();
81 1 A_TXD = HIGH; // stop bit
82 1
83 1 iBaud = UART_baudrate + 3;
84 1 BaudrateDelay( iBaud );
85 1
86 1 En_CPU_ISR();
87 1 }// end of void IO_UART_Send_1Byte( uint_8 In_ch )
88
89
90
91 /*
92 **-----------------------------------------------------
93 ** 函数原型: uint_8 IO_UART_Get_1Byte( void )
94 ** 功能描述: 该函数用于模拟232端口接收一个字节
95 ** 参数说明: 无
96 **
97 ** 返回值: uint_8 模拟232端口接收到的——
98 ** 字节临时寄存器。
99 **
100 ** 全局变量: 无
101 **
102 ** 调用模块: 无
103 **
104 ** 作 者: 任永
105 ** 日 期: 2006年10月30日
106 **-----------------------------------------------------
107 */
108
109 uint_8 IO_UART_Get_1Byte( void )
110 {
111 1 uint_8 xdata out_ch, ibuf1, ibuf2, ibuf3, ibuf4, ii;
112 1 uint_8 xdata iBaud;
113 1
114 1 Dis_CPU_ISR();
115 1
116 1 A_RXD = HIGH;
117 1 while ( A_RXD == HIGH ) // 等待起始位 2Mach
C51 COMPILER V7.10 IO_UART232 11/09/2006 11:52:13 PAGE 3
118 1 {
119 2 //if (10mS超时判断)
120 2 {
121 3 //IO_UART_Get_FlagReg = IO_UART_Get_Err;
122 3 //return ( 0 );
123 3 ;
124 3 //...................................
125 3 }
126 2 }
127 1 iBaud = UART_baudrate + 1;
128 1 BaudrateDelay( iBaud );
129 1 _nop_();_nop_();_nop_();_nop_();
130 1
131 1 // read data bit
132 1 for (out_ch = ii = 0; ii < 8; ii++ )
133 1 {
134 2 ibuf1 = ibuf2 = ibuf3 = 0;
135 2
136 2 // 集中到中心频率度数
137 2 iBaud = 8;
138 2 BaudrateDelay( iBaud );
139 2 ibuf1 = A_RXD; //47
140 2 iBaud = 2;
141 2 BaudrateDelay( iBaud );
142 2 ibuf2 = A_RXD;
143 2 iBaud = 2;
144 2 BaudrateDelay( iBaud );
145 2 ibuf3 = A_RXD;
146 2 // 数据干扰识别
147 2 if ( ibuf1 == ibuf2 )
148 2 {
149 3 ibuf4 = ibuf1;
150 3 _nop_();_nop_();_nop_();_nop_();_nop_();
151 3 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
152 3 }
153 2 else if ( ibuf2 == ibuf3 )
154 2 {
155 3 ibuf4 = ibuf2;
156 3 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
157 3 }
158 2 else if (ibuf1 == ibuf3)
159 2 {
160 3 ibuf4 = ibuf3;
161 3 }
162 2 else
163 2 {
164 3 // 通讯失败
165 3 IO_UART_Get_FlagReg = IO_UART_Get_Err;
166 3 break;
167 3 //.............................
168 3 }
169 2 out_ch >>= 1;
170 2 if ( ibuf4 )
171 2 {
172 3 out_ch |= 0x80;
173 3 }
174 2 else
175 2 {
176 3 _nop_();_nop_();_nop_();_nop_();_nop_();
177 3 }
178 2
179 2 iBaud = 1;
C51 COMPILER V7.10 IO_UART232 11/09/2006 11:52:13 PAGE 4
180 2 BaudrateDelay( iBaud );
181 2 }
182 1 // check stop bit
183 1
184 1 iBaud = UART_baudrate;
185 1 BaudrateDelay( iBaud );
186 1 if ( A_RXD )
187 1 {
188 2 IO_UART_Get_FlagReg = IO_UART_Get_OK;
189 2 }
190 1 else
191 1 {
192 2 IO_UART_Get_FlagReg = IO_UART_Get_Err;
193 2 }
194 1 A_RXD = HIGH;
195 1
196 1 En_CPU_ISR();
197 1 return ( out_ch );
198 1 }// end of uint_8 IO_UART_Get_1Byte( void )
199
200
201
202 /*
203 **-----------------------------------------------------
204 ** 函数原型: void main( void )
205 ** 功能描述: 该函数用于调度个功能函数
206 ** 参数说明: 无
207 **
208 ** 返回值: 无
209 **
210 ** 全局变量: 无
211 **
212 ** 调用模块: 无
213 **
214 ** 作 者: 任永
215 ** 日 期: 2006年10月30日
216 **-----------------------------------------------------
217 */
218
219 void main( void )
220 {
221 1 uint_8 xdata GetChar;
222 1 uint_8 xdata Txt_buf1[ ] = {"调试软件\n"};
223 1 uint_8 xdata Txt_buf2[ ] = {"KeilC51汉字内码测试软件\n测试码:三二一\n "};
224 1 uint_8 xdata Txt_buf[ ] = {"调试成功,2006年11月06日\n"};
225 1 uint_8 xdata iVal, ilen;
226 1
227 1
228 1 ilen = strlen( Txt_buf2 );
229 1 for (iVal = 0; iVal < ilen; iVal++ )
230 1 {
231 2 IO_UART_Send_1Byte( Txt_buf2[ iVal ] );
232 2 }
233 1 ilen = strlen( Txt_buf1 );
234 1 for (iVal = 0; iVal < ilen; iVal++ )
235 1 {
236 2 IO_UART_Send_1Byte( Txt_buf1[ iVal ] );
237 2 }
238 1
239 1 //******************** 功能测试代码 Start ******************
240 1 ilen = strlen( Txt_buf );
241 1 GetChar = 0;
C51 COMPILER V7.10 IO_UART232 11/09/2006 11:52:13 PAGE 5
242 1 while ( 1 )
243 1 {
244 2
245 2 GetChar = IO_UART_Get_1Byte();//接收1字节。
246 2
247 2 }// end of while ( 1 )
248 1 //******************** 功能测试代码 End *******************
249 1
250 1 }// end of void main( void )
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 386 ----
CONSTANT SIZE = 76 ----
XDATA SIZE = 4 78
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -