在用51玩一些传感器的时候,发现调试起来很难看到数据,每次调用串口,都是很麻烦的,后来发现可以用printf和scanf来打印调试数据,简直方便得不要不要得,但是做出这个功能,自己百度了很多,踩了很多坑,现在解决了,也来这记录一下,同样也是分享给有缘人~

废话不说,直接上代码,这个是我测试用的,我要写得是一个判断输入字符串功能的函数,要是不想看这个,看最后那个简洁版就好

#include <stdio.h>   //加入这个就可以使用printf和scanf啦
#include <reg52.h>
#include <string.h>  //这个是我用于判定两个字符串函数的头文件

char in_char[]={"                               "};

//没想到吧,字符串输入重点在这里,还是不可以有空格输入,空格数量如果少,会出现自动打印输出和乱码


void InitUART(void)//使用定时器1作为串口波特率发生器
    
{
    
    TH1 = 0xf3;     //晶振12M,,,,设置为2400,,,重中之重,如果是11.0592,,需要重新写这个值,不然会乱码
    TL1 = TH1;
    TMOD |= 0x20;     //定时器1方式2
    SCON = 0x50;     //串口接收使能
    ES = 1;             //串口中断使能
    TR1 = 1;         //定时器1使能
    TI = 1;             //发送中断标记位,必须设置
    
}

//毫秒延时函数
void delay_ms(unsigned int t)
{
    unsigned char a,b;
    while(t--)
    {
      for(b=102;b>0;b--)
      for(a=3;a>0;a--);
    }
}
 
//我当时是为了测试一点东西,才写成函数的形式
void input()
{
    scanf("%s",&in_char);  // & 这个在输入字符串的时候,不加也可以的,,但是要是输入整型和单字符,,必须得加
    
}

void main()
{
    int i;
    char jay[]={"jay"};
    InitUART();    //初始化串口
    EA = 1;          //开总中断

    printf("n is begin n");
    
    
    for(i=0;i<5;i++)
    {
        printf("please input the char:");
        input();
        delay_ms(10);
        printf("n the input is --->%sn",in_char);
        
        //strcmp不能用,,用来程序直接没有反应,不知道为啥
        //strncmp是比较前n位
//        if (strncmp(jay,in_char,3)==0)
//        {
//            printf("okn");
//        }
        
    }
    
    printf("n is done n");
    while(1);
    
//    for(i=0;i<3;i++)
//    {
    //    scanf("%c",&a);
    //    delay_ms(100);

    //    printf("nyour input is : %cn",a);
    //    if (a=='6')
    //    {
    //        printf("you are the bestn");
    //    }
//    }

}

要是你是简单的想使用printf和scanf,直接像下面这样定义就好了 ,很简单,主要就是要注意波特率的问题,就是把初始化串口那个函数复制过去,改一下波特率计算那个,记得加入头文件,就可以使用这个printf来调试打印数据了~~~~

#include <stdio.h>   //加入这个就可以使用printf和scanf啦
#include <reg52.h>
#include <string.h>  //这个是我用于判定两个字符串函数的头文件

int a;

void InitUART(void)//使用定时器1作为串口波特率发生器
    
{
    
    TH1 = 0xf3;     //晶振12M,,,,设置为2400,,,重中之重,如果是11.0592,,需要重新写这个值,不然会乱码
    TL1 = TH1;
    TMOD |= 0x20;     //定时器1方式2
    SCON = 0x50;     //串口接收使能
    ES = 1;             //串口中断使能
    TR1 = 1;         //定时器1使能
    TI = 1;             //发送中断标记位,必须设置  //这个必须记住
    
}

//毫秒延时函数
void delay_ms(unsigned int t)
{
    unsigned char a,b;
    while(t--)
    {
      for(b=102;b>0;b--)
      for(a=3;a>0;a--);
    }
}
 

void main()
{
    int i;
    InitUART();    //初始化串口
    EA = 1;          //开总中断

    printf("n is begin n");
    
    
    for(i=0;i<5;i++)
    {
        printf("please input the char:");
        scanf("%d",&a);
        delay_ms(10);
        printf("n the input is --->%dn",a);    
        
    }
    
    printf("n is done n");
    while(1);
    
}

 

当可以使用printf,,,一切调试,变得如此简单~~

 

51串口调试插图

 

本站资源均源自网络,若涉及您的版权、知识产权或其他利益,请附上版权证明邮件告知。收到您的邮件后,我们将在72小时内删除。
若下载资源地址错误或链接跳转错误请联系站长。站长q:770044133。

» 51串口调试

发表评论

免登录下载网,提供全网最优质的资源集合!