请教高手,怎么实现C8051的GPIO实现UART的读取

yihuagang 2008-03-04 03:39:53

EXTERN XBYTE gxbUartBitNum _AT_ (0x990F);/////当前接受数据的位数
EXTERN XBYTE gxbUart2s _AT_ (0x991F); //ie. SBUF2
EXTERN XBYTE gxbUart2f _AT_ (0x992F); //0:disable 1:read 2:send 3: read completed 4:send completed
EXTERN XBYTE gxbUartreaddata[20] _AT_ (0x994F);////接受的数据不超过20个字节
EXTERN XBYTE gxbUartReadNum _AT_ (0x993F); /////接受数据的个数



VOID READUARTDATA()
{

if( RTX==0) /////if rtx =0 bluetooth data to uart

{
gxbUartBitNum =9;
gxbUart2f=1;
gxbUartReadNum =0;


}
else
{

gxbUart2f=3; ////接受数据完毕
}


}


////////////////////////////

void Timer0(void) interrupt 1 using 2
{


TR0 = 0;
TH0 = TIME_SLICE_H;
TL0 = TIME_SLICE_L;

if(gxbUart2f==1)
{
if(gxbUartBitNum>1)
{
if(TXD)
gxbUart2s=gxbUart2s|(0x01<<(9-gxbUartBitNum));
else
gxbUart2s=gxbUart2s&~(0x01<<(9-gxbUartBitNum));
gxbUartBitNum--;
}
else
{
if(gxbUart2s == 0xaa) ////不接受数据标志位
gxbUart2f=3;
else
gxbUartBitNum =9;
gxbUartreaddata[gxbUartReadNum] = gxbUart2s;
gxbUartReadNum++;
if(gxbUartReadNum==19)
gxbUartReadNum =0 ;

}
}



}
这是我写的,不知道问题在那里 ?请各位大虾指导下 。
...全文
219 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ppzzhhsky 2008-03-06
  • 打赏
  • 举报
回复
if(gxbUart2f==1)
{
if(gxbUartBitNum> 1)
{
if(TXD)
gxbUart2s=gxbUart2s ¦(0x01 < <(9-gxbUartBitNum));
else
gxbUart2s=gxbUart2s&~(0x01 < <(9-gxbUartBitNum));
gxbUartBitNum--;
}
else
gxbUartBitNum只检查了一BIT
island0209 2008-03-06
  • 打赏
  • 举报
回复
最好将外部中断作为接收脚,这样通过外部中断触发定时器中断然后采样才能获得较为准确的数据。

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧