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來調試打印數據了~~~~spa

#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,,,一切調試,變得如此簡單~~調試

 

相關文章
相關標籤/搜索