📄 commrs232.lst
字号:
207 ** 调用模块:
208 **
209 ** 作 者:
210 ** 日 期:
211 **-------------------------------------------------------------------------------------------------------
212 ** 修 改 人: 李伟
213 ** 日 期: 2008年12月09日
214 **-------------------------------------------------------------------------------------------------------
215 ********************************************************************************************************/
216 void soft_receive_enable() //允许接收
217 {
218 1 rs_f_RI_enable = 1; //允许接收
219 1 rs_f_TI_enable = 0; //禁止发送
220 1 soft_receive_init(); //监测起始位, RXD 下降沿触发接收字节过程.
221 1 }
222 /********************************************************************************************************
223 ** 函数名称: void soft_send_enable (void) //允许发送
224 ** 功能描述:
225 ** 输 入: 无
226 ** 输 出: 无
227 ** 全局变量:
228 ** 调用模块:
229 **
230 ** 作 者:
231 ** 日 期:
232 **-------------------------------------------------------------------------------------------------------
233 ** 修 改 人: 李伟
234 ** 日 期: 2008年12月09日
235 **-------------------------------------------------------------------------------------------------------
236 ********************************************************************************************************/
237 void soft_send_enable (void) //允许发送
238 {
239 1 TCON_ENABLE_TIMER = 0; //停止定时器
240 1 rs_f_TI_enable = 1; //允许发送
241 1 rs_f_RI_enable = 0; //禁止接收
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 5
242 1
243 1 rs_shift_count = 0; //清移位计数器
244 1 rs_f_TI = 1; //发送一个字符完毕标志
245 1 TCON_ENABLE_TIMER = 1; //启动定时器
246 1 }
247 /********************************************************************************************************
248 ** 函数名称: void rs_send_byte(uint8 SendByte) //发送一个字节
249 ** 功能描述:
250 ** 输 入: 无
251 ** 输 出: 无
252 ** 全局变量:
253 ** 调用模块:
254 **
255 ** 作 者:
256 ** 日 期:
257 **-------------------------------------------------------------------------------------------------------
258 ** 修 改 人: 李伟
259 ** 日 期: 2008年12月09日
260 **-------------------------------------------------------------------------------------------------------
261 ********************************************************************************************************/
262 //由收转到发时,要先调用 soft_send_enable ()
263 void rs_send_byte(uint8 SendByte) //发送一个字节
264 {
265 1 while ( rs_f_TI == 0); //等待发送完毕前一个字节
266 1 rs_TXD = 1;
267 1 rs_timerL = rs_START_BIT_L; //下次中断在起始位的末尾时刻
268 1 rs_timerH = rs_START_BIT_H;
269 1 rs_BUF = SendByte;
270 1 rs_shift_count = 10;
271 1 rs_TXD = 0; //发送起始位
272 1 rs_f_TI = 0; //清已发送完毕一个字节的标志
273 1 }
274 /********************************************************************************************************
275 ** 函数名称: void initiate_MCU (void) //系统初始化
276 ** 功能描述:
277 ** 输 入: 无
278 ** 输 出: 无
279 ** 全局变量:
280 ** 调用模块:
281 **
282 ** 作 者:
283 ** 日 期:
284 **-------------------------------------------------------------------------------------------------------
285 ** 修 改 人: 李伟
286 ** 日 期: 2008年12月09日
287 **-------------------------------------------------------------------------------------------------------
288 ********************************************************************************************************/
289 void Initiate_RS232(void) //系统初始化
290 {
291 1 soft_rs232_init(); //串口初始化
292 1 EA = 1; //开中断
293 1 }
294 /*********************************************************************************************************
295 ** 函数名称: void Rs232CommSendByteWithChk(uint8 Commdata)
296 ** 功能描述:
297 ** 输 入: 无
298 ** 输 出: 无
299 ** 全局变量:
300 ** 调用模块:
301 **
302 ** 作 者: 李伟
303 ** 日 期: 2008年12月09日
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 6
304 **-------------------------------------------------------------------------------------------------------
305 ** 修 改 人:
306 ** 日 期:
307 **-------------------------------------------------------------------------------------------------------
308 ********************************************************************************************************/
309 void Rs232CommSendByteWithChk(uint8 Commdata)
310 {
311 1 uint8 i,j;
312 1 i = Commdata >> 4;
313 1 j = Commdata & 0x0F;
314 1 if(i<10)
315 1 i += 0x30;
316 1 else
317 1 i += 0x37;
318 1 if(j<10)
319 1 j += 0x30;
320 1 else
321 1 j += 0x37;
322 1 Rs232ComCalculChkSum += i;
323 1 Rs232ComCalculChkSum += j;
324 1 rs_send_byte(i);
325 1 rs_send_byte(j);
326 1 }
327 /*********************************************************************************************************
328 ** 函数名称: void Rs232CommSendByteWithoutChk(uint8 Commdata)
329 ** 功能描述:
330 ** 输 入: 无
331 ** 输 出: 无
332 ** 全局变量:
333 ** 调用模块:
334 **
335 ** 作 者: 李伟
336 ** 日 期: 2008年12月10日
337 **-------------------------------------------------------------------------------------------------------
338 ** 修 改 人:
339 ** 日 期:
340 **-------------------------------------------------------------------------------------------------------
341 ********************************************************************************************************/
342 void Rs232CommSendByteWithoutChk(uint8 Commdata)
343 {
344 1 uint8 i,j;
345 1 i = Commdata >> 4;
346 1 j = Commdata & 0x0F;
347 1 if(i<10)
348 1 i += 0x30;
349 1 else
350 1 i += 0x37;
351 1 rs_send_byte(i);
352 1 if(j<10)
353 1 j += 0x30;
354 1 else
355 1 j += 0x37;
356 1 rs_send_byte(j);
357 1 }
358 /*********************************************************************************************************
359 ** 函数名称: void Rs232CommSendWordWithChk(uint16 Commword)
360 ** 功能描述:
361 ** 输 入: 无
362 ** 输 出: 无
363 ** 全局变量:
364 ** 调用模块:
365 **
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 7
366 ** 作 者: 李伟
367 ** 日 期: 2008年12月10日
368 **-------------------------------------------------------------------------------------------------------
369 ** 修 改 人:
370 ** 日 期:
371 **-------------------------------------------------------------------------------------------------------
372 ********************************************************************************************************/
373 void Rs232CommSendWordWithChk(uint16 Commword)
374 {
375 1 Rs232CommSendByteWithChk((uint8)(Commword>>8));
376 1 Rs232CommSendByteWithChk((uint8)(Commword));
377 1 }
378 /********************************************************************************************************
379 ** 函数名称: void soft_rs232_interrupt( void )
380 ** 功能描述:
381 ** 输 入: 无
382 ** 输 出: 无
383 ** 全局变量:
384 ** 调用模块:
385 **
386 ** 作 者:
387 ** 日 期:
388 **-------------------------------------------------------------------------------------------------------
389 ** 修 改 人: 李伟
390 ** 日 期: 2008年12月09日
391 **-------------------------------------------------------------------------------------------------------
392 ********************************************************************************************************/
393 void soft_rs232_interrupt( void )
394 {
395 1 /************************ 接收 ****************************/
396 1 if (rs_f_RI_enable == 1)
397 1 {
398 2 if (rs_shift_count == 0) //移位计数器==0, 表示检测到起始位的起点
399 2 {
400 3 if ( rs_RXD == 1 )
401 3 {
402 4 soft_receive_enable (); //起始位错, 从新开始
403 4 }
404 3 else
405 3 {
406 4 //下次中断在数据位或停止位中的某时刻发生
407 4 rs_timerL += rs_FULL_BIT_L;// + 0x10;
408 4 rs_timerH = rs_FULL_BIT_H;
409 4 rs_shift_count++;
410 4 rs_BUF = 0; //清移位缓冲变量
411 4 }
412 3 }
413 2 else
414 2 {
415 3 rs_timerL += rs_FULL_BIT_L; //下次中断在数据位或停止位中发生
416 3 rs_timerH = rs_FULL_BIT_H;
417 3
418 3 rs_shift_count++; //2--9:数据位 10:停止位
419 3
420 3 if ( rs_shift_count == 9)
421 3 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -