精华内容
下载资源
问答
  • 串口如何发送8位数组,用什么类型,什么函数进行发送?如果数组元素是变量呢?急求
  • vspd为虚拟串口,安装后可以任意虚拟两个互通的串口,使用上位机可以选择任意一个串口作为接收,然后使用sscom5.13像另外一个串口发送文件"B0网跳动数据源“文件即可模拟串口接收。
  • 经过好长时间的钻研和摸索,终于成功地将硬件的串口数据发送到了Excel表格里。下面详细讲解将硬件串口数据发送到Excel里的方法。首先,打开Excel代码编辑器,添加窗体,插入串口控件。接着,编写以下代码。Private ...

    经过好长时间的钻研和摸索,终于成功地将硬件的串口数据发送到了Excel表格里。下面详细讲解将硬件串口数据发送到Excel里的方法。

    首先,打开Excel代码编辑器,添加窗体,插入串口控件。

    98804df63d50afa5af98cb328c6c45fd.png

    接着,编写以下代码。

    8723623a178f861f54090917c8174487.png

    Private Sub btn_Close_Click()

    MSComm1.PortOpen = False

    btn_Start.Enabled = True

    btn_Close.Enabled = False

    End Sub

    Private Sub btn_exit_Click()

    If MSComm1.PortOpen = True Then

       MSComm1.PortOpen = False

    End If

    Unload UserForm1

    End Sub

    Private Sub btn_Start_Click()

    iniMSComm

    MSComm1.PortOpen = True

    btn_Close.Enabled = True

    btn_Start.Enabled = False

    End Sub

    Private Sub iniMSComm()

    MSComm1.CommPort = 5

    MSComm1.Settings = "115200,n,8,1"

    MSComm1.RThreshold = 1

    MSComm1.InputLen = 0

    MSComm1.PortOpen = True

    MSComm1.InputMode = comInputModeText

    MSComm1.RTSEnable = True

    MSComm1.InBufferCount = 0

    End Sub

    Private Sub MSComm1_OnComm()

    Dim t1 As Long, com_string As String

    Static i As Integer

    t1 = Timer

    Select Case MSComm1.CommEvent

       Case comEvReceive

           MSComm1.RThreshold = 0

           Do

               DoEvents

           Loop While Timer - t1 < 0.01

           com_string = MSComm1.Input

           MSComm1.RThreshold = 1

           i = i + 1: If i > 255 Then i = 1

           Application.Cells(3, i).Value = com_string

    End Select

    End Sub

    Private Sub UserForm_Initialize()

    iniMSComm

    End Sub

    然后,用串口模块连接好电路板和电脑,给电路板供电工作。

    0801bb2598af30f43f28e7c2e893d768.png

    运行代码,就会看到串口信息在Excel里打印出来了。

    22c03ba5c7bd84e7bf2b361e15851072.png

    最后,把编好代码的Excel保存成xlsm格式的文件,以后想用时,直接打开就可以。对这个Excel感兴趣的朋友,可以到群里下载。

    展开全文
  • 非常详细的介绍了如何使用STM32的串口USART发送数据,还附带非常完整的程序。
  • 在做下位机通信时往往会用到串口,包括下位机将数据传输给上位机,或者是下位机与下位机之间进行数据传输,这时候就会遇到发送数据的问题,单片机通过串口发送数据时往往是一次一个字节(8位),如果传输char(8位)...

    原文中有点小错误,做了小更改。

    在做下位机通信时往往会用到串口,包括下位机将数据传输给上位机,或者是下位机与下位机之间进行数据传输,这时候就会遇到发送数据的问题,单片机通过串口发送数据时往往是一次一个字节(8位),如果传输char(8位)型数据则很好办,只需要直接发送就可以了,但是在发送int型数据和float型数据时就会稍微有些复杂。

        下面就以常用的8位单片机89c51为例来进行说明。

        当发送int型或long型数据时还比较简单,一个int型数据是16位,long是32位,把int型/long型数据变成2/4个char型数据发送出去就可以了,程序如下

    void long_char(unsigned long l,unsigned char *s)
    {
        *s = l>>24;

        *(s+1) = l>>16;

        *(s+2) = l>>8;

        *(s+3) = l;  
    }

    在串口助手上就可以接收到相应的long型数据了。

        当发送float型数据时稍微有些复杂。下面简单介绍下float型数据在内存中的存储方式(double类似,以下部分参考了别人的博客)。

        float遵从的是IEEE R32.24 在存储中都分为三个部分:
    1.符号位(Sign) : 0代表正,1代表为负 
    2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 
    3.尾数部分(Mantissa):尾数部分

    float的存储方式如下图所示:

        R32.24和R64.53的存储方式都是用科学计数法来存储数据的,比如8.25用十进制的科学计数法表示就为:8.25*clip_image0021,而120.5可以表示为:1.205*clip_image0022

        而计算机根本不认识十进制的数据,他只认识0,1,所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示,8.25用二进制表示可表示为1000.01,120.5用二进制表示为:1110110.1。用二进制的科学计数法表示1000.01可以表示为1.00001*clip_image002[2],1110110.1可以表示为1.1101101*clip_image002[3],任何一个数都的科学计数法表示都为1.xxx*clip_image002[1],尾数部分就可以表示为xxxx,第一位都是1,所以可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit,道理就是在这里,那24bit能精确到小数点后几位呢,我们知道9的二进制表示为1001,所以4bit能精确十进制中的1位小数点,24bit就能使float能精确到小数点后6位,而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了,所以指数部分的存储采用移位存储,存储的数据为元数据 127,下面就看看8.25和120.5在内存中真正的存储方式。

         首先看下8.25,用二进制的科学计数法表示为:1.00001*clip_image002[2]

    按照上面的存储方式,符号位为:0,表示为正,指数位为:3 127=130 ,位数部分为,故8.25的存储方式如下:

    =======================================

    0-1000 0010-0000 1000 0000 0000 0000 000

    +-指数为3----尾数部分-------------------------------

    而单精度浮点数120.5的存储方式如下图所示:

    0-1000 0010-1101 1010 0000 0000 0000 000

    +-指数为6-----尾数部分


    那么如果给出内存中一段数据,并且告诉你是单精度存储的话,你如何知道该数据的十进制数值呢?其实就是对上面的反推过程,比如给出如下内存数据:0100001011101101000000000000,首先我们现将该数据分段,0 10000 0101 110 1101 0000 0000 0000 0000,在内存中的存储就为下图所示:

    根据我们的计算方式,可以计算出,这样一组数据表示为:1.1101101*clip_image002[3]=120.5而双精度浮点数的存储和单精度的存储大同小异,不同的是指数部分和尾数部分的位数。

        介绍完了float型数据在内存中的存储方式后能够知道如何发送float型数据了,直接按照int型类似的发送肯定是不行的,这就需要采用指针的方法(在keil中数据的排放格式是大端模式):

    void float_char(float f,unsigned char *s)
    {
     unsigned char *p;
     
     p = (unsigned char *)&f;

        *s = *p;

        *(s+1) = *(p+1);

        *(s+2) = *(p+2);

        *(s+3) = *(p+3);
    }

        通过这种方法把数组s发送出去,在接受端接受到的就是标准的IEEE754结构的原始数据,也就是float型数据在内存中存放的值,如果需要得到这个float型数据的值还需要进行一个转换。

        这种方法比较简单明了,这时候的串口接收端可以用现成的,不需要自己编写。

        还可以采用共用体的方法,如果采用共用体时串口的接收端软件需要自己编写。

        我们知道共用体可以使不同的数据类型来共享相同的地址空间,所以程序如下:

    void float_char(float f,unsigned char *s)
    {
     union change
        {
            float d;

         unsigned char dat[4];
        }r1;

     r1.d = f;

        *s = r1.dat[0];

        *(s+1) = r1.dat[1];

        *(s+2) = r1.dat[2];

        *(s+3) = r1.dat[3];  
    }

    接收端采用同样的程序编写就可以得到float型数据的值了,不再需要其他的转换。

    类似的,传输long型或int型时也可以采用共用体的方法:

    void long_char(unsigned long l,unsigned char *s)
    {
     union change
        {
            long d;

         unsigned char dat[4];
        }r1;

     r1.d = l;

        *s = r1.dat[0];

        *(s+1) = r1.dat[1];

        *(s+2) = r1.dat[2];

        *(s+3) = r1.dat[3];  
    }

        同时,还有一种内存操作函数/调用库函数的方法,但这种方法对编译器要求过高,在这里就不介绍了。

    转自http://blog.csdn.net/liangwei88624/article/details/6885803

    展开全文
  • 如何用一个I/O引脚模拟串口发送数据
  • static char uartchar[]={...//发送字符串 void put_s(unsigned char *ptr) { while (*ptr) { USART_Transmit(*ptr++); } } 程序有问题吗?没有数据出来,请大神指教 我用的是mega8 8M晶振 9600波特率
  • 不知道我这样设置,这样读数据不知道哪里有问题....读不进来.[img=https://img-bbs.csdn.net/upload/201605/22/1463879653_470174.png][/img]这是RM417相关参数....大家给看看,或者有什么好的接收程序,谢谢各位了
  • 假设(MCU)串口发送这样的一系列命令 同步头 + 地址码 + 命令字 + 数据长度 + 数据正文 + 校验码 一、将数据丢到sendbuf, 然后使用 void send_command(uint8_t * sendbuf, uint8_t length)类似的函数发送...
  • Visual C#通过Com串口发送和接收数据,通过Windows的COM1串口发送数据,同时也演示了如何接收数据,串口在系统硬件编程方面有着重要价值,希望通过这些简单的C#实例,让更多的初学者掌握一些有关串口的编程技巧。...
  • 很少看到有资料写如何以中断的方式发送一帧数据,如果以等待的发送数据帧,对高速运行的单片机来说是很浪费时间的,下面就介绍一种使用中断方式发送数据帧,操作平台采用51 mcu 首先定义一个数据帧的结构体,该...
  • //主机向血压板发送数据 void Set_Init_pressure_OnReceive(void); //血压板返回给主机数据 void Set_Init_pressure_OnClose(void); //关闭串口 private: int str[100]; DWORD dwErrorFlags; COMSTAT...
  • 上面的for ()循环是把dwWriteSize个数据串口发送出去,是不是for循环结束后,数据就完全从串口发送出去了呢? 在测试中发现,如果在for循环后立即把TxD功能引脚改变为输入,会出现串口发送数据最后一个字节会...
  • 经过好长时间的钻研和摸索,终于成功地将硬件的串口数据发送到了Excel表格里。下面详细讲解将硬件串口数据发送到Excel里的方法。首先,打开Excel代码编辑器,添加窗体,插入串口控件。接着,编写以下代码。Private ...

    经过好长时间的钻研和摸索,终于成功地将硬件的串口数据发送到了Excel表格里。下面详细讲解将硬件串口数据发送到Excel里的方法。

    首先,打开Excel代码编辑器,添加窗体,插入串口控件。

    fc781ec81192f759dda97f75db163886.png

    接着,编写以下代码。

    3dd99b38ee83833ad5ff405b32972ad5.png

    Private Sub btn_Close_Click()

    MSComm1.PortOpen = False

    btn_Start.Enabled = True

    btn_Close.Enabled = False

    End Sub

    Private Sub btn_exit_Click()

    If MSComm1.PortOpen = True Then

    MSComm1.PortOpen = False

    End If

    Unload UserForm1

    End Sub

    Private Sub btn_Start_Click()

    iniMSComm

    MSComm1.PortOpen = True

    btn_Close.Enabled = True

    btn_Start.Enabled = False

    End Sub

    Private Sub iniMSComm()

    MSComm1.CommPort = 5

    MSComm1.Settings = "115200,n,8,1"

    MSComm1.RThreshold = 1

    MSComm1.InputLen = 0

    MSComm1.PortOpen = True

    MSComm1.InputMode = comInputModeText

    MSComm1.RTSEnable = True

    MSComm1.InBufferCount = 0

    End Sub

    Private Sub MSComm1_OnComm()

    Dim t1 As Long, com_string As String

    Static i As Integer

    t1 = Timer

    Select Case MSComm1.CommEvent

    Case comEvReceive

    MSComm1.RThreshold = 0

    Do

    DoEvents

    Loop While Timer - t1 < 0.01

    com_string = MSComm1.Input

    MSComm1.RThreshold = 1

    i = i + 1: If i > 255 Then i = 1

    Application.Cells(3, i).Value = com_string

    End Select

    End Sub

    Private Sub UserForm_Initialize()

    iniMSComm

    End Sub

    然后,用串口模块连接好电路板和电脑,给电路板供电工作。

    6f83e2644e0c93f48f4d822c5d76871d.png

    运行代码,就会看到串口信息在Excel里打印出来了。

    83d2e836adaa0ca227596a8bc31ca7d4.png

    最后,把编号代码的Excel保存成xlsm 格式的文件,以后想用时,直接打开就可以。

    展开全文
  • VB.NET串口通讯支持总是让人觉得有所不足,在使用VB6的MsComm32.ocx时,很多人都会在VB.NET的开发中觉得很困扰。这里讲述的VB.NET串口通讯类使用native代码,并且它是通API调用实现的,你会发现VB.NET串口通讯就是...
  • 在keil中的标准C库中,printf、scanf等输入输出数据流函数是通过fputc、fgetc来实现最底层操作的,所以我们只需要在我们的工程中重定义这两个函数的功能就可以实现printf、scanf等数据流函数的重映射。因此看到通过...

    printf函数是标准的库函数,定义在stdio.h文件中。

    printf函数在keil的底层:

        在keil中的标准C库中,printf、scanf等输入输出数据流函数是通过fputc、fgetc来实现最底层操作的,所以我们只需要在我们的工程中重定义这两个函数的功能就可以实现printf、scanf等数据流函数的重映射。因此看到通过printf函数向串口输出字节,一般会有如下fputc函数的重定义。

    // 加入以下代码支持printf函数
    #if 1
    #pragma import(__use_no_semihosting)             
             
    struct __FILE 
    { 
    	int handle; 
    
    }; 
    
    FILE __stdout;       
    
    _sys_exit(int x) 
    { 
    	x = x; 
    } 
    
    int fputc(int ch, FILE *f)  // 重新定义fputc函数
    {      
    	while((USART1->SR&0X40)==0);//
        USART1->DR = (u8) ch;      
    	return ch;
    }
    #endif 

     

    展开全文
  • 2018-8-29 11:16我编写的主程序中LED无法点亮,硬件电路核查过没问题,void Data_anlysize()函数... #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器#define uint unsigned int //对数据类型进行声...
  • 用CSerialPort类实现串口通讯,该类在收到数据后会调用::sendmessage函数,该函数的第一个参数是窗口句柄,但是控制台没有窗口句柄,该怎么发送消息?main函数里怎么 响应消息?
  • python 使用线程接收串口数据,并同时可进行串口数据发送。 问题:1、如何发送与接收同时通过线程来完成操作。 2、接收到的串口数据 打印数据显示为b‘XXX’格式,那么怎么转换呢? 由于从没系统看过python的...
  • 我正在建立一个包含多个表单的表单。 这个想法是只以第一种形式连接到串行端口。 当单击一个按钮时,它... 在此有许多按钮可以通过串行端口发送数据。 我无法在这些表格之间建立联系我尝试了以下内容:我是新来的,...
  • 最近在做 casio dt930的盘点机,有一个问题是需要和pc端的一个系统进行数据对接,是直接将保存的数据通过串口通信发送出来,这该如何操作?谢谢了。
  • 我现在有一个光机,经我测试只有选择了以十六进制方式发送才可以接受到数据并且响应,否则同样的数据以字符方式发送就无任何反映,请问如何以十六进制发送方式向串口发送数据? 工具是 串口调试助手!!
  • 在介绍float型数据的处理和发送之前,先介绍一下大端和小端以及联合体的大小分析。一.什么是大端小端?如何测试你的CPU是大端还是小端?1.大端小端:小端:采用小端模式的CPU对操作数的存放方式是从低字节到高字节;...
  • 在介绍数据发送和接收之前,我们先来了解下异步通信的数据格式。异步通信的数据格式异步通信规定传输的数据格式由起始位(start bit)、数据位(data bit)、奇偶校验位(parity bit)和停止位(stop bit)组成。如...
  • FPGA 学习笔记(十二) 如何串口发送32位数据

    千次阅读 热门讨论 2017-03-16 15:24:40
    在笔者之前所用的串口中,串口一次只能发送数据为8位,这跟串口通信的协议方式有关系。而最近笔者的项目中需要用到一次发送32位的数据。笔者最开始想到的是32位数据发送4次。 为了不改动原来的串口通信协议驱动,...
  • 1.概述 串口转以太网目前可以采用串口转以太网模块来实现,变得非常简单易用,但是在该技术中出现的一些新问题、使用误区需要引起注意。串口转以太网并不是简单传输媒介的变化,而是串口到TCP/IP的协议转化。其中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 807
精华内容 322
关键字:

串口如何发送数据