精华内容
下载资源
问答
  • 51单片机串口调试程序.docx
  • 本文主要介绍了51单片机串口调试程序一列。
  • C51单片机串口调试程序 C51单片机串口调试程序C51单片机串口调试程序
  • 下面介绍一种利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法。使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。
  • DS18B20 51单片机串口调试程序,运用串口调试温度十分方便,适合初学者
  • 通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上...
  • 用自己焊的51最消息系统,配置51单片机的串口中断,与串口调试助手连接通信。
  • #include #include "err.h"#ifdef INTERSENDSTRunsigned char xdata sSendComBuf[256],sRecComBuf[256];unsigned char data bOut,bIn,bSout,bSin;#else#define DEFSENDCHAR TI=0;SBUF=ACC;while(!...

    #include #include "err.h"

    #ifdef INTERSENDSTR

    unsigned char xdata sSendComBuf[256],sRecComBuf[256];

    unsigned char data bOut,bIn,bSout,bSin;

    #else

    #define DEFSENDCHAR TI=0;SBUF=ACC;while(!TI);TI=0;

    #endif

    //bps设置 9600就是 PSetBps(96)(11.0592Mhz)

    unsigned char  PSetBps(unsigned int bps) SMALL

    {

    unsigned int t1;

    unsigned char t2;

    #ifdef INTERSENDSTR

    /*如果使用中断方式发送数据,必须等待发送数据完毕才能更换波特率 */

    while(bSin!=bSout)

    {

    ;

    }

    ES=0;

    #endif

    #ifdef CHIP_8032

    if(3456%bps)

    {

    return ERR_SET_BPS;

    }

    t1=3456/bps;

    t1--;t1=~t1;

    RCAP2H=t1/256;RCAP2L=t1;

    T2MOD=0x00;

    /*使用定时器2做波特率发生器 */

    T2CON=0x34;/*TF2=0;EXF2=0;RCLK=1;TCLK=1;EXEN2=0;TR2=1;C/T2=0;CP/RL2=0

    */

    #else

    t1=576/bps;

    if((576%bps)||((t1==0))||(t1>=2*256))

    {

    return ERR_SET_BPS;

    }

    if(t1>256)

    {

    PCON=00;

    t2=256-(288/bps);

    }

    else

    {

    PCON=0x80;

    t2=256-t1;

    }

    TH1=t2;TL1=t2;

    TR1=1;

    #endif

    /*模式3*/

    SM0=0;

    RI=0;TI=0;

    REN=1;

    SM1=1;

    SM2=1;

    #ifdef INTERSENDSTR

    bOut=bIn;

    bSout=bSin;

    ES=1;

    #endif

    return OK;

    }

    void PSendChar(unsigned char ch) SMALL

    {

    #ifdef INTERSENDSTR

    unsigned char tch;

    tch=bSin+1;

    while(tch==bSout)

    {

    ;

    }

    sSendComBuf[bSin]=ch;

    ES=0;

    if((bSout==bSin))

    {

    SBUF=sSendComBuf[bSin];

    bSin++;

    }

    else

    {

    bSin++;

    }

    ES=1;

    #else

    ACC=ch;

    DEFSENDCHAR;

    #endif

    }

    unsigned char PGetChar() SMALL

    {

    unsigned char ch;

    #ifdef  INTERSENDSTR

    ch=sRecComBuf[bOut];

    bOut++;

    return ch;

    #else

    ch=SBUF;

    RI=0;

    #endif

    }

    bit PCharInCom() SMALL

    {

    #ifdef  INTERSENDSTR

    if(bIn!=bOut)

    {

    return 1;

    }

    return 0;

    #else

    return RI;

    #endif

    }

    void PSendString(unsigned char *st) SMALL

    {

    while(*st)

    {

    PSendChar(*st);

    st++;

    }

    }

    void PSendArray(unsigned char  *st,unsigned int  len) SMALL

    {

    unsigned int ii;

    for(ii=0;ii

    {

    PSendChar(st[ii]);

    }

    }

    #ifdef  INTERSENDSTR

    void PSerialInt() interrupt 4

    {

    if(RI)

    {

    sRecComBuf[bIn]=SBUF;

    bIn++;

    RI=0;

    }

    if(TI)

    {

    TI=0;

    if(bSout!=bSin)

    {

    bSout++;

    }

    if(bSout!=bSin)

    {

    SBUF=sSendComBuf[bSout];

    }

    }

    }

    #endif

    展开全文
  • 用C语言编写的串口调试程序 定义为中断方式串口处理
  • C51单片机串口通信调试笔记,便于了解调试过程中的常见问题
  • 单片机串口调试助手

    2012-01-04 20:26:59
    单片机 串口调试助手
  • 单片机串口调试程序,里面包含串口串口调试程序源文件,单片机,记住,自学很重要!!!!!我的资源里面还有很多电子、单片机方面的资料、工具、软件....
  • 串口调试软件可用于DSP,STM32,51等系列单片机进行串口调试使用,软件优秀,不会出现数据传输卡顿以及闪退等问题
  • 基于51单片机串口调试C程序设计,采用中断方式
  • 很实用的单片机串口调试助手,我就是用这个软件进行串口调试
  • 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自带的串口助手就可以查看串口输出信息
    在这里插入图片描述

    展开全文
  • 适合51单片机串口调试,操作方便,适合广大单片机爱好者
  • 效果图 虚拟串口 串口调试 Proteus电路设计图 51单片机程序代码 运行

    【若有疑问错误或版权等问题请联系我】

    【转载请注明出处:http://blog.csdn.net/leytton/article/details/35572631


    1、效果图



    2、虚拟串口

    通过VSPD虚拟串口工具虚拟出两个串口用于通信

    VSPD虚拟串口工具下载:http://download.csdn.net/detail/leytton/7565589



    3、串口调试

    打开两份串口调试工具个打开com1,二个打开com2,这时在任一串口调试工具发送信息,另一个串口调试工具中能接收到信息

    串口调试工具下载:http://download.csdn.net/detail/leytton/7565561



    4、Proteus电路设计图

    P1串口:属性原件值COMPIM,Physical port为com2,Physical Baud rate为9600 

    虚拟终端(Virtual Terminal):接RXD接口的虚拟终端显示单片机通过com2接收到的信息,接TXD接口的虚拟终端显示单片机传出的信息。




    5、51单片机程序代码

    #include <reg52.h>
    
    void init();
    void main(){
     unsigned char temp=0xff;
     init();
     while(1){
        if(RI){     //RI=1,判定为串口接收到了数据,RI要清零,
             RI=0;   
             temp=SBUF;  
         }else{
    	  P1=temp; 
         }
     }
    }
    void init(){
     TMOD=0x20;   //设置T1工作方式为方式2
     TH1=0xfd; //给定时器高位装初值
     TL1=0xfd; //给定时器低位装初值
     TR1=1;  //开定时器
                 //以上是设置波特率
     SM0=0;  //设置串口通讯方式为方式1
     SM1=1;  
     REN=1;  //串口是否接收数据的开关
    }

    6、运行

    串口调试工具接com1口发送的数据,可在接RXD的虚拟终端显示;
    但是单片机基本没反应,因为我写的代码是通过信息来控制灯亮灭,而信息格式不合法。
    改进:在串口调试工具勾选“按十六进制发送”,虚拟终端勾选“Hex Display Mode”,发送“0”则灯全亮,发送“fe”则灯P1.0亮。


    参考文章

    1.Win7下虚拟串口 http://blog.sina.com.cn/s/blog_6163bdeb0102e8iy.html

    2.利用Proteus,Serialnull,VB模拟串口通信的简单例子 http://hi.baidu.com/puda2007/item/2b2a53f33eb38e2f753c4c60 

    3.Proteus通过虚拟串口程序仿真51单片机串口的实现 http://blog.sina.com.cn/s/blog_574d08530100hk8s.html

    展开全文
  • 51单片机蓝牙串口调试测试源代码, 非常适合初学者学习使用 //**** 声明 ******************************************************************** /*************************************************************...
  • 本文章详细论述了用户在程序中如何具体使用串口1和独立波特率发生器BRT以及在程序中如何具体使用串口2。
  • 51单片机串口收发(转) 转载 原作者 写的很不错,也是我遇到的问题。 51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。 当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 ...

    51单片机串口收发(转)

    转载 原作者
    写的很不错,也是我遇到的问题。

    51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。
    当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。
    无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。
    在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。
    看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。
    接收数据时,基本上都是使用“中断方式”,这是正确合理的。
    即:每当收到一个新数据,就在中断函数中,把 RI 清零,并用一个变量,通知主函数,收到了新数据。
    发送数据时,很多的程序都是使用的“查询方式”,就是执行 while(TI ==0); 这样的语句来等待发送完毕。
    这时,处理不好的话,就可能带来问题。
    看了一些网友编写的程序,发现有如下几条容易出错:
    1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。
    这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。
    这种处理方法,就会遗漏收到的数据。
    2.有人在发送数据之前,并没有关闭串口中断,当 TI = 1 时,是可以进入中断程序的。
    但是,却在中断函数中,将 TI 清零!
    这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。
    3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收中断的程序。
    对此,做而论道发表自己常用的方法:
    接收数据时,使用“中断方式”,清除 RI 后,用一个变量通知主函数,收到新数据。
    发送数据时,也用“中断方式”,清除 TI 后,用另一个变量通知主函数,数据发送完毕。
    这样一来,收、发两者基本一致,编写程序也很规范、易懂。
    更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。

    其他博主对文章进行了一些补充
    补充内容

    展开全文
  • 51单片机解析野火PID串口调试助手协议
  • 单片机串口调试

    2018-05-27 15:04:00
    51 TI = 0 ; 52 SBUF = ' b ' ; 53 while ( ! TI ) 54 ; 55 TI = 0 ; 56 } 57 flag = 0 ; 58 } 59 if ( flag_t == 1 ) 60 { 61 TI = 1 ; 62 printf( " \n...
  • 解释下什么是51单片机和Proteus 虚拟串口调试,就是我们不需要实际的串口进行调试,只需要用protues加串口,在加串口调试助手就行了。写好单片机串口程序加载到protuse仿真里,这边串口调试助手就有反应。比如我们的...
  • 51单片机和Proteus 虚拟串口调试
  • C语言编写的51单片机几个串口调试实验代码,适合初学者。
  • 51波特率初值设置;51定时器初值计算;51单片机串口调试
  • 51单片机串口发送

    2017-12-13 17:27:28
    51单片机串口,自己学习时做写的东西。希望能有用,串口_printf(关闭接受不断发送)
  • 51单片机串口程序

    2014-04-21 09:49:36
    实现51单片机与计算机串口通信,计算机使用串口调试助手给单片机发,单片机收到,给计算机发出
  • 51单片机串口通讯详解

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

空空如也

空空如也

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

51单片机串口调试