網上有很多講串列埠通訊的知識點,看了很多,今天就總結一下吧,歡迎拍磚!
1.資料傳輸
微控制器的序列通訊使用的是非同步序列通訊,所謂非同步就是指傳送端和接收端使用的不是同一時鐘。非同步序列通訊通常以字元(或者位元組)為單位 組成字元幀傳送。字元幀由傳送端一幀一幀的傳送,接收端通過傳輸線一幀一幀地接收。
一、字元幀的格式
字元幀由四部分組成,分別是起始位、資料位、奇偶校驗位、停止位。
1)起始位:位於字元幀的開頭,只佔一位,始終是邏輯低電平,表示傳送端開始傳送一幀資料。
2)資料位:緊跟在起始位後,可取5、6、7、8位,低位在前,高位在後。
3)奇偶校驗位:佔一位,用於對字串傳送做正確性檢查,因此奇偶校驗位是可選擇的,共有三種可能,即奇校驗、偶校驗和無校驗,由使用者根據需要確定。
4)停止位:末尾,為邏輯「1」高電平,可取1、1.5、2位,表示一幀字串送完畢。
非同步序列通訊的字元幀可以是連續的,也可以是斷續的。連續的非同步序列通訊,是在乙個字元格式的停止位之後立即傳送下乙個字元的起始位,開始乙個新的字元的傳送,即幀與幀之間是連續的。而斷續的非同步序列通訊,則是在一幀結束之後不一定接著傳送下乙個字元,不傳送時維持資料線的高電平狀態,使資料線處於空閒。其後,新的字元傳送可以在任何時候開始,並不要求整數倍的位時間。
2.mcs-51微控制器序列通訊的控制暫存器
2.1序列口控制暫存器(scon)
位位址9fh
9eh9dh
9ch9bh
9ah99h
98h位符號
sm0sm1
sm2ren
tb8rb8
tiri
各位說明如下:
1)sm0、sm1——序列口工作方式選擇位
其組合狀態和對應工作方式為:
sm0
sm1工作方式
方式0方式1
方式2方式3
2)sm2——允許方式2、3的多機通訊控制位
在方式2和3中,若sm2=1 且接收到的第九位資料(rb8)為1,才將接收到的前八位資料送入接收sbuf中,並置位ri產生中斷請求:否則丟棄前8位資料。若sm2=0,則不論第九位資料(rb8)為1 還是為0, 都將前八位 送入接收sbuf中,並產生中斷請求。
方式0時, sm2必須置為0。
3)ren——允許接受位
ren=0 禁止接收資料
ren=1 允許接收資料
4)tb8——傳送資料位8
在方式2、3中,tb8的內容是要傳送的第九位資料,其值由使用者通過軟體設定。
5)rb8——接收資料位8
在方式2、3中,rb8是接收的第九位資料。
在方式1時,rb8是接收的停止位。
在方式0時,不使用rb8
6)ti——傳送中斷標誌位
在方式0時,傳送完第八位資料後,該位由硬體置位。
在其他方式下,於傳送停止位之前,由硬體置位。
因此,ti=1表示幀傳送結束,其狀態即可供軟體查詢使用,也可請求中斷。
ti 由軟體置為「0」。
7)ri——接收中斷標誌位
在方式0時,接收完第八位資料後,該位有硬體置位。
在其他方式下,於接收到停止位之前,該位由硬體置位。
因此,ri=1表示幀接收結束,其狀態即可供軟體查詢使用,也可請求中斷。
ri由軟體請「0」。
2.2電源控制暫存器(pcon)
位序d7
d6d5
d4d3
d2d1
d0位符號
smod
gf1gf0
pdidl
與序列通訊有關的只有d7位(smod),該位為波特率倍增位,當smod=1時,序列口波特率增加一倍,當smod=0時,序列口波特率為特定值。當系統復位時,smod=0.
3.mcs-51微控制器序列通訊工作方式
序列口 的工作方式由sm0和sm1確定,編碼和功能如下表
sm0 sm1
方式功能說明
波特率0 0
方式0
移位暫存器方式
fosc/12
0 1
方式18位uart
可變1 0
方式29位uart
fosc/64或fosc/32
1 1
方式39位uart
可變方式0和方式2 的波特率是固定的,而方式1和方式3 的波特率是可變的,有ti溢位率決定。
3.1序列工作方式0
序列口工作方式0時,序列口作同步移位暫存器使用。以rxd(p3.0)端作為資料的輸入和輸出端,而txd(p3.1)提供移位的時鐘脈衝。外接移位暫存器,實現資料並行輸入或輸出。工作方式0時,波特率為fosc/12,即乙個機器週期移位一次。
3.2串列埠工作方式1
方式1為10位為一幀的非同步序列通訊方式。其幀格式為1個起始位、8個資料位和1個停止位。工作在方式1時,其波特率是可變的,波特率的計算方式為:
波特率=2^(smod)/32*(定時器1的溢位率)
其中,smod為pcon暫存器最高位的值,其值為1或0.
當定時器1作為波特率發生器時,選用工作方式2(即自動載入定時初值方式)。選擇方式2可以避免通過程式反覆裝入定時初值所引起的定時誤差,使波特率更加穩定。假定計數初值為x,則計數溢位週期為:
溢位週期=12/fosc*(256-x)
溢位率為溢位週期的倒數。則波特率的計算公式為:
波特率=2^(smod)/32*(fosc)/(12*(256-x))
在實際使用中,波特率是已知的,因此需要根據波特率的計算公式求定時初值x。使用者只需要把定時初值設定到定時器1,就能得到所要求的波特率。
3.3序列工作方式2
方式2為11位為一幀的非同步序列通訊方式。其幀格式為1個起始位、9個資料位和1個停止位。在方式2下,字元還是8個資料位,只不過增加了乙個第9個資料位(d8),而且其功能由使用者確定,是乙個可程式設計位。方式2的接收過程也與方式1基本類似,所不同的只在第9資料位上,序列口把接收到的前8個資料位送入sbuf,而把第九資料位送入rb8。
方式2的波特率是固定的,而且有兩種,即fosc/32和fosc/64。當smod為0時,波特率為fosc/64,當smod為1的時候,波特率為fosc/32。
3.4序列工作方式3
方式3同方式2幾乎完全一樣,只不過方式3 的波特率是可變的,由使用者來決定。其波特率的確定方式同方式1。
微控制器串列埠通訊
微控制器串列埠通訊 通常的usb序列通訊方式為全雙工,即兩條資料線 rxd和txd,一條用於傳送資料,一條用於接收資料。在序列通訊前,需要對序列通訊進行配置。對於微控制器 ri為接受中斷標誌位,未通訊時ri 0 當電腦傳送第乙個位元組幀a0到微控制器時,sbuf a0,中斷標誌位ri 1,微控制器呼...
微控制器串列埠通訊
1 需求 實現電腦端控制微控制器開啟燈光風扇,顯示微控制器傳遞過來的資料 如溫度 濕度等 2 工具 平台軟體 驅動人生 vs2012 keil4 3 下面就開始吧 4 檢視我們當前的通訊埠號 如圖 然後確定我們微控制器的晶振,我是用的是11.0592m的 即9600 差不多我們就可以開始我們的開發了...
微控制器串列埠通訊
1 每隔1秒鐘,a向b通過串列埠傳送乙個位元組c num 該位元組按照0x00 0x09迴圈,例如某一時刻傳送c num 0x 3 2 b接收到資料後,做9 c num的計算,並將計算結果通過串列埠傳送給a微控制器。例如b接收到0x03,則b要通過串列埠返回0x09 0x03 0x06給微控制器a ...