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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于51單片機串口通信方式1到底和計數器T1有什么關系?

[復制鏈接]
跳轉到指定樓層
樓主
ID:436819 發表于 2018-12-22 19:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機串口通信的問題
我就想問串口通信方式1 到底和計數器T1有什么關系?
波特率的計算重為什么要用到T1
波特率在程序里面到底是怎么體現的。
看了半天PPT都看不懂,我太笨了。。


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

使用道具 舉報

來自 5#
ID:451718 發表于 2018-12-24 11:26 | 只看該作者
呵呵。 你顯然是沒有弄清楚,定時器、中斷的本質區別。
定時器是單片機內部的一個模塊,不管是代碼如何編寫,它都獨立存在于芯片內部,是一個功能模塊。
中斷,包括串口中斷,是一個機制,是單片的一個功能,這個功能一般都需要定時器模塊來實現(特別是串口中斷,需要定時器來提供波特率)。可以用定時器0,也可以用定時器1,主要看你如何去分配這個資源了。
回復

使用道具 舉報

沙發
ID:383374 發表于 2018-12-23 22:48 來自手機 | 只看該作者
波特率,看單片機的重裝載值有關,
回復

使用道具 舉報

板凳
ID:155507 發表于 2018-12-24 10:43 | 只看該作者
串口通信的基本認識
通信分為并行通信和串行通信,并行通信時的數據各個位同時傳送,可以實現字節為單位通信,但通信線多占用資源,成本高。以前用到的的P1=0x55,一次給P1口的8個管腳分別賦值,同時進行信號輸出,類似于8個車道可以過去8輛車,這樣的形式是并行的,一般稱P0,P1,P2,P3為51單片機的4組并行總線。

串行通信,就是一個車道,一個只能通過一輛車,如果一個0x55這樣一個字節的數據要傳輸過去的話,假如低位在前,高位在后的話,那發送方式是:0-1-0-1-0-1-0-1,一位一位的進行傳輸,要發送8次才能發送完一個字節
STC89C52有兩個引腳是專門用來做串口通信的,一個是P3.0(RXD),一個是P3.1(TXD),他們組成的通信接口就是串行接口,簡稱串口。用于兩個單片機進行UART通信。兩單片機通信接口連接方式:RXD——TXD,TXD——RXD。
單片機1的TXD發送通道接到單片機2的RXD接收通道,單片機的1的RXD接收通道接到單片機2的TXD發送通道,從而實現相互通信。
當單片機1想給單片機2發送數據,比如發送了0xCE,用二進制表示就是11001110,在串口通信過程中,是低位先發,高位后發的原則,那么就是讓TXD首先拉低電平,持續一段時間,發送一位0,然后拉高電平,持續一段時間,發送一位1,繼續拉高,在持續一段時間,發送一位1,一直把8位二進制數11001110全部發送完畢,這里涉及到一個問題,就是持續的一個時間段時間“到底是多少”。因而便引入通信中非常重要的一個概念波特率,也叫做比特率。

波特率
波特率就是發送二進制數據位的速率,習慣用baud表示,即我們發送一位二進制數據持續的時間=1/baud。在通信之前,單片機1和單片機2首先都要明確約定好他們之間的通信波特率,必須保持一致,收發雙方才能正常通信。 
約定好速度之后,我們還要考慮第二個問題,數據什么時候是起始,什么時候是結束?提前和延遲結束都會接收錯誤。在uart通信的時候,一個字節是8位,規定當沒有通信信號發生時,通信線路保持高電平,當數據發送前,先發一位0表示起始位,然后發送8位數據位,數據位是先低再高,數位位發送完后才呢個后再發送一位1表示停止位,這樣我們要發送的8位數據,實際上我們發送了10位,多出來兩位其中一個是起始位,一個是停止位。而接受方一直保持的高電平,一旦檢測到一位低電平,準備開始接受數據,接受8位數據后,然后檢測停止位,再準備下一個數據接收。 串口數據發送示意圖,實際上是一個時域示意圖,就是信號隨著時間變化的對應關系。比如在單片機的發送引腳上,左邊的是先發生的,右邊的是后發生的,數據位的切換時間就是波特率分之一秒,如果能夠理解時域的概念,后邊很多通信的時序圖就很容易理解了。


手把手教你單片機串口通信-基礎篇
http://www.zg4o1577.cn/bbs/dpj-107804-1.html
回復

使用道具 舉報

地板
ID:155507 發表于 2018-12-24 10:47 | 只看該作者
UART模塊介紹
IO口模擬串口通信,讓大家了解了串口通信的本質,但是我們的單片機程序卻需要不停的檢測掃描單片機IO口收到的數據,大量占用了單片機的運行時間。這時候就會有聰明人想了,其實我們并不是很關心通信的過程,我們只需要一個通信的結果,最終得到接收到的數據就行了。這樣我們可以在單片機內部做一個硬件模塊,讓它自動接收數據,接收完了,通知我們一下就可以了,我們的51單片機內部就存在這樣一個UART模塊,要正確使用它,當然還得先把對應的特殊功能寄存器配置好。 
51單片機的UART串口的結構由串行口控制寄存器SCON、發送和接收電路三部分構成,先來了解一下串口控制寄存器SCON。 
SCON串行控制器的位分配(地址:0x98) 
位:符號:復位值: 0:RI:0;1:TI:0;2:RB8:0;3:TB8:0;4:REN:0;5:SM2:0;6:SM1:0;7:SM0:0; 
0位RI:接收中斷標志位,當接收電路接收到停止位的中間位置時,RI由硬件置1,必須通過軟件清零 
1位TI:發送中斷標志位,當發送電路發送到停止位的中間位置時,TI由硬件置1,必須通過軟件清零。 
2位RB8:模式2和3中接收到的第9位數據(很少用),模式1用來接收停止位。 
3位TB8:模式2和3中要發送的第9位數據(很少用)。 
4位REN:使能串行接收。由軟件置位使能接收,軟件清零則禁止接收。 
5位SM2:多機通信控制位(極少用),模式1直接清零。 
6位SM1和7位SM0: 
這兩位共同決定了串口通信的模式0~模式3共4種模式。我們最常用的就是模式1,也就是SM0=0,SM1=1,下邊我們重點就講模式1,其它模式從略。 
對于串口的四種模式,模式1是最常用的,就是我們前邊提到的1位起始位,8位數據位和1位停止位。下面我們就詳細介紹模式1的工作細節和使用方法,至于其它3種模式與此也是大同小異,真正遇到需要使用的時候大家再去查閱相關資料就行了。 
在我們使用IO口模擬串口通信的時候,串口的波特率是使用定時器T0的中斷體現出來的。在硬件串口模塊中,有一個專門的波特率發生器用來控制發送和接收數據的速度。對于STC89C52單片機來講,這個波特率發生器只能由定時器T1或定時器T2產生,而不能由定時器T0產生,這和我們模擬的通信是完全不同的概念。 
如果用定時器2,需要配置額外的寄存器,默認是使用定時器1的,我們本章內容主要就使用定時器T1作為波特率發生器來講解,方式1下的波特率發生器必須使用定時器T1的模式2,也就是自動重裝載模式,定時器的重載值計算公式為: 
TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率

和波特率有關的還有一個寄存器,是一個電源管理寄存器PCON,他的最高位可以把波特率提高一倍,也就是如果寫PCON |= 0x80以后,計算公式就成了: 
TH1 = TL1 = 256 - 晶振值/12 /16 /波特率 
公式中數字的含義這里解釋一下,256是8位定時器的溢出值,也就是TL1的溢出值,晶振值在我們的開發板上就是11059200,12是說1個機器周期等于12個時鐘周期,值得關注的是這個16,我們來重點說明。在IO口模擬串口通信接收數據的時候,采集的是這一位數據的中間位置,而實際上串口模塊比我們模擬的要復雜和精確一些。他采取的方式是把一位信號采集16次,其中第7、8、9次取出來,這三次中其中兩次如果是高電平,那么就認定這一位數據是1,如果兩次是低電平,那么就認定這一位是0,這樣一旦受到意外干擾讀錯一次數據,也依然可以保證最終數據的正確性。 
串口通信的發送和接收電路在物理上有2個名字相同的SBUF寄存器,它們的地址也都是0x99,但是一個用來做發送緩沖,一個用來做接收緩沖。意思就是說,有2個房間,兩個房間的門牌號是一樣的,其中一個只出人不進人,另外一個只進人不出人,這樣的話,我們就可以實現UART的全雙工通信,相互之間不會產生干擾。但是在邏輯上呢,我們每次只操作SBUF,單片機會自動根據對它執行的是“讀”還是“寫”操作來選擇是接收SBUF還是發送SBUF,后邊通過程序,我們就會徹底了解這個問題。 
##UART串口程序 
一般情況下,我們編寫串口通信程序的基本步驟如下所示: 
1、配置串口為模式1。 
2、配置定時器T1為模式2,即自動重裝模式。 
3、根據波特率計算TH1和TL1的初值,如果有需要可以使用PCON進行波特率加倍。 
4、打開定時器控制寄存器TR1,讓定時器跑起來。 
這里還要特別注意一下,就是在使用T1做波特率發生器的時候,千萬不要再使能T1的中斷了。 
我們先來看一下由IO口模擬串口通信直接改為使用硬件UART模塊時的程序代碼,看看程序是不是簡單了很多,因為大部分的工作硬件模塊都替我們做了。程序功能和IO口模擬的是完全一樣的。

回復

使用道具 舉報

6#
ID:407221 發表于 2020-1-28 22:52 | 只看該作者
angmall 發表于 2018-12-24 10:43
串口通信的基本認識
通信分為并行通信和串行通信,并行通信時的數據各個位同時傳送,可以實現字節為單位通 ...

十分感謝
回復

使用道具 舉報

7#
ID:714714 發表于 2020-6-1 20:20 來自手機 | 只看該作者
angmall 發表于 2018-12-24 10:47
UART模塊介紹
IO口模擬串口通信,讓大家了解了串口通信的本質,但是我們的單片機程序卻需要不停的檢測掃描 ...

謝謝你
回復

使用道具 舉報

8#
ID:759743 發表于 2020-6-1 21:41 | 只看該作者
波特率
波特率就是發送二進制數據位的速率,習慣用baud表示,即我們發送一位二進制數據持續的時間=1/baud。在通信之前,單片機1和單片機2首先都要明確約定好他們之間的通信波特率,必須保持一致,收發雙方才能正常通信。
約定好速度之后,我們還要考慮第二個問題,數據什么時候是起始,什么時候是結束?提前和延遲結束都會接收錯誤。在uart通信的時候,一個字節是8位,規定當沒有通信信號發生時,通信線路保持高電平,當數據發送前,先發一位0表示起始位,然后發送8位數據位,數據位是先低再高,數位位發送完后才呢個后再發送一位1表示停止位,這樣我們要發送的8位數據,實際上我們發送了10位,多出來兩位其中一個是起始位,一個是停止位。而接受方一直保持的高電平,一旦檢測到一位低電平,準備開始接受數據,接受8位數據后,然后檢測停止位,再準備下一個數據接收。 串口數據發送示意圖,實際上是一個時域示意圖,就是信號隨著時間變化的對應關系。比如在單片機的發送引腳上,左邊的是先發生的,右邊的是后發生的,數據位的切換時間就是波特率分之一秒,如果能夠理解時域的概念,后邊很多通信的時序圖就很容易理解了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久99 | 一区二区在线 | 国产日韩欧美电影 | 国产日韩欧美在线观看 | 久热久草 | 亚洲一区欧美一区 | 日韩一区二区三区在线视频 | 国产激情三区 | 国产精品美女一区二区 | 精品一区二区三区电影 | 国产成人精品免费视频大全最热 | 亚洲九色 | 米奇7777狠狠狠狠视频 | 色男人的天堂 | 黄色一级电影免费观看 | 国产乱码精品1区2区3区 | 中文字幕亚洲区 | 国内自拍视频在线观看 | 欧美男人天堂 | 久久极品 | 亚洲精品美女在线观看 | 尤物视频在线免费观看 | 粉色午夜视频 | 日本亚洲欧美 | av电影一区二区 | 国产亚洲成av人在线观看导航 | 国产精品毛片一区二区三区 | 精品国产精品三级精品av网址 | 欧美日在线 | 欧美精品一区二区三区四区五区 | 高清人人天天夜夜曰狠狠狠狠 | 亚洲精品福利视频 | 在线观看av不卡 | 免费午夜视频在线观看 | 日操操| 国产日韩一区二区三免费高清 | 日本不卡免费新一二三区 | 欧美久久久久久久久中文字幕 | 成人性生交大片免费看中文带字幕 | 一a级片 | 亚洲一区二区三区 |