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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2253|回復: 10
打印 上一主題 下一主題
收起左側

單片機設置定時/計數器對串口通信有什么幫助嗎

[復制鏈接]
跳轉到指定樓層
樓主
這是89c52的51單片機教程中演示串口的一個示例程序:
#include "reg52.h"
typedef unsigned int u16;//對系統默認數據類型進行重定義
typedef unsigned char u8;
void uart_init(u8 baud)
{
    TMOD|=0X20;     //設置計數器工作方式 2
    SCON=0X50;     //設置為工作方式 1
    PCON=0X80;     //波特率加倍
    TH1=baud;     //計數器初始值設置
    TL1=baud;
    ES=1; //打開接收中斷     
    EA=1;     //打開總中斷
    TR1=1;     //打開計數器
}


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

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

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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1027834 發表于 2022-7-6 12:00 | 只看該作者
51單片機沒有獨立的波特率發生器,它需要借助定時器當作波特率發生器。如果你不設置定時器的話,串口這種異步通訊,沒有波特率當作時鐘,它怎么發送數據呢?又怎么接收到正確的數據呢?
至于波特率加倍……我一般不加倍……不加倍會好理解一些,就是你算出來的波特率。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:1028115 發表于 2022-7-6 13:22 | 只看該作者
Materialism 發表于 2022-7-6 12:00
51單片機沒有獨立的波特率發生器,它需要借助定時器當作波特率發生器。如果你不設置定時器的話,串口這種異 ...

但是這個定時器的中斷號是2,也沒有用到中斷2呀。這個定時器就感覺和串口通信沒什么聯系
回復

使用道具 舉報

地板
ID:161164 發表于 2022-7-6 13:30 | 只看該作者
同意沙發
補充一下自己的理解
波特率的詳細原理可以去百度
以9600為例,單位是bps(Bit per Second)
就是一秒傳輸9600位元
1200字元
即每字元耗時0.833毫秒
發個"Hello World!"就耗時10毫秒了
以例程的阻塞式等待方式發送
這10毫秒什么都不能干!

從而得知波特率加倍就是加快傳輸速度
減短發送耗時
回復

使用道具 舉報

5#
ID:1028115 發表于 2022-7-6 13:49 | 只看該作者
Materialism 發表于 2022-7-6 12:00
51單片機沒有獨立的波特率發生器,它需要借助定時器當作波特率發生器。如果你不設置定時器的話,串口這種異 ...

就是說,為什么這個定時器的TL和TH都要設為0xfa(250)呢,別的值不行嗎
回復

使用道具 舉報

6#
ID:213173 發表于 2022-7-6 14:51 | 只看該作者
此程序只是演示最基本的串口通訊的配置和使用,實際使用中往往傳輸的是按照通訊協議編制的數據串,可能是只發不收,也可能是只收不發,更可能是收/發不同內容的數據。至于為什么要設置定時器作波特率發生器樓上已經解釋。對于晶振頻率5.5296、11.0592、22.1184......MHz,波特率加倍與否無所謂,但對于使用6.0、12.0、24.0.....MHz晶振的單片機會因波特率誤差較大而錯碼,選擇波特率加倍設置可以降低波特率誤差。
回復

使用道具 舉報

7#
ID:1038594 發表于 2022-7-6 16:40 | 只看該作者
串口要運行波特率是至關重要的,波特率規定了數據傳輸的速率,那么單片機靠什么產生標準的波特率呢,那么就需要單片機的定時器產生,所以串口離不開波特率,產生波特率的是定時器。
回復

使用道具 舉報

8#
ID:1028115 發表于 2022-7-7 14:00 | 只看該作者
謝謝各位回復。還有個問題就是,我查閱了那些文檔,看了視頻,我都沒有找到51單片機的stc89c52這個型號的串口是和定時器1相關的。我看電路圖也沒看到他們有什么關系。你們都是怎么知道串口和哪個定時器相關的呢?
而且定時器的初值,高8位和低8位為什么都直接設置為0xfa呢。
回復

使用道具 舉報

9#
ID:883242 發表于 2022-7-7 15:31 | 只看該作者
wulin 發表于 2022-7-6 14:51
此程序只是演示最基本的串口通訊的配置和使用,實際使用中往往傳輸的是按照通訊協議編制的數據串,可能是只 ...

波特率加倍只能惡化誤差,減半才是減少誤差的方法。
回復

使用道具 舉報

10#
ID:213173 發表于 2022-7-7 16:32 | 只看該作者
Hephaestus 發表于 2022-7-7 15:31
波特率加倍只能惡化誤差,減半才是減少誤差的方法。

難道STC-ISP算錯了???




回復

使用道具 舉報

11#
ID:1027834 發表于 2022-8-19 18:20 | 只看該作者
kirei0715 發表于 2022-7-6 13:22
但是這個定時器的中斷號是2,也沒有用到中斷2呀。這個定時器就感覺和串口通信沒什么聯系

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲国产日韩 | 国产精品99久久久久久动医院 | 午夜成人在线视频 | 九九九国产 | 久久国产精品免费一区二区三区 | 亚洲欧美日韩在线不卡 | www精品美女久久久tv | 亚洲精品一区二三区不卡 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 午夜视频在线免费观看 | 国产日韩精品一区二区 | 国产亚洲精品久久yy50 | 国产一级片一区二区三区 | 色橹橹欧美在线观看视频高清 | 亚洲婷婷一区 | 免费精品国产 | 国产一区二区三区四区 | 不卡av电影在线播放 | 成人国产精品久久 | 成人免费观看男女羞羞视频 | 亚洲国产精品一区二区久久 | 久久综合久久综合久久综合 | 波多野吉衣在线播放 | 国内自拍偷拍 | 久久久久久av | 视频羞羞 | 偷拍亚洲色图 | 国产激情在线观看视频 | a久久 | 欧美性猛交一区二区三区精品 | 国产精品日韩欧美一区二区 | 五月综合激情婷婷 | 国产视频中文字幕在线观看 | 国产精品视频在线播放 | www.99久久.com| 日日摸日日碰夜夜爽亚洲精品蜜乳 | 亚洲国产情侣自拍 | 99影视 | 久久精品天堂 | 欧美成人久久 | 欧美亚洲激情 |