51串列埠除錯
阿新 • • 發佈:2020-08-08
在用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,,,一切除錯,變得如此簡單~~