欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機串口為什么是這樣的? [打印本頁]

作者: rtyweq    時間: 2024-5-20 22:32
標題: 單片機串口為什么是這樣的?
主函數
void uartdo()
{
        if(uart_index==0)
                return;
       
        if(uart_recv[uart_index-2]==0x0d && uart_recv[uart_index-1]==0x0a)
        {
                if(uart_index==4 && uart_recv[0]=='S' && uart_recv[1]=='T')
                        sprintf(sendstring,"$%02d,%5.2f\r\n",(uint)distance,temp);
                else if(uart_index==6 && uart_recv[0]=='P' && uart_recv[1]=='A' && uart_recv[2]=='R' && uart_recv[3]=='A')
                        sprintf(sendstring,"#%02d,%02d\r\n",(uint)para_buf[1],(uint)para_buf[0]);
                else
                        sprintf(sendstring,"ERROR\r\n");
                send(sendstring);
                uart_index=0;
        }
        else if(uart_index>=7)
        {
                sprintf(sendstring,"ERROR\r\n");
                send(sendstring);
                uart_index=0;
        }
        memset(uart_recv,0,uart_index);
       
}
uart.c
void UartInit(void)                //9600bps@12.000MHz
{
        SCON = 0x50;                //8???,?????
        AUXR |= 0x01;                //??1?????2???????
        AUXR |= 0x04;                //???2???Fosc,?1T
        T2L = 0x8F;                //??????
        T2H = 0xFD;
        AUXR |= 0x10;                //?????2
        ES = 1;
        EA = 1;
}

void sendbyte(unsigned char dat)
{
        SBUF=dat;
        while(TI==0);
        TI=0;
       
}

void send(unsigned char *dat)
{
        while(*dat!='\0')
        sendbyte(*dat++);
}


作者: rtyweq    時間: 2024-5-20 22:39
這是圖片

屏幕截圖 2024-05-20 223853.png (189.05 KB, 下載次數: 30)

屏幕截圖 2024-05-20 223853.png

作者: lxh2002    時間: 2024-5-21 06:45
波特率好像不對,代碼里的是9600,圖片里的是4800
作者: LaoYuTou    時間: 2024-5-21 08:08
應該是波特率的問題,你看看你左側硬件選項是不是選了內部時鐘,看你下載后的時鐘應該是11.0592(11.063MHz),程序中按照12MHz時鐘設置的波特率。
作者: a1361550201    時間: 2024-5-21 08:10
keil軟件中更改格式吧 edit configuartation  encoding    是國標2312還是UTF8
作者: bd5fna    時間: 2024-5-21 08:48
void UartInit(void)                //9600bps@12.000MHz
你下載的時候選的是11.0592

作者: bd5fna    時間: 2024-5-21 08:50
還有你串口波特率選 的是4800
作者: rtyweq    時間: 2024-5-22 00:01
改成了12M,但是輸出都是ERROR

屏幕截圖 2024-05-22 000101.png (173.02 KB, 下載次數: 29)

屏幕截圖 2024-05-22 000101.png

作者: lxh2002    時間: 2024-5-22 05:44
uart_recv[0] 這個是在哪里賦值的?看一下賦值的是不是有問題,看了一下你的代碼,應該是你的問題,不是串口的問題
作者: LaoYuTou    時間: 2024-5-22 08:08
把你收到的數據打印出來看看(最好16進制),看看又沒有發送回車換行符,把ERROR編號,看看從哪出的錯。也可不要文本發送,全改為16進制發送看看,確定發送回車和換行
作者: aking991    時間: 2024-5-22 08:32
rtyweq 發表于 2024-5-22 00:01
改成了12M,但是輸出都是ERROR

因為你發送時沒有加換行回車,判斷不到那兩個就認為錯誤了
作者: kk17328    時間: 2024-5-22 10:30
亂碼出現一半可能是 波特率不對,或者接線沒接好
作者: rtyweq    時間: 2024-5-23 20:21
改成這樣可以了

屏幕截圖 2024-05-23 202054.png (87.3 KB, 下載次數: 37)

屏幕截圖 2024-05-23 202054.png

作者: Peterter    時間: 2024-5-23 21:29
rtyweq 發表于 2024-5-20 22:39
這是圖片

波特率的緣故吧




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1