精华内容
下载资源
问答
  • 绍了在 LabVIEW 环境下串口通信的建立方法, 结合 La bVIEW 的功能, 将其应用于单片机串口通信中, 从而实现数据交换等功能。
  • 51单片机串口通信实现16 16点阵显示
  • 本文主要通过一个简单的实例来介绍labVIEW与单片机串口通信实现过程,包括下位机单片机的硬件与软件设计,上位机LabVIEW的前面板和程序框图设计。  1.概述  在现代测控系统中,我们经常会采用上位机和下位机的...
  • 本文主要通过一个简单的实例来介绍labVIEW与单片机串口通信实现过程,包括下位机单片机的硬件与软件设计,上位机LabVIEW的前面板和程序框图设计。  1.概述  在现代测控系统中,我们经常会采用上位机和下位机的...
  • 本文较明确的介绍了用labview实现单片机串口通信原理和技术,对于初学者有一定的好处
  • 51单片机串口通信实现led灯的开关

    千次阅读 多人点赞 2019-09-29 18:47:15
    首先需要了解的是,单片机的P3.1/TXD引脚可以实现发送数据的功能,P3.0/RXD可以实现接收数据的功能。 工作原理大致就是将一组引脚的通过开关控制高低电平,利用TXD引脚将数据发送给另一块芯片,芯片通过接收到的...

    首先需要了解的是,单片机的P3.1/TXD引脚可以实现发送数据的功能,P3.0/RXD可以实现接收数据的功能。
    工作原理大致就是将一组引脚的通过开关控制高低电平,利用TXD引脚将数据发送给另一块芯片,芯片通过接收到的数据来控制led的状态。
    发送方电路:
    ![控制电路](https://img-blog.csdnimg.cn/20190929184848675.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwMjQ3OTQ5,size_16,color_FFFFFF,t_70

    接收方电路:
    ![显示电路](https://img-blog.csdnimg.cn/20190929184918336.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwMjQ3OTQ5,size_16,color_FFFFFF,t_70
    两块芯片分别用TXD引脚/RXD引脚进行发送数据和接收数据。发送方只需要编写一个发送函数,通过while(1)循环,不断更新发送并更新缓存区的数据,达到实时发送数据的目的。
    发送方代码:
    #include <reg51.h>

    void init(unsigned int bps)//初始化,设置不同波特率下计数器的初始值
    {
    unsigned char t;
    SCON=0x50; //设置寄存器工作方式
    PCON=0x00;//smod=0,波特率不倍增
    TI=0;//软件清零
    EA=1;//总中断开启
    ET1=1;//计数器中断开启
    ES=1;//串口中断开启
    TMOD=0x20;//设置中断模式
    switch(bps)//设置不同波特率下计数器初值
    {
    case 1200:t=0xe8;break;
    case 2400:t=0xf4;break;
    case 4800:t=0xfa;break;
    case 9600:t=0xfd;break;
    }
    TH1=t;
    TL1=t;//设置计数初值
    TR1=1;//开启计数器
    }
    void send(unsigned char ch)
    {
    ES=0;//关闭串口中断
    SBUF=ch;//发送数据到缓存区(ch可以看成是一个指向需要发送数据的指针)
    while(TI==0);//等待数据发送完成
    TI=0;//清除中断标记
    ES=1;//开启串口中断
    }
    void main()
    {
    init(9600);//初始化,设置波特率
    while(1)
    {
    send(P0);//循环发送P0口的数据
    }
    }

    接收方所需要做的就是不断接收并读取缓存区的数据,并更新P0引脚的状态。
    #include <reg51.h>
    void init(unsigned int bps)
    {
    unsigned char t;
    SCON=0x50;//设置寄存器工作方式
    PCON=0x00;//smod=0,波特率不倍增
    TI=0;//软件清零
    EA=1;//总中断开启
    ET1=1;//计数器中断开启
    ES=1; //串口中断开启
    TMOD=0x20;//设置中断模式
    switch(bps)//设置不同波特率下计数器初值
    { case 1200:t=0xe8;break;
    case 2400:t=0xf4;break;
    case 4800:t=0xfa;break;
    case 9600:t=0xfd;break;
    }
    TH1=t;
    TL1=t;//设置计数初值
    TR1=1;//开启计数器
    }

    void main()
    {
    init(9600);//初始化,设置波特率
    while(1)
    {
    while(RI= =0);//等待接受完成 }
    }
    void receive() interrupt 4
    {
    if(RI= =1)
    {
    RI=0;
    P0=SBUF;//接收到的数据赋值给P0
    }
    }

    效果图:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190929185127413.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwMjQ3OTQ5,size_16,color_FFFFFF,t_70
    使用开关控制U1的P0引脚的电平的高低来改变P0引脚的值。通过TXD发送数据到U2,将U2接收到的数据发送赋值给P0引脚控制小灯的开关。

    展开全文
  • 描述了虚拟软件LabVIEW和单片机之间经过串口通信的原理与方法
  • 通过改写标准库实现串口的printf() scanf() 实现方法: 首先在mian文件中导入c语言标准库, 然后重写fgetc()和fputc() 如下: int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart1, (uint8_t *)&...

    通过改写标准库实现串口的printf() scanf()

    实现方法:
    首先在mian文件中导入c语言标准库,
    然后重写fgetc()和fputc() 如下:

    int fputc(int ch, FILE *f)
    {
      HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
      return ch;
    }
    
    int fgetc(FILE *f)
    {
      uint8_t ch;
      HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
      return ch;
    }
    

    测试代码:在这里插入图片描述
    通过电脑串口助手观察结果:
    在这里插入图片描述

    展开全文
  • 单片机之间的串口痛惜程序,可以完成多机通信
  • 利用51单片机串口通信,发送字符串 代码如下(模块函数): /*UART.C*/ #include "REG52.H" sfr AUXR = 0x8E; void UartInit(void) //9600bps@11.0592MHz { PCON &= 0x7F; //波特率不倍速 ...
    <pre name="code" class="cpp">利用51单片机的串口通信,发送字符串
    
    
    
    代码如下(模块函数):
    
    
    
    
    /*UART.C*/
    #include "REG52.H"
    sfr AUXR  = 0x8E; 
    void UartInit(void)		//9600bps@11.0592MHz
    {
    	PCON &= 0x7F;		//波特率不倍速
    	SCON = 0x50;		//8位数据,可变波特率
    	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
    	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
    	TMOD &= 0x0F;		//清除定时器1模式位
    	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
    	TL1 = 0xFD;		//设定定时初值
    	TH1 = 0xFD;		//设定定时器重装值
    	ET1 = 0;		//禁止定时器1中断
    	TR1 = 1;		//启动定时器1
    }
    
    void SendChar(unsigned char Char)
    {	
    	SBUF=Char;
    	while(!TI);
    	TI=0;
    }
    
    void  SendString(unsigned char *p)
    {
    	while(*p)
    	{
    		SendChar(*p);
    		p++;
    	}
    }
    
    void main()
    {
    UartInit();
    SendString("finish!");
    while(1);
    }

    /*UART.C*/#include "REG52.H"sfr AUXR = 0x8E; void UartInit(void) //9600bps@11.0592MHz{PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12TAUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFD; //设定定时初值TH1 = 0xFD; //设定定时器重装值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1}void SendChar(unsigned char Char){SBUF=Char;while(!TI);TI=0;}void SendString(unsigned char *p){while(*p){SendChar(*p);p++;}}void main(){UartInit();SendString("finish!");while(1);}
     
    
    展开全文
  • 浅析PLC与单片机串口通信实现.
  • 浅析PLC与单片机串口通信实现.pdf
  • PLC与单片机串口通信实现探讨.pdf
  • 使用串口调试助手观察51单片机keil环境实现串口通信程序。含串口调试助手和USB驱动。
  • 单片机 串口通信

    2012-01-05 16:55:41
    单片机 串口通信 8052 实现两个单片机串口通信 运用8052 单片机实现
  • PC机与单片机串口通讯实现,描述了通讯协议和注意事项
  • 单片机串口通信协议的实现

    千次阅读 2017-12-13 13:27:02
    单片机串口通信协议的实现 单片机上的串口是日常调试和做一些简单人机交互的一种重要的通信方式,其原理网上有一大堆,这里就不再赘述了,下面主要和大家分享一种我在实际项目中经常用到的一个简单的串口通信协议...

    单片机上的串口是日常调试和做一些简单人机交互的一种重要的通信方式,其原理网上有一大堆,这里就不再赘述了,下面主要和大家分享一种我在实际项目中经常用到的一个简单的串口通信协议和实现方式。

    下面以STM32F103这款单片机为例:

    需要的片上资源:UART、TIM

    协议格式:
    这里写图片描述

    描述:整个数据包由16个字节长度的数据组成 两位帧头 两位功能位 十位数据位 两位帧尾

    实现原理:
    将串口配置成中断接收,每次接受到一个8bit的数据则产生一个中断,进入中断后把串口标志位清零并对接受到的数据进行计数和存储,超过16个数据则重新计数,举个例子:

    void USART1_IRQHandler(void)//中断服务函数                    
    {   
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //中断标志位清零
            {
                    if(UART.RxCount > 15)//计数处理
                    {
                        UART.RxCount = 0;
                    }
                        UART.UART_RX_BUF[UART.RxCount++] = USART_ReceiveData(USART1);// 存到数组  
        } 
    } 

    定时器配置10ms产生一次中断,优先级低于串口中断的优先级,加入定时器的目的是检查UART.UART_RX_BUF[ ]这个数组中数据是否为目标帧格式 然后通过解析函数判断帧的的内容和功能并执行相应的功能
    定时器中断服务函数举例:

    void TIM3_IRQHandler(void)//定时器中断服务函数
    {
        if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET)
        {
            TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除标志位   
            UART_Data_Analyse();//解析函数
            UART_Process();//执行函数
        }
    }

    定时器中断服务函数中有两个函数,一个负责对指令的解析,另一个执行指令对应的动作。

    void UART_Data_Analyse(void)//解析函数
    {
        if(UART.UART_RX_BUF[14] + UART.UART_RX_BUF[15] == 0x82)//判定帧尾是否是“AA”
        {
            UART.Tail_Flag = 1;
            if((UART.UART_RX_BUF[0]+UART.UART_RX_BUF[1])>0x95 &&(UART.UART_RX_BUF[0]+UART.UART_RX_BUF[1])<0xA2)//帧头校验
            {
                UART.Head_Flag = 1;
            }
            else
                UART_Flush();//清空标志位和串口接受数组
        }
        else
            UART_Flush();//清空标志位和串口接受数组
    }

    解析函数对串口缓存中的数据进行校验,若不满足条件就清空标志位和串口的接收数组。

    执行函数:

    void UART_Process(void)//执行函数
    {
        if(UART.Process_Flag == 1) Data_Flush(UART.UART_RX_BUF);
    
        if(UART.Process_Flag != 1)//注1
        {
            if(UART.Tail_Flag == 1 && UART.Tail_Flag == 1 && UART.UART_RX_BUF[3] == 0x31)
            {
                switch(UART.UART_RX_BUF[0]+UART.UART_RX_BUF[1])
                {
                    case 0x96:
                                    UART.Process_Flag = 1;Task1();break;
                    case 0x97:
                                    UART.Process_Flag = 1;Task2();break;
                    case 0x98:
                                    UART.Process_Flag = 1;Task3();break;
                    case 0x99:
                                    UART.Process_Flag = 1;Task4();break;
    
                }
            }
        }
    }
    
    void Task1(void)
    {
        //TODO
        UART.Process_Flag = 0; //注1
    }

    注1:提一下 UART.Procsee_Flag 这个标志位,针对上位机(如串口助手)不停的发送指令的情况下 当执行函数正在执行某一个动作的过程中突然识别到一条指令,这个时候要保证当前指令动作完成才能执行下一条指令的情况下需要加入这个标志位,这个标志位可以理解为判忙标志位,当执行对应的Task之前先将该标志位置1,执行完成之后讲标志位清零准备接收下一条指令。在执行的过程中不理会串口的指令并将其清空。

    整个实现方式大致如此,在目前的项目中我经常使用这种协议去调试利用这个协议给单片机传数据或者动作指令,没有遇到过什么bug,但是这个协议还是有可以改进的空间,希望高手批评指正!

    展开全文
  • 利用51 单片机实现串口通信
  • 单片机串口通讯

    2020-08-02 04:33:46
    现在单片机的应用越来越广泛,单片机与PC之间的通信是一个非常重要的应用。如果单纯的从实现单片机与PC的并行通信的角度来说,该实现方法并不是最简单的。...本文的目的是充分利用单片机串口资源与PC机进行通信
  • VB实现PC与单片机串口通信VB实现PC与单片机串口通信
  • 利用两个单片机最小系统板,分别以 10位异步接受/发送(8位数据)进行发送和接受,波特率设置为1.2K。同时将传送的数据用数码管显示出来。
  • Java实现与51单片机串口通信 Serie Library 项目结构 Program Struct 测试代码 package com.lius.testS; import com.lius.series.seriesTool; /** * @author 19862 * 51单片机串口通信 Serie Library...
  • 利用SPComm控件实现的PC机与单片机串口通讯、电子技术,开发板制作交流
  • 51单片机串口通讯实现.

    千次阅读 2018-05-07 16:54:49
    串口通讯实际操作里面往往串口还要和电脑上的上位机软件进行交互,实现电脑软件发送不同的指令,单片机对应执行不同操作的功能,这就要求我们组织一个比较合理的通信机制和逻辑关系,用来实现我们想要的结果。...
  • 51单片机串口通信

    2013-03-31 15:35:10
    单片机串口通信,适用于51单片机,可实现
  • 利用中断方式实现电脑和单片机串口通信 文档中有基础源代码
  • 51 单片机串口通信程序,RS232串口通信 含详细例子。 含详细例子,RS232串口通信单片机接收发送数据的 C51程序,手把手教你用增强型51 实验板实现RS232 串口通信 51串口通信
  • 利用Visual Basic实现PC机与单片机串口通信任务,读取单片机的状态
  • 用Proteus实现电脑和单片机串口通信的仿真

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,544
精华内容 7,017
关键字:

单片机串口通信怎么实现