精华内容
下载资源
问答
  • 通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上...
  • 用自己焊的51最消息系统,配置51单片机的串口中断,与串口调试助手连接通信。
  • 串口调试软件可用于DSP,STM32,51等系列单片机进行串口调试使用,软件优秀,不会出现数据传输卡顿以及闪退等问题
  • 下面介绍一种利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法。使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。
  • 本文主要介绍了51单片机串口调试程序一列。
  • 51单片机解析野火PID串口调试助手协议
  • 51单片机串口通讯详解

    千次阅读 多人点赞 2019-11-04 22:10:20
    由于大部分51单片机不支持在线调试功能,所以串口作为一种有效的调试功能,所以在51单片机程序开发时,无法进行在线调试,不妨可以多采用串口来进行调试。 1.串口配置 51单片机配置除了需要配置2个8位寄存器SCON、...

    串口,作为单片机程序开发中最常用、最方便,也是应用最广泛的程序调试方法;无论是作为调试工具,打印出调试信息,还是对功能模块进行通信,串口是每个单片机开发人员最常用的单片机外设。
    由于大部分51单片机不支持在线调试功能,所以串口作为一种有效的调试功能,所以在51单片机程序开发时,无法进行在线调试,不妨可以多采用串口来进行调试。
    1.串口配置

    51单片机配置除了需要配置2个8位寄存器SCON、PCON外,还要配置定时器1的控制寄存器TMOD,因为串口在进行收发需要使用定时器来采样。
    (1)状态控制寄存器 SCON
    SCON 是一个逐位定义的 8 位寄存器,用于控制串行通信的方式选择、接收和发送,指 示串口的状态,SCON 即可以字节寻址也可以位寻址,字节地址 98H,地址位为 98H~9FH。 它的各个位定义如下:
    在这里插入图片描述
    SM0 和 SM1 是串口的工作方式选择位,2 个选择位对应 4 种工作方式,如下表,其中 Fosc 是振荡器的频率。
    在这里插入图片描述
    (2)电源与波特率控制寄存器
    控制寄存器 PCON 也是一个逐位定义的 8 位寄存器,目前仅仅有几位有定义,如下所示:
    在这里插入图片描述
    仅最高位 SMOD 与串口的控制有关,其他位与掉电方式有关。PCON 的地址为 87H 只能按 字节寻址,SMOD 是串行通信波特率系数控制位,当串口工作在工作方式 1、2 时,若使用 T1 作为波特率发生器其 SMOD=1 则波特率加倍。
    (3)定时器控制模式寄存器
    TMOD是定时器、计数器模式控制寄存器,它是一个逐位定义的8为寄存器,但只能使用字节寻址
    在这里插入图片描述
    当串口工作在工作方式0和2是,波特率固定,方式0时fosc/12;方式2时fosc/32或fosc/64(根据SMOD判断)。当串口工作在方式1时,波特率=(2^SMOD/32)*(单片机时钟频率/(256-X)),X是初值;C/T#为定时器和计数器选择位,0为定时器,1为计数器

    2.串口通用程序
    为了有较好的通用性,将串口程序配置为一个H文件和C文件,往后只要开发51单片机程序,都可以将该两个文件复制在工程中直接使用,无须修改。
    (1)uart.H

    #ifndef _UART_H_
    #define _UART_H_
    
    #include "reg52.h"
    
    void UartInit(void);
    void Send_string(unsigned char *c);
    void Send_Data(unsigned char DAT);
    
    #endif
    

    (2)uart.c

    #include "uart.h"
    
    //串口初始化
    void UartInit(void)
    {
    	/*串口初始化 */
    	TMOD = 0x20;	  //定时器T1使用工作方式2
    	SCON = 0x50;	  //工作方式1,,允许接收   
    	PCON = 0x10;
    	TH1 = 253;        // 设置初值,波特率9600bps
    	TL1 = 253;
    	TR1 = 1;          // 开始计时	
    	ES = 1;         //打开接收中断
    	EA = 1;           // 打开所以中断   
    	TI = 0;
    	RI = 0;
    }
    
    void Send_Data(unsigned char DAT)
    {
    	ES = 0;
    	TI=0;
    	SBUF = DAT ;
    	while(TI==0);
    	TI=0;
    	ES = 1;
    }
    
    void Send_string(unsigned char  *c)
    {
    	while(*c != '\0')
    	{
    		Send_Data(*c++);
    	}	
    }
    
    void RSINTR() interrupt 4 using 2
    {
    	EA=0;
    	if(TI==1) //发送中断	  
    	{
    		TI=0;
    	}
    
    	if(RI==1)	 //接收中断		  
    	{	
    
    		RI=0;								 
    
    	}
    	EA=1;
    }
    
    

    如需串口参考例程, 请关注公众号,首页回复“串口”获取资料
    在这里插入图片描述

    展开全文
  • 本文介绍了基于串口的C8051F单片机系统调试软件
  • DS18B20 51单片机串口调试程序,运用串口调试温度十分方便,适合初学者
  • 51单片机串口通信原理讲解

    千次阅读 多人点赞 2019-10-24 23:54:50
    51单片机串口通信 今天研究了一下51单片机的串口通信,使用的单片机是普中科技开发板,但实际上所运用到的硬件和其他品牌单片机都相同,没有区别,总结一下,自己的理解和看法。 通信原理 通信原理大致分为串行和...

    51单片机串口通信


    今天研究了一下51单片机的串口通信,使用的单片机是普中科技开发板,但实际上所运用到的硬件和其他品牌单片机都相同,没有区别,总结一下,自己的理解和看法。

    通信原理

    通信原理大致分为串行和并行两种方法,各有优缺点,也不再这里赘述了,使用到的是串行通信的方法,简单介绍一下串行通信的原理,上图

    两个设备,一根互传线,每次传一组数据,总长度不一定8位,由51单片机内部设定来决定。设备间通信有许多接口方式,我用的是51上的串行接口,挂图:
    在这里插入图片描述
    SBUF:是指串行口中的两个缓冲寄存器,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的,但地址是重叠的。它们都是字节寻址的寄存器,字节地址均为99H,
    TXD:Transmit(tx) Data; RXD: Receive(rx) Data;
    两个口通过缩写记一下,我经常记不住(丢人),所以上面的那一个SBUF是发送,下面的是接收寄存器,发送或者接收的数据将暂时储存于里面,编程时直接赋值就行,TH1和TL1是时钟的配置系统,主要用于控制波特率,及每秒发送的总位数。(调试时一定要对应自己设置的波特率)

    控制寄存器SCON:内部结构下图,主要用于设置串口工作方式、接发送控制,以及状态位的控制
    在这里插入图片描述
    SM0和SM1是控制工作方式下图,控制每组总数据(起止位+数据位)的位数。移位则是一个脉冲一个一个脉冲的发送输入输出数据。
    SM2多机通信控制位,方式2和3时。SM2控制RB8是否会触发RI中断,SM2=1时R8=1激活中断(中断将数据读走),R8=0则不激活;SM2=0则失去控制作用。不论RB是否为0,RI都能激活,方式0时,SM2必须为0;方式1时,SM2=0,接受到停止位,R1中断就打开。
    REN允许串行接受位,REN=1,则打开接受,否则不能接受数据。
    TB,方式2和3中才用到,是奇偶效验位
    RB,在方式2、3中还是做奇偶效验位,在方式1中做数据停止位的存放位,用来将RI自动置1,启动中断。
    在这里插入图片描述
    PCON:用于控制波特率是否加倍,及SMOD=1,波特率加倍。复位时SMOD=0;
    在这里插入图片描述
    好了,大致通信原理讲到这里,下面到使用讲解!

    程序编写

    步骤:
    1、确定TMOD(计数器)工作方式
    2、配置TH1和TL1初值
    3、配置SCON、PCON
    4、打开中断允许位(总中断、串口中断),配置中断(中断内主要是SBUF读取发送数据),配置TCON打开中断即TR1置1.

    上代码:作用串口通信输入值,再返回

    include<reg52.h>
    typedef unsigned char u8;
    
    void ready(void)
    {
    	TMOD = 0X20;
    	TH1=0XFF;
    	TL1=0XF9; //波特率9600
    	SCON=0X50;//0101 0000
    	PCON=OX80;//1000 0000
    	EA=1; //打开总中断
    	ES=1; //打开串口中断,相当于ET1 ET0
    	TR1=1;//打开计数器,当其溢出时会给SMOD一个脉冲,接受和读取数据,达到设置波特率作用
    		  //当接受到停止位时RI=1触发中断
    }
    
    void main(void)
    {
    	ready();
    	while(1);
    }
    
    void time1(void) interrupt 4
    {
    	static u8 result;
    	result=SBUF;//进入配置中断,读取数据
    	RI=0;
    	SBUF=result;//将数据输入到SBUF里面发送
    	while(!TI);//等待发送完毕
    	TI=0;
    }
    

    一个简单的串口通信收发完成了

    展开全文
  • 本文章详细论述了用户在程序中如何具体使用串口1和独立波特率发生器BRT以及在程序中如何具体使用串口2。
  • 51单片机串口调试程序.docx
  • 单片机串口调试助手

    2012-01-04 20:26:59
    单片机 串口调试助手
  • 51单片机串口通信以及printf调试串行通信1.串口初始化串口工作方式波特率设置通过软件直接生成串口初始化代码2.输出到串口3.发送字符串到串口4.printf重定向到串口5.补充printf格式化输出 串行通信 不知道你们写...

    串行通信

    不知道你们写单片机程序的时候有没有烦恼,它没有想c语言的dos窗口,没有java的运行窗口,没有python的控制台,有时候想输出一条调试信息却无法做到,下面通过简单的方法,将调试信息通过51单片机的串口输出到串口。

    1.串口初始化

    只介绍本案例中需要使用的一些知识,串口初始化主要是选择串口工作方式和设置波特率。

    串口工作方式

    通过SCON寄存器中的SM0和SM1设置工作方式,REN为是否允许接收,一般设置这三个即可;在这里插入图片描述

    SM0 = 0;
    SM1 = 1;   //设置工作方式2,波特率可调
    REN  = 1; //允许接收
    /*或者直接对SCON整体赋值*/
    SCON = 0x50;
    

    波特率设置

    波特率是通过定时/计数器T1的溢出值设置的,先确定要使用的波特率,然后通过波特率求出T1的溢出值,计算出计数初值,并对T1进行初始化。

    PCON = 0X00;   //波特率不加倍
    TMOD = 0X20;  //选择T1计数器工作方式2
    TH1 = 0XFD;
    TH1 = 0XFD;   //设置波特率 
    TR1 = 1;      //启动定时/计数器
    
    

    通过软件直接生成串口初始化代码

    可以直接使用stc的下载程序软件直接生成初始化代码
    在这里插入图片描述
    选择合适的参数,然后生成代码,例如:
    波特率9600,晶振11.05926的初始化

    void UartInit(void)		//9600bps@11.0592MHz
    {
    	PCON &= 0x7F;		//波特率不倍速
    	SCON = 0x50;		//8位数据,可变波特率
    	TMOD &= 0x0F;		//清除定时器1模式位
    	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
    	TL1 = 0xFD;		//设定定时初值
    	TH1 = 0xFD;		//设定定时器重装值
    	ET1 = 0;		//禁止定时器1中断
    	TR1 = 1;		//启动定时器1
    }
    

    2.输出到串口

    编写底层函数,输出字节信息到串口,串口通信只需要往SBUF发送缓冲寄存器中写入数据即可,然后通过查询或者中断方式对发送溢出标志位清零。

    //发送一个字节数据
    void sendByte(unsigned char dat){
       SBUF = dat;     //写入发送缓冲寄存器
       while(!TI);    //等待发送完成,TI发送溢出标志位 置1
       TI = 0;      //对溢出标志位清零	
    }
    

    3.发送字符串到串口

    只需要将底层函数sendByte二次封装一下即可

    void sendString(unsigned char *string){
    	while(*string!='\0'){    //指针的数据没到最后一位一直执行循环体
    		sendByte(*string++); //发送指针指向的数据(字节byte)
    							 //指针自增,指向下一个数据 
    	}
    }
    
    

    4.printf重定向到串口

    只需要重写他调用的一个底层函数即可

    /*
    **重写printf调用的putchar函数,重定向到串口输出
    **需要引入头文件<stdio.h>
    *****/
    char putchar(char c){
    	//输出重定向到串口
    	sendByte(c);
    	return c;  //返回给函数的调用者printf
    }
    

    同时需要引入头文件 <stdio.h>
    这样即可使用printf直接输出调试信息

    5.补充printf格式化输出

    和c语言中的格式输出稍微一些不同
    例如打印 unsigned char 类型的数据需要使用 %bd

    unsigned char dat1 = 48;
    printf("char-->%bd\r\n",dat1);   //无符号字符型使用%bd显示十进制数
    

    在这里插入图片描述

    通过stc自带的串口助手就可以查看串口输出信息
    在这里插入图片描述

    展开全文
  • 本程序基于Protues实现了:51单片机,在非阻塞模式下,利用串口可以接收不固定长度数据帧。如果要与电脑实现通信,请使用串口调试软件配合,注意配置protues中的串口号和波特率,与电脑保持一致。
  • 串口通信在电子行业中应用较广,通过上位机发送命令,实现各种功能的控制及数据的反馈。本文就是在51单片机上实现串口收发命令,程序调试正常,可以运用到控制系统中。
  • 1.1连接串口调试助手,对其发送随机数据,串口助手发送0x00指令,单片机停止发送数据,发送0x01指令,单片机继续发送数据。 二、开发步骤 2.1 初始化定时器,中断 TMOD=0x20; //定时器T1方式2 TH1=0xf4; //...

    项目要求:下位机使用单片机,不断发送一个随机数值给上位机,上位机收到数据,显示在显示框中。
    上位机部分:https://blog.csdn.net/weixin_42462552/article/details/85937289



    一、功能介绍

    1.1连接串口调试助手,对其发送随机数据,串口助手发送0x00指令,单片机停止发送数据,发送0x01指令,单片机继续发送数据。

    二、开发步骤

    2.1 初始化定时器,中断

       TMOD=0x20;    		//定时器T1方式2
       TH1=0xf4; 	   		//设置串行口波特率为2400 bps
       TL1=0xf4;		
       TR1=1;		     	//启动波特率发生器
       SCON=0x50;   		//串行口工作方式1,允许接收
       EA=1;		     	//开总中断允许位
       ES=1;      	 		//开串行口中断
    

    2.2 编写随机函数

    unsigned int random()
    {
      	unsigned int value;
    	value = rand() % (500 + 1- 1) + 1;//范围:1-500
      	return value;
    }
    

    2.3 编写串行口中断函数,接收来自PC机的数据

    void serial()interrupt 4	//串行口中断类型号是4
    { 
    	 unsigned char rxch; 
    	 if(RI)                  //中断标志 RI=1, 数据接收 
    	 { 
    		RI = 0;              //软件清零 
    		rxch = SBUF;         //读缓冲  
        	if (rxch==0x00)        //停止指令
        	 	 frameFlag =0;       //设置接收完标志位       
    		if (rxch==0x01)      //继续指令
         		 frameFlag =1;      //设置接收完标志位       
    	} 
    }
    

    2.4 发送数据函数

    //功能:向串口发送一个字符串
    void send_string_com(unsigned char str)
    {
    	SBUF = str;
    	while(TI == 0);            //等待发送完毕 
        TI = 0; 
    }
    

    2.5 在main函数中完成功能

    unsigned char temp;
    unsigned int i;
     while(1)
     {	
    	temp=random();
    	if(frameFlag)
    	{
    		send_string_com(temp);
    		for(i=0;i<6000;i++);//延时,降低单片机发送数据的频率
    	}
    }
    

    三、完整代码

    #include <reg52.h> 
    #include <stdlib.h> 
    bit frameFlag=1;       //暂停标志
    void send_string_com(unsigned char str);
    unsigned int random();
    void delay(unsigned int i);
    void main()		//主函数
    {	
       unsigned char temp;
       TMOD=0x20;    	//定时器T1方式2
       TH1=0xf4; 	   	//设置串行口波特率为2400 bps
       TL1=0xf4;		
       TR1=1;		     	//启动波特率发生器
       SCON=0x50;   	//串行口工作方式1,允许接收
       EA=1;		     	//开总中断允许位
       ES=1;      	 	//开串行口中断
       while(1)
    		{	
    		  temp=random();
    			if(frameFlag)
    			{
    				send_string_com(temp);
    				delay(60000);
    			}
    		}
    }
    void delay(unsigned int i) //延时函数
    {
    	unsigned int k;
    	for(k=0;k<i;k++);
    }
    //函数名:send_string_com
    //功能:向串口发送一个字符串
    void send_string_com(unsigned char str)
    {
    	SBUF = str;
    	while(TI == 0);            //等待发送完毕 
      TI = 0; 
    }
    //函数名:serial
    //功能:串行口中断函数,接收来自PC机的数据
    void serial()interrupt 4	//串行口中断类型号是4
    { 
     unsigned char rxch; 
     if(RI)                    //中断标志 RI=1, 数据接收 
    	{ 
    	RI = 0;                 //软件清零 
    	rxch = SBUF;            //读缓冲  
      if (rxch==0x00)         //停止指令   
    	{
         frameFlag =0;            
    	}
    	if (rxch==0x01)          //继续指令 
    	{
         frameFlag =1;          
    	}
    	} 
    }
    unsigned int random()
    {
      unsigned int value;
    	value = rand() % (500 + 1- 1) + 1;
      return value;
    }
    
    
    

    四、实验效果

    串口调试助手效果图

    展开全文
  • 51单片机串口助手

    2013-04-25 18:47:12
    51单片机串口功能中用于单片机与计算机通信
  • LD3320为内核是51单片机,LD3320当输入不同的语句通过串口输出相应的代码,利用STM32与51单片机的串口通讯,将代码传输给STM32实现STM32端口控制。 注意事项: 1:STM32串口,51串口波特率以及电脑端串口调试助手...
  • 51单片机蓝牙串口调试测试源代码, 非常适合初学者学习使用 //**** 声明 ******************************************************************** /*************************************************************...
  • 该工具支持所有51系列和stm32系列的mcu,非常方便的观察mcu的串口输出数据
  • 效果图 虚拟串口 串口调试 Proteus电路设计图 51单片机程序代码 运行
  • 本例子是在别人的版本修改而来的,因本人没有11.0592MHz的晶振,进而采用12MHz的,经过波特率的调整发现在波特率为1200时,定时器工作在方式二,穿口工作在模式二...此时定时器的TH1=TL1=0xCC,此时调试串口没有错误。
  • 单片机串口调试程序,里面包含串口串口调试程序源文件,单片机,记住,自学很重要!!!!!我的资源里面还有很多电子、单片机方面的资料、工具、软件....
  • 软件:Keil uv4单片机编程软件串口调试助手XCOM V2.0、有人网络助手; 基础知识:单片机串口通信基础 、ESP8266AT指令集; 配置并测试ESP8266 1. ESP8266与USB-TTL转串口连接 ESP8266管脚 VCC CH_PD/EN TX RX ...
  • C51单片机串口调试程序 C51单片机串口调试程序C51单片机串口调试程序
  • 51单片机通过串口打印调试信息。

    千次阅读 2021-09-02 14:59:43
    1、实验目的 有时候单片机程序运行的时候我们不知道当前程序行某个变量的数据是多少,我们想像学习C语言的时候,打印出来信息,比如变量的值等等。...直接调用一个函数就行,这个函数是利用51单片机
  • 基于51单片机串口调试C程序设计,采用中断方式
  • C51单片机开发常用工具合集串口调试助手取模软件字库制作软件波特率计算器Image2Lcd取模软件51定时器计算等: 51定时器计算.exe CH340驱动(USB串口驱动)_XP_WIN7共用 Image2Lcd Keil uVision4 LCD点阵提取工具zimo...
  • 51单片机 串口运用 通过串口调试工具 可以将输入小写字母 输出大写字母 同时具有输入输出的提示字符串和回车换行功能 内附有Keil程序和Proteus仿真 可以调试看效果 绝对可以运行。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,097
精华内容 2,038
关键字:

51单片机串口调试软件