导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[讨论]单片机串行通信c语言源程序。。[atang]

 *第15007篇: [讨论]单片机串行通信c语言源程序。。

  
楼 主:atang 2003年7月29日21:05
 [讨论]单片机串行通信c语言源程序。。
看到UART串行通信c源程序中有这个函数: 
bit GetCommCharWait1(unsigned char idata *ch,unsigned charT) 
                                                 //T ms 
{ Count1ms=T;*ch=0; 
while (Count1ms) 

if (CommRecBufferTail1!=CommRecBufferHead1) break; 

if (Count1ms==0) return 0; 
*ch=CommRecBuffer1[CommRecBufferHead1]; 
CommRecBufferHead1++; 
if (CommRecBufferHead1==DB_RECMAXSIZE1) 

CommRecBufferHead1=0; 

if (CommRecBufferTail1==CommRecBufferHead1) 
FlagRecComm1=0; 
return 1; 

分析了很久不知道这个函数具体是做什么用的,还有那个while(Count1ms) 
循环是不是有点问题呢??? 大家帮忙分析一下,谢谢!!!
  
2楼:wugang 2003年7月30日08:28
 此程序是判断查找起始桢头用的,while(Count1ms) 用来循环查找起始桢头,你要好好看程序,
  
3楼:龙芯四十三号 2003年7月30日08:42
 还是看我的回答=>>
//超时处理 在1ms中断中有 Count1ms--;
//当Count1ms减到0是无数据接收返回0
while (Count1ms) 

if (CommRecBufferTail1!=CommRecBufferHead1) break;   // 有数据接收 中止等待

if (Count1ms==0) return 0; 

// 数据接收采用循环缓冲区 CommRecBuffer1[RECMAXSIZE1];
// CommRecBufferHead1 为头指针,应用程序用(消费指针)
// CommRecBufferTail1 为尾指针,接收用(生产指针)
// 取接收到的数据(消费一个数据)  
*ch=CommRecBuffer1[CommRecBufferHead1]; 
CommRecBufferHead1++; 

//循环缓冲处理
if (CommRecBufferHead1==DB_RECMAXSIZE1) 

CommRecBufferHead1=0; 

if (CommRecBufferTail1==CommRecBufferHead1) 
FlagRecComm1=0; 
return 1; 


>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:我们的单片机版块前几天开张了

[下一篇主题]:请问有没有人做过瓦楞纸横切机或者飞剪之类的控制系统,愿意与你交流!