找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1346|回復(fù): 6
收起左側(cè)

[已解決]單片機(jī)串口程序調(diào)試問(wèn)題

[復(fù)制鏈接]
ID:776619 發(fā)表于 2022-5-16 18:37 | 顯示全部樓層 |閱讀模式
最近調(diào)試51單片機(jī)程序,編譯下載后運(yùn)行得不到意料的回復(fù)A的結(jié)果,程序如下:

#include "reg52.h"

typedef unsigned int u16;        //對(duì)系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
typedef unsigned char u8;


/*******************************************************************************
* 函 數(shù) 名       : uart_init
* 函數(shù)功能                 : 串口通信中斷配置函數(shù),通過(guò)設(shè)置TH和TL即可確定定時(shí)時(shí)間
* 輸    入       : baud:波特率對(duì)應(yīng)的TH、TL裝載值
* 輸    出             : 無(wú)
*******************************************************************************/
void uart_init(u8 baud)
{
        TMOD|=0X20;        //設(shè)置計(jì)數(shù)器工作方式2
        SCON=0X50;        //設(shè)置為工作方式1
        PCON=0X80;        //波特率加倍
        TH1=baud;        //計(jì)數(shù)器初始值設(shè)置
        TL1=baud;
        ES=1;                //打開接收中斷
        EA=1;                //打開總中斷
        TR1=1;                //打開計(jì)數(shù)器               
}

/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能                 : 主函數(shù)
* 輸    入       : 無(wú)
* 輸    出             : 無(wú)
*******************************************************************************/
void main()
{        
        uart_init(0XFA);//波特率為9600

        while(1)
        {                        
                                                        
        }               
}

void uart() interrupt 4 //串口通信中斷函數(shù)
{
        u8 rec_data;

        RI = 0;                        //清除接收中斷標(biāo)志位
        rec_data=SBUF;        //存儲(chǔ)接收到的數(shù)據(jù)
        SBUF=0x41;        //收到回復(fù)A
        while(!TI);                //等待發(fā)送數(shù)據(jù)完成
        TI=0;                        //清除發(fā)送完成標(biāo)志位                                
}

用串口助手,輸入一個(gè)字符,得到16進(jìn)制的A1。把原程序?qū)懗奢敵鯞,得到輸出結(jié)果是A2。把原程序?qū)懗奢敵鯟,得到輸出結(jié)果是A3。不知道為什么?
2022-05-16_183403.jpg

程序結(jié)果2

程序結(jié)果2

程序結(jié)果1

程序結(jié)果1
回復(fù)

使用道具 舉報(bào)

ID:1026496 發(fā)表于 2022-5-16 23:18 | 顯示全部樓層
你的晶振是多少,估計(jì)是 波特率不對(duì)所以顯示的不對(duì),建議你算下初值 百度上有 51單片機(jī)11.0592M晶振波特率初值表
回復(fù)

使用道具 舉報(bào)

ID:390416 發(fā)表于 2022-5-16 23:40 | 顯示全部樓層
http://www.torrancerestoration.com/bbs/dpj-214747-1.html  單片機(jī)發(fā)送到串口助手,以及串口助手顯示到LCD1602
回復(fù)

使用道具 舉報(bào)

ID:776619 發(fā)表于 2022-5-17 06:35 | 顯示全部樓層
yaoyao2022 發(fā)表于 2022-5-16 23:18
你的晶振是多少,估計(jì)是 波特率不對(duì)所以顯示的不對(duì),建議你算下初值 百度上有 51單片機(jī)11.0592M晶振波特率初 ...

12M,串口可以改波特率來(lái)適應(yīng)實(shí)驗(yàn)板的啊,改了作用不大。
回復(fù)

使用道具 舉報(bào)

ID:776619 發(fā)表于 2022-5-17 06:42 | 顯示全部樓層
本來(lái)程序是接收原樣返回的,返回的是亂碼,就改成固定返回一個(gè)值。試過(guò)在P3.1接一個(gè)外部的另一個(gè)串口信號(hào)發(fā)送,單針剛一接上電腦就正常顯示外部串口的值了,排除了P3.1到電腦線路問(wèn)題,同時(shí)能正常下載程序運(yùn)行說(shuō)明實(shí)驗(yàn)板能正常接收串口數(shù)據(jù)。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-5-17 09:36 | 顯示全部樓層
9600@12Mhz的誤差有點(diǎn)大啊~ CSDN_1652751340505.jpg

回復(fù)

使用道具 舉報(bào)

ID:776619 發(fā)表于 2022-5-17 10:34 | 顯示全部樓層
lkc8210 發(fā)表于 2022-5-17 09:36
9600@12Mhz的誤差有點(diǎn)大啊~

謝謝你們,換了個(gè)11.0592的晶振果然好了,那以后要用的串口程序的必須得用11.0592的晶振啰!!這樣好了我的GPS模塊程序也可以了。用GPS信號(hào)做時(shí)鐘來(lái)對(duì)時(shí),已通過(guò),就是數(shù)組太大了,影響12864顯示,不知編譯時(shí)DATA,XDATA之類的選擇怎樣才最優(yōu)化,現(xiàn)在對(duì)時(shí)功能做到了,可能數(shù)組地址空間有沖突,顯示有干擾,現(xiàn)在只能對(duì)時(shí)結(jié)束后把串口關(guān)了,中斷1也關(guān)斷。完美顯示時(shí)間、溫度、日期等。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表