久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機設(shè)置定時/計數(shù)器對串口通信有什么幫助嗎 [打印本頁]

作者: kirei0715    時間: 2022-7-6 10:06
標題: 單片機設(shè)置定時/計數(shù)器對串口通信有什么幫助嗎
這是89c52的51單片機教程中演示串口的一個示例程序:
#include "reg52.h"
typedef unsigned int u16;//對系統(tǒng)默認數(shù)據(jù)類型進行重定義
typedef unsigned char u8;
void uart_init(u8 baud)
{
    TMOD|=0X20;     //設(shè)置計數(shù)器工作方式 2
    SCON=0X50;     //設(shè)置為工作方式 1
    PCON=0X80;     //波特率加倍
    TH1=baud;     //計數(shù)器初始值設(shè)置
    TL1=baud;
    ES=1; //打開接收中斷     
    EA=1;     //打開總中斷
    TR1=1;     //打開計數(shù)器
}


void main()
{
    uart_init(0XFA);//波特率為 9600
    while(1)
    {
    }
}
void uart() interrupt 4 //串口通信中斷函數(shù)
{
    u8 rec_data;
    RI = 0;     //清除接收中斷標志位
    rec_data=SBUF;     //存儲接收到的數(shù)據(jù)
    SBUF=rec_data;     //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
    while(!TI);     //等待發(fā)送數(shù)據(jù)完成
        TI=0;     //清除發(fā)送完成標志位
}                                            

這個程序可以實現(xiàn)將串口接收到的數(shù)據(jù)再發(fā)送回相連的電腦。
設(shè)置定時器對這樣的串口通信有什么用嗎,我感覺沒有用啊。

還有為什么要波特率加倍,波特率一開始又是什么。。暈
真的很迷惑



作者: Materialism    時間: 2022-7-6 12:00
51單片機沒有獨立的波特率發(fā)生器,它需要借助定時器當作波特率發(fā)生器。如果你不設(shè)置定時器的話,串口這種異步通訊,沒有波特率當作時鐘,它怎么發(fā)送數(shù)據(jù)呢?又怎么接收到正確的數(shù)據(jù)呢?
至于波特率加倍……我一般不加倍……不加倍會好理解一些,就是你算出來的波特率。
作者: kirei0715    時間: 2022-7-6 13:22
Materialism 發(fā)表于 2022-7-6 12:00
51單片機沒有獨立的波特率發(fā)生器,它需要借助定時器當作波特率發(fā)生器。如果你不設(shè)置定時器的話,串口這種異 ...

但是這個定時器的中斷號是2,也沒有用到中斷2呀。這個定時器就感覺和串口通信沒什么聯(lián)系
作者: lkc8210    時間: 2022-7-6 13:30
同意沙發(fā)
補充一下自己的理解
波特率的詳細原理可以去百度
以9600為例,單位是bps(Bit per Second)
就是一秒傳輸9600位元
1200字元
即每字元耗時0.833毫秒
發(fā)個"Hello World!"就耗時10毫秒了
以例程的阻塞式等待方式發(fā)送
這10毫秒什么都不能干!

從而得知波特率加倍就是加快傳輸速度
減短發(fā)送耗時
作者: kirei0715    時間: 2022-7-6 13:49
Materialism 發(fā)表于 2022-7-6 12:00
51單片機沒有獨立的波特率發(fā)生器,它需要借助定時器當作波特率發(fā)生器。如果你不設(shè)置定時器的話,串口這種異 ...

就是說,為什么這個定時器的TL和TH都要設(shè)為0xfa(250)呢,別的值不行嗎
作者: wulin    時間: 2022-7-6 14:51
此程序只是演示最基本的串口通訊的配置和使用,實際使用中往往傳輸?shù)氖前凑胀ㄓ崊f(xié)議編制的數(shù)據(jù)串,可能是只發(fā)不收,也可能是只收不發(fā),更可能是收/發(fā)不同內(nèi)容的數(shù)據(jù)。至于為什么要設(shè)置定時器作波特率發(fā)生器樓上已經(jīng)解釋。對于晶振頻率5.5296、11.0592、22.1184......MHz,波特率加倍與否無所謂,但對于使用6.0、12.0、24.0.....MHz晶振的單片機會因波特率誤差較大而錯碼,選擇波特率加倍設(shè)置可以降低波特率誤差。
作者: lijianwdb    時間: 2022-7-6 16:40
串口要運行波特率是至關(guān)重要的,波特率規(guī)定了數(shù)據(jù)傳輸?shù)乃俾剩敲磫纹瑱C靠什么產(chǎn)生標準的波特率呢,那么就需要單片機的定時器產(chǎn)生,所以串口離不開波特率,產(chǎn)生波特率的是定時器。
作者: kirei0715    時間: 2022-7-7 14:00
謝謝各位回復(fù)。還有個問題就是,我查閱了那些文檔,看了視頻,我都沒有找到51單片機的stc89c52這個型號的串口是和定時器1相關(guān)的。我看電路圖也沒看到他們有什么關(guān)系。你們都是怎么知道串口和哪個定時器相關(guān)的呢?
而且定時器的初值,高8位和低8位為什么都直接設(shè)置為0xfa呢。
作者: Hephaestus    時間: 2022-7-7 15:31
wulin 發(fā)表于 2022-7-6 14:51
此程序只是演示最基本的串口通訊的配置和使用,實際使用中往往傳輸?shù)氖前凑胀ㄓ崊f(xié)議編制的數(shù)據(jù)串,可能是只 ...

波特率加倍只能惡化誤差,減半才是減少誤差的方法。
作者: wulin    時間: 2022-7-7 16:32
Hephaestus 發(fā)表于 2022-7-7 15:31
波特率加倍只能惡化誤差,減半才是減少誤差的方法。

難道STC-ISP算錯了???





作者: Materialism    時間: 2022-8-19 18:20
kirei0715 發(fā)表于 2022-7-6 13:22
但是這個定時器的中斷號是2,也沒有用到中斷2呀。這個定時器就感覺和串口通信沒什么聯(lián)系

在你貼出來的程序中,沒有發(fā)現(xiàn)定時器中斷號2,只有一個定時器工作模式2,模式2是8位自動重裝模式。我查看89C52的DATASHEET,發(fā)現(xiàn)他只能用定時器1做波特率發(fā)生器,而且 TR1=1; 也確實是定時器1的開啟語句。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 人人草人人爽 | 久久久久婷婷 | 黄色片亚洲 | 一级做a爱片性色毛片 | 99久久综合 | 国产精品成人一区二区 | 麻豆一区二区三区四区 | 一级黄色片免费观看 | 日韩精品一区二区三区四区 | 亚洲一区二区在线播放 | 久久久亚洲精品视频 | 超碰免费在线观看 | 亚洲蜜桃av | 黄色在线观看免费 | www.中文字幕 | 国产性猛交 | 伊人成人在线 | 成年人网站在线免费观看 | 中文字幕理论片 | 视频一区二区在线 | 精品久久久久久久久久久 | 少妇搡bbbb搡bbb搡毛茸茸 | 国产高清一区 | 日本一级片在线观看 | 91福利区| 日韩一级免费视频 | 午夜在线观看视频网站 | 天堂免费av | 亚洲天码中字 | 精品欧美黑人一区二区三区 | 亚洲小视频在线观看 | 九九国产| 欧美成人午夜 | 国产精品乱码一区二区视频 | 成人精品一区二区三区 | www.超碰在线| 亚洲欧美日韩一区二区三区四区 | 欧美啪啪网站 | 日韩在线视频免费观看 | 麻豆一区二区三区 | 午夜av在线 |