📄 iofor232.lst
字号:
147 1 {
148 2 if ( flag_rx_waiting_for_stop_bit )
149 2 {
150 3 if ( --timer_rx_ctr<=0 )
151 3 {
152 4 flag_rx_waiting_for_stop_bit = FALSE;
153 4 flag_rx_ready = FALSE;
154 4 internal_rx_buffer &= 0xFF;
155 4 if ( internal_rx_buffer!=0xC2 )
156 4 {
157 5 inbuf[qin] = internal_rx_buffer;
158 5 if ( ++qin>=IN_BUF_SIZE )
159 5 {
160 6 qin = 0;
161 6 }
162 5 }
163 4 }
164 3 }
165 2 else // rx_test_busy接收忙
166 2 {
167 3 if ( flag_rx_ready==FALSE )
168 3 {
169 4 start_bit = get_rx_pin_status();
170 4 // 判断起始位
171 4 if ( start_bit==0 )
172 4 {
173 5 flag_rx_ready = TRUE;
174 5 internal_rx_buffer = 0;
175 5 timer_rx_ctr = 4;
176 5 bits_left_in_rx =
C51 COMPILER V7.06 IOFOR232 06/08/2005 21:57:39 PAGE 4
177 5 rx_num_of_bits;
178 5 rx_mask = 1;
179 5 }
180 4 }
181 3 else
182 3 {
183 4 if ( --timer_rx_ctr<=0 )
184 4 {
185 5 timer_rx_ctr = 3;
186 5 flag_in =
187 5 get_rx_pin_status();
188 5 if ( flag_in )
189 5 {
190 6 internal_rx_buffer |= rx_mask;
191 6 }
192 5 rx_mask <<= 1;
193 5 if ( --bits_left_in_rx<=0 )
194 5 {
195 6 flag_rx_waiting_for_stop_bit = TRUE;
196 6 }
197 5 }
198 4 }
199 3 }
200 2 }
201 1 }
202 //-------------------------------------------------------------------------------------------------------
203 // 函数名称: init_uart
204 // 功能说明: 初始化异步串口,与硬件无关,通用函数
205 //--------------------------------------------------------------------------------------------------------
206 void init_uart( void )
207 {
208 1 flag_tx_ready = FALSE;
209 1 flag_rx_ready = FALSE;
210 1 flag_rx_waiting_for_stop_bit = FALSE;
211 1 flag_rx_off = FALSE;
212 1 rx_num_of_bits = 10;
213 1 tx_num_of_bits = 10;
214 1 set_tx_pin_low();
215 1 timer_set();
216 1 set_timer_interrupt(); // 使能计时器中断
217 1 }
218 //-------------------------------------------------------------------------------------------------------
219 // 函数名称: get_char
220 // 输入参数: 无
221 // 输出参数: ch,接收数据
222 // 功能说明: 接收一个字节,与硬件无关,通用函数
223 //--------------------------------------------------------------------------------------------------------
224 char get_char( void )
225 {
226 1 char ch;
227 1 do
228 1 {
229 2 while ( qout==qin )
230 2 {
231 3 idle();
232 3 }
233 2 ch = inbuf[qout] & 0xFF;
234 2 if ( ++qout>=IN_BUF_SIZE )
235 2 {
236 3 qout = 0;
237 3 }
238 2 }
C51 COMPILER V7.06 IOFOR232 06/08/2005 21:57:39 PAGE 5
239 1 while ( ch==0x0A || ch==0xC2 );
240 1 return( ch );
241 1 }
242 //-------------------------------------------------------------------------------------------------------
243 // 函数名称: put_char
244 // 功能说明: 接收一个字节,与硬件无关,通用函数
245 //--------------------------------------------------------------------------------------------------------
246 void put_char( char ch )
247 {
248 1 while ( flag_tx_ready );
249 1 user_tx_buffer = ch;
250 1 // 唤醒串口
251 1 timer_tx_ctr = 3;
252 1 bits_left_in_tx = tx_num_of_bits;
253 1 internal_tx_buffer = (user_tx_buffer<<1) | 0x200;
254 1 flag_tx_ready = TRUE;
255 1 }
256 //-------------------------------------------------------------------------------------------------------
257 // 函数名称: flush_input_buffer
258 // 功能说明:初始化缓冲区,与硬件无关,通用函数
259 //--------------------------------------------------------------------------------------------------------
260 void flush_input_buffer( void )
261 {
262 1 qin = 0;
263 1 qout = 0;
264 1 }
265 //-------------------------------------------------------------------------------------------------------
266 // 函数名称: kbhit
267 // 功能说明: 判断接收指针与发送指针是否相等,与硬件无关,通用函数
268 //--------------------------------------------------------------------------------------------------------
269 char kbhit( void )
270 {
271 1 return( qin!=qout );
272 1 }
273 //-------------------------------------------------------------------------------------------------------
274 // 函数名称: turn_rx_on
275 // 功能说明: 开始接收,与硬件无关,通用函数
276 //--------------------------------------------------------------------------------------------------------
277 void turn_rx_on( void )
278 {
279 1 flag_rx_off = FALSE;
280 1 }
281 //-------------------------------------------------------------------------------------------------------
282 // 函数名称: turn_rx_off
283 // 功能说明: 停止接收,与硬件无关,通用函数
284 //--------------------------------------------------------------------------------------------------------
285 void turn_rx_off( void )
286 {
287 1 flag_rx_off = TRUE;
288 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 394 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -