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 ;
}
}
}
这是我写的,不知道问题在那里 ?请各位大虾指导下 。
if(gxbUart2f==1)
{
if(gxbUartBitNum> 1)
{
if(TXD)
gxbUart2s=gxbUart2s ?(0x01 < <(9-gxbUartBitNum));
else
gxbUart2s=gxbUart2s&~(0x01 < <(9-gxbUartBitNum));
gxbUartBitNum--;
}
else
gxbUartBitNum只检查了一BIT
最好将外部中断作为接收脚,这样通过外部中断触发定时器中断然后采样才能获得较为准确的数据。