【哈爾濱工業大學】《單片機原理》(建議收藏) P16 - 16. 7.2-AT89S51單片機的串行口(2)

长安书院_
146 位粉絲
2026年6月30日
AI 生成·可能包含錯誤
方式二和方式三其實都是九位的異步通訊接口
為什麼要多了一位呢?
我們一般一個字節是八位
進行串營串輸的時候串八位就可以了
增加那一位幹嘛呢?
有兩種用途
一種做串營通訊時候的既有校驗
檢驗我甲方發給乙方的那個八位數正不正確
這是一種可能既有校驗
還有一種是用於多級通訊
我們後面要介紹
那麼方式二方式三
它是九位
多了一位
多了哪一位呢?
多了最後那一位
這一位它發的時候和收的時候是怎麼回事呢?
這一位就是剛才我說的介紹ICON特殊功能計算器裏面
那TB八位
收的話呢
就把這TB八位收到了
所以多了一個第九位
至於說第九位有什麼用途
我一會兒再講
那麼這一幀數據
一個起始位
一個停止位
還有九個數據位
當然這一位呢
實際上可長控的
你用軟件往裏寫
所以呢
方式二和方式三的幀格式都一樣
它們差別在哪呢?
就在2的S-4除以64乘上FOSC
這是方式二的幀率
方式三的幀率
大家看一眼
在後面我們將會介紹
方式三的幀率
好
那麼大家註意一個問題
就說
一定把這第九位看明白
文文發的話
是我寫到TB八那位的數據
你寫0還是寫1
根據你的需要
我收的話呢
你發的第九位
我收到我這裏呢
ICOM繼承器裏面的RB八位
好
那麼方式二的幀率在這
方式三的幀率
一會兒我們後面講方式三的時候
要介紹
方式二發送
大家看一看
實驗方式二發送和方式一發送
基本一致
多了一個TB八位
你寫到ICOM繼承器裏
其他都一樣
這是方式二和方式三的發送時序
大家註意
方式二方式三
它倆差在什麼地方
就差波特率不一樣
波特率不一樣
波特率
大家可以看到
剛才這個方式二的波特率
大家看這是固定的
只有Smodus方和選為零或者是一固定的
但是方式三波特率和T1的溢出率是有關的
這個大家一定要清楚
五腰單片機一個最重要特點
利用串營口的時候
進行串營口發送接收的時候
方式三是可調的
方式二
是固定的兩種
兩種
一定要佔用一個串營口
那麼現在很多單片機經過改進以後
這個串口的波特率
它不佔用定時器了
因為定時器的資源很重要
這個大家一定要清楚
這是方式二
方式二的真格式
那麼方式二發送
剛才大家看完方式一發送
就多了一個TB8位
多了一個發送完畢以後
那麼什麼時候開始發送呢
當執行這條指令的時候
它就開始發送
這是方式二發送
那麼下面我們就來看一個簡單的例子
有的同學說
你我平常串營通訊
我用方式一不就得了嗎
就八位數
那你多的最低九位數有什麼用
我剛才已經說了兩個用途
串營通訊當中做GEO檢驗用
還有一種用途
在多機通訊裏面
我發這一幀數據是地址還是數據
換句話說是地址幀
還是數據幀的標誌
這兩種可能零和一
那第九位數據
那麼下面看這個例子
這個例子是什麼呢
是雙機進行串營通訊
我要進行GEO檢驗
大家知道
我串營通訊過程中
我發方你收方
咱倆得約定好
我發送這個數據
你怎麼知道
我接收的是正確的
靠什麼呢
一個最簡單的辦法
是GEO檢驗
什麼叫GEO檢驗呢
咱倆收方上方要約定好
我發出的這九位數據
大家註意
發出的前八位數據
還有一個GEO檢驗位
一定要保證
假設是偶檢驗的話
保證裏面一的個數
一定是偶數
那麼大家想想
這第九位就起到這個作用
如果前八位數據
一的個數是奇數個的
我第九位只一發出去
這是TP8
如果我前面這八位數據裏
一的個數是偶數個的話
我第九位數據寫一個零
我TP8裏寫個零發
你收方呢
你來驗證一下
我發送的這一幀數據
加上GEO檢驗位
是不是偶檢驗
是不是能保證
一的個數為偶數
這種最簡單的辦法
就可以判定
是一種判定串行通訊
我收發雙方是否一致的
這種情況
好
下面大家看一看
方式二發送
在雙極串行當中的應用
我們這個例子
是發送中斷表
發送中斷服務程序
那麼TP8
就是你往裏寫的第九位數據
作為GEO檢驗
GEO檢驗位
那麼它是採用的偶檢驗
什麼意思呢
我發送的前八位數
一的個數
如果是奇數個的話
我TP8裏面寫個一
保證我發出去
這九位數據是偶數
一的個數是偶數
如果前八位數
一的個數為奇數
我TP8寫個零
你收方呢
判一下
如果是偶數個
說明你接收
說明咱們收發雙方數據是一致的
這叫GEO檢驗
當然你可以採用G檢驗
我們這個例子呢
採用的是偶檢驗
所以呢
在往外發之前
你要往外發
先寫到發送的SBOF
你一定要把數據的偶檢驗位
寫入一個TP8
但是大家註意
TP8寫一還是零
有兩種可能
看你要發的數據寫到這裏面
一的個數是奇數個偶數個
是奇數個我寫個一
偶數個我寫個零
一的個數
大家一定要註意
註意這個前提條件
好
下面我們看這程序整編
這是一段中段五指程序
這個是發送中段
PUSP SW PUSA
這個是這裏就意思表示要保護現場
當然用到的
可能還有其他計程器
你根據實際情況來添加
然後大家註意
SiteB RS1 Clear RS0
這兩位選的是第二組工作計程器區
不就是一零嗎
這兩位不是PSW計程器兩位
用來選哪一組工作計程器區
然後把發送中段標誌一定要先清零
對吧
然後大家註意
MU R0
它什麼意思呢
你選的是第二組工作計程器裏的R0來間接尋指
但是這八位數裏面
一的個數是不確定的
是奇數個
還有偶數個
你還要用軟件來判斷
好
MU把它送到A裏面
目的呢
要把它最後導到SPUF裏面發出去
那麼大家註意
這裏就要看一下
把送到A裏面以後
那個數在A裏面
一的個數是奇數個
還有偶數個
在這P裏面是否反映出來
對吧
如果A裏的一的個數是奇數個
那大家註意
假設奇數個
MU再讀到C裏面
然後呢
大家註意
讀到C裏面呢
大家看一下啊
這個繳驗位就送到TP8裏面
如果奇數
它是一奇數個
送到這裏
C也等於一
對吧
它等於一
然後大家註意
就把這C呢
就是剛才
它是一的話呢
送到TP8裏面
什麼意思呢
TP8這塊是個變數
有可能一
有可能零
看你呢
要發送的八位數據裏面
一的個數是奇數個
還有偶數個
假設是奇數個
它等於一
然後它也等於一
然後大家註意
就送到TP8裏面
準備往外發
那換句話說
另一種可能
是偶數個呢
它是不是等於零
要發這個數
一的個數是偶數個
它是不是等於零
那它也是零
那麼它是零
送到TP8裏面
往外送的是個零
這兩條指令執行完了
我就能保證
我往外發的一的個數
總能保證在偶數吧
所以這個小技巧
倒很有意思
它如果採用偶腳驗
這是一個非常好的想法
讓你來編這段長期
怎麼樣
能不能想到這樣
這樣的話
大家註意註意
就能保證
發出的這個腳驗位
TP8總能保證
它TP8加上前八位數據
總能保證
一的個數為什麼
偶數個
對吧
總能保證的位
好
然後大家註意
執行這條指令
某A裏加7裏的數
就剛才那數
送到SBOF
大家註意
這時候開始啓動發送
啓動發送了
然後按照那時序
八位再加TP8那位
發送出去
so far
收到前八位
進到接收款中心裏
TP8位
進到對方那個單片機的
RB8位
然後呢
你再準備下一個
就是這數據指標
扔1
對吧
下一個要發送的
那一個字節數據
然後呢
彈出去
把現場保護的計算器
彈出
那麼
RETI
那這一段小程序
說明什麼問題呢
能夠保證
偶久驗
我發出去的
9位數據
總能保證
一個個數為偶數個
這是發送
就方式二
方式三的
9位
一針數據為9位
所以
我們這裏就間接回答了
同學的一個問題
為什麼
方式二
方式三
要設成9位
這就是其中的一個用途
當然
還有其他用途
好
剛纔是方式二
發送
下面大家再看
方式二
接收
方式二接收的時候呢
肯定
SM0
SM1等於10
REN等於1
接收允許嗎
然後呢
當你發送的時候
我這頭
檢測
接收邏輯
RXD
檢測RXD
引腳
那個線上的
電瓶
如果
發現
復條片
那就啟動
接收邏輯
那麼
判斷其實
未有效以後
就開始
接收剩下的
那9位
信息
在接收完
第9位數據
以後
大家還要註意
一個問題
你關鍵要想中斷
因為你接收完
的數據呢
要送到
接收
緩衝器裏面
那麼
需要滿足
兩個條件
大家註意
我才能
接收
這個數據
哪兩個條件呢
第一
RI等於0
大家不要小瞧
這個接收中斷表
收訪
它意味著
接收緩衝器
它是裏面
是空的
你只有空的
你接收到數據
才往裏
RI等於
意味著
你還沒取走
剛上一次
另外
SM2
等於0
這個條件了
註意
這是多級
控制位
或者接收到的
第9位數據
RB8
等於1
這兩個條件
滿足以後
大家一定要註意
這時候
這個數據
才
就是
這個數據
才會進到
SPOF裏面
接收了
然後
大家註意
如果不滿足
剛才那兩條件
大家註意
它就意味著
剛才這一陣信息
就不要了
丟棄了
好
那麼
串行口
方十二和方十三的
接收時序圖
大家看一看
和方十一的差別
它多了一位
就對方發來的
TB8位
我這塊收到的話
是RB8位
然後
這9位數據
接收完畢的話
內部邏輯
自動把
接收中斷標誌
指1
接收標誌指1
那麼
大家註意
方十二和方十三的時序
就差了這一位數據
好
方十二發送
和接收時序
大家明白以後
就可以了
還有問題要註意
它接收的時候
怎麼知道
開始接收
啓動接收
是要判
發送數據的
起始位
就對方
發的數據
要有個起始位
它判的
復條源
它實際上
時刻
接收邏輯
監測
RSD
線上的電評
如果出現
復條源
收方
同樣
有個接收時中
它是
每
是這個Rx時中
頻率的
16倍
它對這個線
進行採樣
採樣
來判斷
是1還是0
好了
這是方十二
那麼
下面我們就討論
剛才那個問題了
我收
發
方已經保證
我發出的數據是
偶腳驗
1的個數
總是保證在
偶數分
我收方怎麼辦
我得收
收的話
我得
對
編程去判斷
如果是
1的個數
為偶數個
說明
剛才他發的
是正確
接收數據
正確
如果
基數個
我就要跳到
出錯處理程序
進行處理
好
下面大家看
這個例子
這個
剛才那個
例子是
一一對應的
下面就對
剛才發生的
數據進行偶腳驗
接收
這是方十二
或方十三
多了一個
偶腳驗
那麼
這個假設
第一組
計算器
去到R0
作為
數據緩衝區
指針
就你收到數據
要存到
數據緩衝區裏面
大家看
這個中斷程序
接收中斷
PUSH
PSW
PUSH
A
這是
當然你還有別的
需要保護的
你再也把它
壓到對站裏
SETB
RS0
CLEAR
RS1
你這是選擇
一組計算器區裏面的
R0
作為一個數據指針
CLEAR
R
得把中斷先清零
好了
大家註意
這時候呢
我收方式
自動進行的
對方發完有個
復調便
我就開始收
收完的數據
存到什麼地方
已經進到
我這裏的SBOF裏面
接收緩衝區裏
然後大家註意
我就把
接收到的數據呢
送到A類加器裏
然後大家註意
我就是開始判斷
一個個數是
奇數個
偶數個
就是進行偶校驗
怎麼校驗的呢
大家看
這段編程呢
編的也比較巧
先把
A裏面
一個個數的奇偶性
是不是反映在
P標誌裏面
假設
一的個數為奇數個
大家註意看
那它就為一
就送到C裏面
就是
PSW計算器裏面
PSW就是
位類加器裏面
然後大家註意看
我就判這個C
如果C等於零
大家註意
C等於零
這呢
就表示什麼呢
接收到
4-1的個數為偶數個
對不對
算過彎了吧
對吧
那肯定是偶數個
然後就跳到L1
跳到這個地方
然後再判什麼呢
再判
Rb8是否等於
那好了
Rb8是否等於
那C已經等於零了
剛才判完了
再判
Rb8是否等於
如果
這條指令判
Rb8如果等於
跳到
error processing
就什麼意思呢
出錯處理
這個標號
至於說出錯處理幹什麼
要根據課題的
這個任務具體要求
如果不為1怎麼辦
就往下執行
為1就執行下一條指令
那麼就把A那家器
你接收的前八位數據
送到
寄存器
這是寄存器指針
1組的
就存起來
然後把
1組的寄存器指針
指1
正1
然後呢
恢復現場
最後在Reti
這是一種可能
就是C等於0
就是
大家註意
在這
一定要把這個看
如果
A裏的1的個數
為奇數個
大家註意
這裏就是1
就送到C
然後緊接就判C
如果是1的話
就是表示奇數個
然後呢
就判這C
C如果等於
我看
收到自己1的個數
為偶數個
實際上通過那C
就能表現出來
然後就跳到L1
再判什麼呢
再判
這一位
如果C為0的話
這一位為1
肯定出錯
如果前面
大家註意
還有另一種可能
C不等於0
C等於1
大家註意
再判什麼呢
RB8這位
C等於1
如果RB8等於0
按照它這個邏輯
就應當跳到
那肯定不是偶角驗了
不是偶數個
就跳到出錯的標號
跳到這
跳到後面
出錯標號
然後往下執行
然後從這
跳到這
如果出錯
跳到ERP這個標號
沒出錯
說明剛才收到的
8位數據是正確的
那麼怎麼辦呢
就跳到L2
就把接收到的數據
存起來
存到什麼呢
存到內部寄存器裏
片內的
然後把紙質扔1
把現場1恢復
所以大家註意
關鍵在這幾條指令
這幾條指令
所以大家可以
分析這段程序的時候
按兩種情況
如果我收到的
1的個數為奇數個
肯定要跳到ERP這個地方
如果1的個數
為偶數個
經過兩次判斷
1的個數為偶數個
肯定
大家註意
肯定
要把它存到
按這個紙質
存好
這就是串聯通訊當中
最簡單的
集偶腳驗
這個是偶腳驗
這裏面就充分利用了
第9位數據
就串聯傳輸當中
第9位數據
好
那這個就是
初刷處理標號
點點點
至於說
我處理
怎麼來處理
要根據這個任務要求
來進行處理
然後只乘以返回
好
方式2
多了一位
9位
真
就是這一根真格式裏面有9位
多出了一個數據位
方式3
大家註意
SM0 SM1等於11的時候
它是方式3
方式3什麼的
它是波特率可變的
和剛才那個比
大家註意看
和剛才那個比
這個地方是定時器T1的溢出率
你可以用定時器T1來調整波特率
來調整波特率
所以這是方式3的波特率
大家註意
由於溢出率
你往T1裏面寫的時間長數不同
它溢出率
每秒溢出的次數就不一樣
所以它是可變的
方式2和方式3除了波特率有差別以外
其他都相同
這個大家一定要記住
一定要記住
方式2和方式3除了波特率有差別以外
其他都一樣
所以掌握一個就可以了
下面介紹一下多機通訊
多機通訊
大家註意
就是利用8051單片機
可以進行多機通訊
但是多機通訊是這樣
大家看多機通訊系統示意圖
這是主機
主單片機
這個是重機
1號51單片機
2號51單片機
它有時候是那樣
通訊當中經常需要一個主機對一個重機
你比如說我只跟2號重機通訊
1號和3號不要通訊
那你怎麼辦
你怎麼辦
你要通過那什麼
SMR位來控制
一會我講一下怎麼來控制
還要利用什麼
那個第九位數據位
就是方式2和方式3的裏面的TB8 RB8
第九位來控制
大家註意
一般多機通訊的話
系統當中有一個是主機
當然這個主機
也可以是單片機
也可以是V級PC機
那麼與多個單片機組成的系統
那麼主機的TXD
與各個重機的RXD相連
主機的RXD和各個重機的TXD相連
那麼大家註意
我們這裏先來假設
這個重機的地址為01H
這個重機的地址為02H
這個重機的地址為03H
好
那麼下面我們介紹這個多機通訊原理
大家一定要把這原理掌明
那剛才的系統
這個多機通訊系統
它是一個組成式的
大家註意
系統當中只有一個是主機
其他全是重機
另外還要註意一條
大家看剛才這個聯訪
主機發送的信息
可以被所有的重機接受
但是任意一個重機發送的信息
只能由主機接受
重機和重機之間
不能進行直接通訊
要註意這個前提
重機和重機要進行通訊
怎麼辦
重機先發到主機
主機再發到重機
明白吧
所以這也是一個組成式的多機通訊
那麼下面我們就來看
多機通訊的工作原理
大家註意
有時候主機
要和一個所選擇的重機進行通訊
並不是和所有的重機進行通訊
那怎麼辦
必須保證這串口有識別功能
剛才說的我們前面介紹的
SM2
這一位
實際上就為了滿足這一個條件
來設置的多機通訊控制位
那麼它的工作原理
大家註意
首先SM2都指一
表示
可以進行多機通訊
SM2不是多機通訊控制位嗎
大家多機通訊之前
先指一
指一表示可以進行多機通訊
往裏面有兩種情況
首先
各重機SM2指一
這時候大家註意
假設重機收到主機發來的第九位數據
RB8為一的話
大家註意
我多機通訊的過程
是什麼樣一個過程呢
主機先發一幀地址
各個重機同時接收
各個重機接收完地址以後
要判斷主機發來這個地址
是不是你自己的地址
如果是自己的地址
就把自己的SM2為清零
如果不是自己的地址
SM2為指一
但是大家註意
主機先發地址幀
地址幀的第九位數一定是一
表示地址幀
如果第九位數據是零
表示前八位數據是數據幀
這是主機往外發
所以第一次發地址幀的時候
各個重機SM2都指一了
表示能夠接
大家都能接受這個主機發出的地址
接到地址以後
大家註意
各個重機都收
收完以後
比較一下是否自己地址
這軟件都可以編
是自己地址的話
SM2清零
不是自己地址的話
SM2仍舊為一
好
那麼大家註意
緊接著主機發數據幀
發數據幀
數據幀的特點
第九位數據是零
TP8寫的是零
然後往外發
各個重機就接收
大家註意
雖然都能接收
但是隻有剛才重機把SM2為清零的那個重機
就是和自己地址相符的那個重機
它SM2清零
那麼根據前面講的SM2的特性
如果SM2等於零
那麼就可以接收
就可以引起它的中斷
就可以把接收到的SBOF裡的數據取走
但是SM2等於一的時候
就是剛才那些不是自己的地址的重機
它並沒有把SM2清零
所以SM2等於一的時候
當對方發的是數據幀的時候
不會引起不是自己地址那個重機中斷
所以它也就不能接收這個數據
這一幀數據
不能接收這一幀數據和能接收的
這就意味著什麼呢
該收的就收
不該收的就不收
明白嗎
這裡靠什麼來控制呢
大家注意
靠SM2
我再說一遍
最開始大家都是收方重機SM2都值1
然後主機發的地址幀呢
第九位也是1
只有第九位是1
就你收到的是R密碼是1
SM2等於1的話
這時候才能引起就是大家中斷
才能進到那裡面
進到中斷服務程序來判斷
你接收的這個地址
收的地址不一樣
有可能是有可能不是
是自己地址的話怎麼辦
把那SM2清零
不是自己地址的話呢
SM2仍舊為1
然後主機再發數據幀
數據幀的特點是第九位為零
但是大家都收
收的話剛才SM2等於1了
那樣的衝擊
收到的第九位數據RB8是零
SM2等於1
這時候不會引起這個衝擊的中斷
他就不會接受這一陣數據
那麼RB8等於零
你收到了
然後SM2也等於零
這樣就能引起衝擊的中斷
引起衝擊中斷
這數據才能在SPUF裡面
才能進入中斷程序
才能把它讀走
其他的不引起中斷
你即使數據在SPUF裡也不會離場
這樣就完成了什麼呢
該接收的就要接收
不該收的就不收
明白這個意思吧
所以這裡最重要的是什麼條件呢
如果SM2等於零
他肯定能夠引起接收中斷
那剛才我第一次
我主機發第一次發地址的時候
發的地址
你和自己一比相同的話
你已經能夠
就是把自己SM2清零了
不是自己地址
SM2仍舊等於1
這裡大家一定要注意
當我第一次發地址幀的時候
SM2等於1
RB8等於1
因為地址幀的特點是什麼呢
第九位為1
那RB8就等於1
這樣才能引起我各個重機中斷
我各個重機進到中斷服務程序
把收到的主機的那個地址
和我自己的比一下
是自己的SM2等於零
不是的話仍舊保持為1
等下一次我再發數據幀的時候
第九位數據是零
那麼我這頭SM2已經清零了
能引起RI中斷
這個是多機通訊的特性
就是它設計的時候
多機通訊位就有這個特性
所以大家一定要注意
當SM2等於零的時候
無論重機接收到的第九位數據
1還是零
都不理它
都給你收過來
所以大家注意
這樣就實現了什麼
一對一的通訊
那麼具體過程
就是主機和重機通訊的時候
先把重機地址發給各個重機
然後再發數據
那麼在最開始的時候
你各個重機的初始化程序
都應該設成什麼呢
重機的串口中斷
另外把各個重機串口
都編成為方式二方式三的接收
然後就是九位的異步收放
另外大家注意
你本身的SM2和RE1
RE1一定要指1
這樣你才能收
這樣重機就處於多機通訊
直接收地址幀的狀態
最開始SM2一定
那主機要和某一個重機
進行通訊的時候
剛才已經說了
一定要先把重機的地址發給
主機一定要把重機地址
發給各個重機
然後各個重機都能引起中斷
就和自己的地址相比
那麼大家一定要注意
發出的地址幀的信息
第九位一定是為1
數據幀的信息
第九位一定為0
然後主機再發數據
然後和自己地址相符的重機
已經進了SM2
它一定能夠接收
主機發出的數據幀
那麼仍舊保持為1的
它就不能
什麼意思呢
當TB8等於0
這是數據幀
你收到的是RB8等於0
RB8等於0
SM2等於1
這倆不相同的話
單片機是不能進行接收的
串營接收
所以不是自己地址的
那個重機不能接收
主機發送的數據
就是說和地址不相符的重機
它收不到主機發來的數據
這裡大家注意靠什麼
靠SM2
這裡我把它再詳細的說一下
當重機SM2等於0的時候
或者是收到RB8等於0的時候
大家注意這倆條件
SM2等於1
RB8等於1的時候
這能引起中斷
那麼當它發完以後
各重機都中斷了
然後比較主機發來的地址
因為都能引起中斷
都能收剛才發的地址
你比較地址不是自己的
那怎麼辦
然後SM2等於0
這就是地址相符的
不符的
大家注意不符的SM2
等於仍舊為1
那地址不符的SM2等於
你下一次發的數據
收到的RB8等於0
不會引起中斷
這是由它裏面的中斷
穿越口中斷
穿越口每個部件
它的特性設計時候決定
這樣的話就真正做到
主機想要發給誰
數據就發給誰
這樣的話就真正保證了
主機和重機所選擇的
重機通訊的正確性
結束這一次數據通訊以後
大家注意
可以為下一次的多機通訊
做好準備
另外每個重機地址
在編程之前一定要設好
比如剛才那三個重機地址
一個是01H
一個02H
一個03H
當然你編程的話
你可以先預留
1到2個廣播地址
廣播什麼叫廣播
我發的時候
所有的重機
都可以接受廣播地址
那麼你可以把廣播地址
設成00
這時候大家一定要注意
剛才的過程
關鍵的是什麼呢
就是第一次發地址證
第二次發數據證
那麼該接收的
符合自己地址
一定要接收
不符合自己地址
一定不要接收
那麼這裏面最最關鍵的
是SM2位起作用
SM2位
在和RB8起作用
所以呢
方三可以進行多機通訊
原因就是多了一個D9位
好
那麼大家注意
現在就有一個問題
如果我進行雙機通訊的話
或者多機通訊的話
那裏有一個波特率
怎麼來設定
那首先我們大家注意
首先收發雙方的波特率
必須一致
大家想想
要保證一致收發雙方的時鐘
收頻率的一致
但是呢
不可能做到完全一致
那麼如果它有誤差
差多少
這個留給大家思考
對吧
差多少
要差出一位的時間
那這個就不允許了
這個就不允許了
那麼大家呢
回去思考一下
那麼這裏大家要注意
怎麼來設定這波特率呢
首先方式二零和方式二的波特率
是固定的
我們前面的
方式零的波特率等於多少
fosc除以十二
就矜振
除以十二分頻
方式一和方式三的波特率可變的
是由誰來定的呢
由T1溢出率來定
那麼下面我們來看一下
串營口預料中
串營傳輸速率的快慢
實際上就是用波特率來衡量的
那什麼叫波特率呢
波特率的定義是
串營口每秒發送的
或者是接收的位數
就叫波特率
那麼這時候大家一定要注意
方式一和方式三
它是由T1溢出率來定的
那麼其實T1定時器
還有好幾種工作方式
不同的工作方式
它得到的波特率範圍是不一樣的
不同工作方式
實際上就T1工作在不同的技術位數
好
下面大家
T1定時器產生波特率計算
實際上只跟方式一方式三有關
方式零的時候
這不用考慮
就是固定的FOS1除以12
方式二的時候
大家注意
二的Smodus方除以64乘上FOS1
那麼大家注意
如果FOS1等於12兆
我們選用12兆進陣的話
Smodus我寫個零
這時候波特率等於187.5k
那波特率的單位上每秒多少位
如果Smodus等於1
那麼波特率等於375k
就等於它的二倍
好
方式一和方式三的時候
你採用方式一方式三
可以得到波特率
你可以進行選擇
你往T1裏面寫不同時間長數就可以
一般情況下
通常都用T1做波特率發生器
為什麼不用T0
因為你用T1做波特率發生器的時候
T1就不能再作為其他用途了
這時候T0可以工作在方式三
可以自己本身變成兩個定時器機遊戲
好
我要採用T1做波特率發生器
這是經常來的
那就等於什麼
波特率等於2的Smodus防處於32
乘上T1的溢出率
所以大家註意
這個溢出率和Smodus的值
共同決定波特率的大小
那麼在實際設定波特率的時候
一般都把定時器設成方式二定時
為什麼
定時器方式二
是時間長處可以自動裝入
由硬件自動完成的
那這個有什麼好處
這個可以減少執行指令所帶來的定時誤差
定時誤差
好
那麼大家註意
定時器T1的溢出率
就等於這個公式
實際上就由前面這個公式推出來
就由這個公式推出來
好
那麼
剛才的公式再倒一下就變成
波特率等於32
分之2的Smodus防
乘以這個式子
這裏大家註意
X是什麼呢
你不要定時器工作在方式二
要得到某一波特率嘛
X就是那個初值
所以大家註意
波特率實際上就隨意什麼呢
矜振頻率Smodus
還有初值的變化而變化
那麼大家想一想
矜振我們選定以後
它是固定不變的了
Smodus我們只有兩種可能
要麼是0
要麼是1
好
下面大家註意
在實際你設計穿行騰訊
這個過程當中
首先要有一個波特率發生器
一般採用T1
然後你把波特率定完以後
你要算這個定時器技術器初值
大家可以看一眼
這個初值怎麼辦呢
最好你別算
很多人都已經把它算完了
把它做成了一個表
大家註意看
將來你做穿行騰訊的話
要波特率定
你要算定時器初值
一般情況下
常用的波特率
大家註意看
都在這
幾個固定值
常見的
大家看他們之間都是差二位的關系
這裏大家一定要註意
這個是人們已經算好的
你只要把定時器設置成方式就可以了
那麼初值在這
這裏面我要提醒大家
按照前面的公式
如果你選成12兆進震
12兆進震在那式子裏面
就12乘10的6字方
會出現什麼情況呢
大家註意
它除不開
如果你選的進震
是11.0592兆
帶到剛才那個波特率計算公式裏面
再加上這個初值
就可以整除
就得到一個理論上
沒有誤差的波特率
所以大家一定要註意
凡是用到串營通訊的時候
一定要切記
進震選為11.0592
同學說進震到哪裏買
到電子商店
電子市場裏買
這都有
你不要認為
市場上賣的都是12兆或6兆進震
所以一定要選成這個
選成這個
11.0592
你一定要明白其中的道理
什麼道理
它帶到波特率計算公式裏面
能夠整除
得到一個整數的波特率
得到一個能夠除進的整數波特率
所以大家看很多人的電路設計裏面
那地方進震選的11.0592
很納悶
什麼意思
道理就在這
這個一定要清楚
那麼這個地方是告什麼
你用串營口
要佔用一個定時器
用定時器作為波特率發射器
誰來做波特率發射器
一般採用T1
為什麼
原因是T0可以工作在方式
還可以多出一個定時器
技術器
這樣它的資源可以得到充分利用
第二要註意的什麼
選進震的話
如果用串營口進行串通訊
你要得到一個整數的波特率
除了定時器選方式
時間長處自動裝入以外
可以減少你執行指令
所帶來的定時誤差以外
還要註意你進震的選取
一定選取11.0592
這個在電子市場是可以買到的
所以大家一定要明確
一定要明確
這個地方給你了什麼樣的方
方便計算波特率的方法
原因是這個表
已經把這些裝T1裏面的時間長處算好了
那麼進震也告訴你了
大家可以科後算一下
按那公式
如果你選12兆或者6兆
這是最經典的賣的晶體頻率
大家往裏一帶就發現
這式子是儲不盡
你要帶11.0592
肯定能儲盡
那麼大家註意
剛才講的實驗歸納總結起來
就是說你要帶串營通訊的話
進行串營通訊串口通訊設計
你採用12兆或6兆有誤差
那麼消除誤差
你可以採用11.0592
另外大家還要註意
如果你要選用比較低的波特率
舉個例子
波特率選成55
那麼你這時候定時器T1
應當設置成方式一定時
因為方式一定時時間長
它的波特率很低
那麼這時候大家註意
如果T1溢出的話
你需要在中段服務程序裏面
用兩條指令
再往裏裝時間長處
大家註意
由於是執行指令
軟件裝進這個長處
它就會帶來誤差
這個大家一定要註意
所以這時候
你要為了保證波特率要準確的話
你可以採用改變儲值的方法來進行調整
咱們看一個例子
如果時鐘選用11.0592兆
我選用T1到方式二定時
作為波特率發生器
我現在選用串口的波特率設計為2400
大家一定要註意
就是每秒2400位
那麼這個波特率怎麼來
讓你算裝到T1裏面的儲值
那實際上只要查那表
把T1設為方式二定時
Smod等於零
然後把這些條件都帶到波特率計算公式裏面
那麼大家註意
要解的就是這X
那X就可以解出來
244
16進制F4
你只要把F4往定時器高把位低把位往裏裝就可以了
實際上大家註意
在實際應用設計當中
直接查這表就可以了
比如說
我現在要2400的波特率
就查這個
2400
Smod等於零
然後我把定時器設成方式二
那麼高把位低把位裝的儲值就應當是F4
我們講完了波特率怎麼來計算
一般情況下
很多人採用的波特率都是這幾個數
1200
2400
4800
9600
19200
他們各差兩倍
那麼最後我們介紹一下有關穿行口的基本應用
首先看一下兩個單片機點對點通訊一般怎麼連
那麼多機通訊怎麼連
另外單片機與PC機之間的單機和多機通訊怎麼連
這裏面我們重點介紹什麼呢
雙機穿行通訊裏面的硬件連接
這裏面我們就介紹第一部分硬件連接
就是雙機穿行通訊怎麼連
大家註意
看這個電路
前面講過兩個單片機連
大家一定要註意
那個連接通訊距離很近
幾米吧
一般也就幾米
它是什麼電瓶呢
大家都知道
穿行口的引腳電瓶是TTL電瓶
所以一般說來兩個單片機直接發送和接收相連
傳輸的距離是1.5米左右
這個書上有這個圖
實際上就甲機的RXD和乙機的TXD相連
乙機的RXD和甲機的TXD相連
那麼在我們平常的單片機應用當中
RS232穿口用的特別多
大家看一下這個電路
我們就結束
大家看一下
這是最經典的利用RS232接口進行雙機通訊
這樣它的距離可以從幾米擴大到十幾米
大家註意
如果採用剛才的RS232接口
可以擴到15米
那麼大家看一看這個中間的RS232電瓶的芯片
大家看一看
單片機出來這兩角
這連的是Maxim
是一個做汽架很有名的公司
RS232
大家註意
它出來的是TTL電瓶
為瞭解決遠距離的傳輸
採用RS232進行通訊
可以使通訊距離達到15米左右
那麼這個芯片是什麼
TTL電瓶轉換到232電瓶的芯片
這個也是
大家註意
出來的是TTL電瓶
出來以後
大家註意
這個地方是RS232電瓶
RS232電瓶
它的電瓶差比較高
採用RS232電瓶以後
要比TTL電瓶
串行傳輸的距離要增加了不少
以後一點幾米
兩米
可以增加到十幾米
所以RS232電瓶的話
是我們串口標準裏面
最開始使用的比較多
到後來就用422
423
485
這些串行通訊接口標準
我們將放到下一次課來講
好今天課到這
