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("\n is begin \n"); for(i=0;i<5;i++) { printf("please input the char:"); input(); delay_ms(10); printf("\n the input is --->%s\n",in_char); //strcmp不能用,,用来程序直接没有反应,不知道为啥 //strncmp是比较前n位 // if (strncmp(jay,in_char,3)==0) // { // printf("ok\n"); // } } printf("\n is done \n"); while(1); // for(i=0;i<3;i++) // { // scanf("%c",&a); // delay_ms(100); // printf("\nyour input is : %c\n",a); // if (a=='6') // { // printf("you are the best\n"); // } // } }
要是你是简单的想使用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 --->%d\n",a); } printf("\n is done \n"); while(1); }
当可以使用printf,,,一切调试,变得如此简单~~