上位机向单片机发送字符串

问题描述

上位机向单片机发送字符串
上位机向单片机发送一串字符串,存入一个数组缓冲区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

时间: 2024-10-31 22:29:54

上位机向单片机发送字符串的相关文章

c#上位机与单片机通信,上位机接收不到单片机返回的数据

问题描述 c#上位机与单片机通信,上位机接收不到单片机返回的数据 我遇到的问题是: 1上位机给单片机发送数据,单片机能接收到,但是单片机返回的数据上位机收不到 2我不用单片机,直接把数据线上的TX.RX短接,再用上位机发送数据,这时 上位机显示区就能显示上位机发送的数据: 3我用串口调试助手调试单片机程序,调试助手能正常接收单片机返回的数据: 以上3个问题,很是矛盾,不知道哪里出问题了,请高手帮助一下! 解决方案 asc码接收,十六进制接收不行,上位机编码 解决方案二: 曾经写过的一个,接收函数

byte 接收数据 断点-控制器给C#上位机窗口程序发送数据的字节接收问题

问题描述 控制器给C#上位机窗口程序发送数据的字节接收问题 现在的问题是:设置断点后,发现接收的字节长度不稳定,最少是4个,最多会达到上千个. 代码原先是这么写的: int lenth = serialPort1.BytesToRead; if (lenth != 0) { Byte[] receiveByte = new Byte[length]; serialPort1.Read(receiveByte, 0, length) --------------------- ----接收的字节转

stm32不停地发送一个字节的数据,mfc编写的上位机接收到了但是显示乱码

问题描述 stm32不停地发送一个字节的数据,mfc编写的上位机接收到了但是显示乱码 用MFC写了一个串口接收的函数,为了测试,单片机stm32每隔一秒不停地发送同一个数,比如是0x32,想显示在接收框里面,但是每次显示都是乱码,如果以16进制显示就是8位16进制码. 设置断点调试了一下,发现bt是成功接收到了的,但是以cstring显示就乱码了,为什么呢? 代码如下: void C无人机地面控制终端Dlg::OnCommMscomm1() { // TODO: 在此处添加消息处理程序代码 VA

串口通信-51单片机串口发送字符串给电脑 自己写了程序但出不了结果

问题描述 51单片机串口发送字符串给电脑 自己写了程序但出不了结果 #include unsigned char code L1[] = "123456789"; unsigned char code L2[] = "12345678"; void delay(void) { unsigned char n,m; for(m=0;m<200;m++) for(n=0;n<250;n++); } void send_str() { unsigned i =

用串口调试助手给单片机以字符串的形式发送数据时,结尾是不默认添加&amp;amp;#39;\0&amp;amp;#39;的

问题描述 用串口调试助手给单片机以字符串的形式发送数据时,结尾是不默认添加''的 这个你们知道吗?如果我今天才知道,说明什么,你们是通过什么途径知道的, 解决方案 这只是一种通信协议,双方协定了末尾不加结束符

界面-PC与单片机串行通信的上位机设计(温度监控系统)

问题描述 PC与单片机串行通信的上位机设计(温度监控系统) 温度数据要存入sql数据库中,人机界面实现温度的实时显示和查询功能,有没有大神可以提供一份类似的代码供我学习学习,本人电气小白,正在做毕设 解决方案 要实现什么样的,用什么写的上位机i 解决方案二: PC机与单片机串行通信的硬件设计PC机与下位单片机异步串行通信PC机与下位单片机异步串行通信[摘]

怎么实现利用C#编上位机程序,然后通过串口读取单片机的温度数据,并且保存

问题描述 然后利用ACESS数据库存储这些温度数据...大神,求助啊,真心没学过C#,第一步串口接收并保存数据就不会,求大神指点,有代码最好了,我是个菜鸟,,求帮助...... 解决方案 解决方案二:你到不如外包出去.百度谷歌上搜C#串口编程解决了你第一个问题,至于Access存储这些数据,再去看看Ado.Net.自己做就是时间的问题了.解决方案三:类似于这个么?解决方案四:对你得跟下位机确定数据传输规范(也就是高大上的说法协议),然后上位机持续监听,处理数据就ok了解决方案五:引用2楼qq_2

c#上位机实时显示51单片机温度

问题描述 小弟这几天在研究c#的上位机,能够实时显示51的ds18b20的温度,可是却没有头绪,有没有大神可以帮助小弟一下,不胜感激.

Windows环境下PC机与单片机串行通信的实现

 串行通信是计算机和外设进行通讯.对外设进行监控并获取由外设采集到的监测数据的一个非常重要的手段.由于其所用的传输线少,成本低,实现起来方便易行,因而得到广泛的应用.     以往在Windows平台上的串行通信多使用其提供的API函数来实现,这种方法使用起来需要许多底层设置,因而较为繁琐,且难以理解.本文结合笔者在开发遥感CCD相机控制子系统的过程中对串行通信编程的一些经验,介绍在32 b Windows操作系统下,用VisualC++6.0的ActiveX技术实现PC机与单片机之间串行通信的