zoukankan      html  css  js  c++  java
  • 51串口调试

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

    要是你是简单的想使用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("
     is begin 
    ");
        
        
        for(i=0;i<5;i++)
        {
            printf("please input the char:");
            scanf("%d",&a);
            delay_ms(10);
            printf("
     the input is --->%d
    ",a);    
            
        }
        
        printf("
     is done 
    ");
        while(1);
        
    }

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

  • 相关阅读:
    Netty快速入门(09)channel组件介绍
    Netty快速入门(08)ByteBuf组件介绍
    Netty快速入门(07)Netty入门例子
    Netty快速入门(06)Netty介绍
    Netty快速入门(05)Java NIO 介绍-Selector
    Netty快速入门(04)Java NIO 介绍-Channel
    Netty快速入门(03)Java NIO 介绍-Buffer
    Netty快速入门(02)Java I/O(BIO)介绍
    Netty快速入门(01)Linux I/O模型介绍
    老虎集团【4面】
  • 原文地址:https://www.cnblogs.com/Jay12138/p/13455577.html
Copyright © 2011-2022 走看看