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

justsee   2008-3-4 15:39 楼主
       
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 ;
            
        }
    }


       
}
这是我写的,不知道问题在那里 ?请各位大虾指导下 。

回复评论 (4)

   if(gxbUart2f==1)
    {
        if(gxbUartBitNum> 1)
        {
            if(TXD)
            gxbUart2s=gxbUart2s ?(0x01 < <(9-gxbUartBitNum));
            else
            gxbUart2s=gxbUart2s&~(0x01 < <(9-gxbUartBitNum));
            gxbUartBitNum--;
        }
        else
gxbUartBitNum只检查了一BIT
点赞  2008-3-6 12:54
最好将外部中断作为接收脚,这样通过外部中断触发定时器中断然后采样才能获得较为准确的数据。
点赞  2008-3-6 15:19
支持搂主,收藏
点赞  2008-4-30 22:00
什么呀
点赞  2008-5-1 17:36
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复