2 yuanchenbo yuanchenbo 于 2013.10.12 16:52 提问

上位机向单片机发送字符串
上位机向单片机发送一串字符串,存入一个数组缓冲区RX1_Buffer[COM_RX1_Lenth]中,接下来单片机提取数组缓冲区中的一部分字符串,将该字符串转化为整形数据,接着将整形数据转化为十六进制数通过串口发送给上位机,单片机连续向上位机发送数据,上位机第一次能正确的接收到上位机发送给单片机的数据,过后上位机收到的数据就是错误的,不知道是什么原因,附部分程序代码如下:

void UART1_int (void) interrupt UART1_VECTOR
{
if(RI)

{
RI = 0;
if(COM1.B_RX_OK == 0)
{
if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0;
RX1_Buffer[COM1.RX_Cnt++] = SBUF;
COM1.RX_TimeOut = TimeOutSet1;
}

}
if(TI)
{
TI = 0;
if(COM1.TX_read != COM1.TX_write)
{
SBUF = TX1_Buffer[COM1.TX_read];
if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0;
}
else COM1.B_TX_busy = 0;
}
}
void TX1_write2buff(u8 dat) //写入发送缓冲,指针+1
{
TX1_Buffer[COM1.TX_write] = dat; //装发送缓冲
if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;

if(COM1.B_TX_busy == 0)     //空闲
{  
    COM1.B_TX_busy = 1;     //标志忙
    TI = 1;                 //触发发送中断
}

}
void deal_uart(void)
{
if(RX1_Buffer[0]== 'R')

{
for(i=3;i<5;i++)
Y_arr[i-3] = RX1_Buffer[i];
t_year = strtod(Y_arr,NULL);
TAB_T[5] = DecToHex(t_year);

            for(i=6;i<8;i++)
                M_arr[i-6] =  RX1_Buffer[i];            
            t_month = strtod(M_arr,NULL);
             TAB_T[4] = DecToHex(t_month);
                for(i=9;i<11;i++)
            D_arr[i-9] =  RX1_Buffer[i];                
            t_day = strtod(D_arr,NULL);
             TAB_T[3] = DecToHex(t_day);

            for(i=12;i<14;i++)
                S_arr[i-12] =  RX1_Buffer[i];
            t_hour = strtod(S_arr,NULL);
             TAB_T[2] = DecToHex(t_hour);                COM1.RX_Cnt = 0; 
        }

}
void main(void)
{
while (1)
{
deal_uart();
for(i=0;i<)
TX1_write2buff(TAB_T[i]);
}
}

求原因?

1个回答

wangyaninglm
wangyaninglm   Ds   Rxr 2015.01.18 23:36
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!