问题描述
- 上位机向单片机发送字符串
-
上位机向单片机发送一串字符串,存入一个数组缓冲区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]);
}
}求原因?
解决方案
http://zhidao.baidu.com/link?url=JWJ81eJwcqzttiE_GUcF1YgP3UxbP2AA6SdAIY1zjMqIN7-mYO8AJ9UFIP2mG9V7G1FOTWvJ5Kor8UiIoV0afoxodevFW-U9l1WwuLkb73G