【哈爾濱工業大學】《單片機原理》(建議收藏) P18 - 18. 7.4-AT89S51單片機的串行口(4)

长安书院_
145粉絲
5 次觀看·2026年7月17日
AI 生成·可能包含錯誤
那麼這個地方他就爲零
一判他零的話
還在這兜圈子
這時候串口在幹嘛呢
在往外發第一個字節
發第一個字節
他這個這個這時候呢
那發第一個字節呢
是硬件自動往外發了
那麼這個長驅就在這兜圈子
當這一個數據字節發完以後
大家注意啊
就引起了中斷
因爲這個地方允許中斷
引起了中斷
就跳向中斷
串口中斷入口
中斷入口又跳到
川營口那個中斷入口
川營口中斷入口在哪呢
在這兒大家看一看啊
在這兒
這是川營口的中斷服務程序
就說你這一個字節發完了
引起中斷
跳到0023H
0023H裏面又放的長跳短跳到這入口
好了
那麼進到這裏以後怎麼辦
就進到串口中斷服務程序
把TI清零
然後把這指針徵一
指針徵一意味着什麼
剛纔是把2000H單元送
我要爲2001H單元那個數再往外送做準備
然後大家注意
要判斷一下
你這麼一個一個送
那麼這些單元最後地址是多少呢
是2040H
那就好了
比較一下把DPH送到A裏面
然後大家注意這個比較了
A裏面和這數據塊的末地址76裏面是不是相同
那實際上大家想想
如果不相同的話
他不是末地址
直接就跳到END1
如果高字節相同的話
再判低字節相不相同
不相同
就沒到2040的數據塊沒發完
那怎麼辦
跳到END1
END1
因爲這個地方要什麼呢
判斷一下是否把數據塊的最後一個
單元裏的內容是否發送完
沒發送完跳到END1
跳到END1
END1在哪呢
在這呢
在這
大家看你沒發送完
下面銀行怎麼辦
接着發
所以這時候大家注意DPTR
那個單元內容送到什麼
A裏面
然後大家注意看這條指令
又往窗口送
那發下一個數
發下一步
這時候內部的硬件自動通過窗口
一個一個一位一位往外傳
然後大家注意
中斷返回
當一個字節數據塊裏面的一個數據針
一個字節這種發完以後
那麼這是由中斷引起的
所以中斷返回
那同學說返回到什麼地方
返回到剛纔打斷那個地方
斷點
斷點在哪呢
在這
斷點在這
是不是斷點
那你說應該回到這一條指令的下一條指令
但是剛纔一盤F0是爲零
那麼它應當跳到什麼地方
爲準
那爲準還是這裏
所以斷點到這
又到這幹嘛呢
兜圈呢
等着什麼呢
等着這一個字節發完了
再引起中斷
我還再重複剛纔的過程
這樣一個一個往外發
發到什麼時候呢
發到當這個指針指向2040了
大家注意看
就在這個地方
發到這個地方
一比
相等了
說明什麼呢
最後一個單元就最後一個數
你就發完了
發完怎麼辦
就停
怎麼停呢
SETB F0
數據發完了
應當把這個數據發完的標誌位指1
所以SETB F0
然後關創口中斷
CLEAR ES
然後關總的中斷
CLEAR EA
然後中斷返回
中斷返回到什麼地方
又回到剛纔那個
兜圈那個地方
又回到這個地方
又回到這條指令
但是剛纔已經把F0指1了
大家想想
把F0指1了
他爲1
這個條件不滿足
就往下執行
往下執行
因爲剛纔是一個子層去調用
所以就返回到子層去調用的地方
子層去調用在哪呢
大家看一眼
在這
子層去調用
那就返回到什麼呢
他的下一條指令
大家看
是在這兜圈的
這條指令原地轉圈
意味着什麼呢
他來模擬一段實際的要執行的程序
知道吧
所以用這條指令
那好了
這程序當你把這些地址針發完了
再發數據針
然後呢
發完了
在這就該兜圈了
這一段實際上應當是編一段
你要處理的程序
要幹什麼事呢
所以大家想一想
這個程序
其實我倒覺得你們應當很好地讀完
一定要整明白
這是怎麼發法
下面再看一下收法
以及接收程序
是怎麼收
好了
那麼他也採用中斷方式
org 000 ljump到min
然後org 0023
竄口
他要在竄口收數據
然後呢
程序
從1000H開始
大家看收房的竄口程序怎麼編
某設置針
53送到SP裏面
當然有同學說
我寫60行不行
也可以啊
你只要不和那塊衝突就行
根據實際情況來定
好
下面再看一下
然後調用紙程序
眼睛盯着的地方
調用紙程序
調用
好
從這塊開始執行
那好了
這紙程序在這
某78H送到R0裏面
78是個立即數
送到R0
大家注意
R0一會要做間接訊制
把78送到哪
什麼意思啊
什麼意思
對方剛纔發的時候
數據塊的首地址要存到7877裏
數據塊的末地址存到7675裏面
那麼這一邊呢
也要採用相同的那種做法
大家注意把78送到R0裏面
然後緊接着
TMOD裏面送上R0
因爲這邊收房
收房的話
要有個波特率發生器
由誰來控制
T1
所以
要給T1設儲值
把T1設成定時器T1放上
使用T1作爲波特率發生器接收的波特率發生器
然後大家注意波特率
T1的高把位
低把位各寫F3
這個地方大家一定要注意
我這採用六兆進陣
然後波特率2400
如果我要採用11.0592
這樣的話
波特率理論上講沒有誤差
那麼這個常數你再重新算一下
這要會
這是方針
定時器方針什麼方針
時間常數自動裝入
好
然後80H送PCON
就波特率Smod位等於1
那麼算波特率公式的時候
我們上一堂課都看到
昨天看到Smod
2的Smod次方
那把它設成1
然後大家注意SiteB T21就是把T1定時器啓動了
幹嘛呢
他做接收波特率發生器
控制波特率
然後大家注意
Scon50H立即數送到Scon裏面
大家注意這是設置串口在方式1
但是還有一個條件
R1N那位
大家把這個50展開
0101
R1N那位爲1
因爲他是接收
對吧
R1N那位必須爲1
這樣的話呢
就把串口設置在工作方式1
並且R1N位等於1
允許他接收
然後大家注意這邊收的話呢
全採用中斷
開中斷
把IE裏面寫進的90
那麼EA那位指1
總的中斷開開了
然後大家注意看
ClearF0
大家讀程序的時候非常難
難看
這個地方在什麼地方難讀的
這F0是幹嘛的
F0是什麼呢
地址接收完的標誌
就是當你接收完
這個對方發來的地址的時候
剛纔不說四個字節
四個地址針嗎
接收完以後
F0呢
把它
這個就指1
沒接收完呢
就清零
所以呢
這個是地址接收完的標誌位
他一清零表示還沒有接收完
因爲對方正發
好了
Clear7FH
大家注意這個地方
許多同學沒看明白
7FH是什麼呢
是數據接收完的一個標誌
如果你接收完了
他指1
沒有接收完呢
清零
他倆誰地址數據都沒接
我收換了
都沒接收呢
所以他倆都清零
這是一個位地址
大家一定要注意
同學說怎麼能判
這是後面是一個位地址
還是字節地址呢
你查一下指令系統
我講過的吧
那個指令表書裏有吧
他只有有這個那什麼
就是這條指令纔是位操作指令
字節操作沒有Clear這條指令
好
大家明白這兩位的含義就行了
再往下看
然後大家注意看
判剛纔那個7FH
就數據接收完的這個標誌位
他肯定是爲零
剛纔你都把他清零
因爲還沒有接收呢
你接收完了
你就把他指1
一判他爲零
那怎麼辦
在這兜圈
在這兜圈的甲基
已經通過串口網發數據
這頭呢
你中段都開了
就等着呢
等着兜圈了
啪一下子
你這頭收
因爲對方發的話
你這時候收的話是自動檢測的
當你收完以後引起中段
進到0023H
然後呢
0023又跳到哪呢
跳到這串口的中段入口
大家看
進到接收中段裏
接收中段裏面
你就把這些需要保護的寄存器
當然根據你需要
哪些需要壓佔保護
你自己來決定
我這裏就給個例子
把這些寄存器都壓到這裏
然後剛纔不接收中段嗎
RA肯定指1了
因爲引起中段了
那你再把它清掉
一定要清掉
你不清掉沒法接
接收下一個字節
然後大家注意看
這個點
如果F0等於1表示接收的
大家注意
F0等於0表示是
它要爲0的話表示接收的地址
如果F0等於1表示接收數據
那麼這時候看一看
你判是接收的地址還是數據
那F0大家注意
這時候它是爲0的
爲0的
那麼大家剛纔看
它已經清零了
因爲它對方首先發的是地址
你雙方都約定好了
這叫協議
只要是你編軟件的時候
自己規定好了
那麼這個地方呢
大家注意
F0等於0
本來如果它要等於1
就跳下接收數據
但是它等於0怎麼辦
不滿足這個條件
往下執行
大家注意
就注意這個地方
Move S B O F讀到A裏面
這個地方是非常關鍵
是把剛纔串口緩衝器引起中斷的
那接收的那一個地址針
已經讀到這裏面
然後不引起中斷嗎
把它讀到A那家器裏面
然後大家注意看
Move A裏的內容
就是剛纔對方發來的
第一個字節的地址
送到什麼地方呢
R0剛纔已經是初值裝的78
裝到78的RAM單元裏面
這樣的話呢
就把第一個地址放到裏面
然後大家再往下看
然後指針減1
R0原來78變成77了
準備接收下一個
字節的地址
然後大家注意
比一下
R0裏內容這麼老減
每一次都減
是不是74
大家注意
R0裏的內容應當是多少
因爲接收四個字節的地址
78
77
76
75
那麼當他指針減到74的時候
實際上地址就接收完了
所以這塊比一下是不是74
如果是74
你四個字節的地址針都收完了
那就跳向R1TN
如果沒有不是74的話
說明這四個字節還沒接收完
那怎麼辦
往下執行
那如果是74的話
往下執行
不是74的話呢
大家注意跳到這個地方
是74表示什麼
四個字節的地址都接收完了
那怎麼辦
SETB F0
F0等於表示
這四個字節的地址接收完畢了
接收完畢
然後大家注意
如果沒接收完畢
就跳到這個地方
大家看
POP ACC
POP POP
就把現場保送內容都推出來
從這一段出來
然後中斷返回
返回到什麼地方呢
又是剛纔那條指令
又是剛纔那條
就是兜圈那個指令在這兒呢
在這兒
又回到這個地方
又接收一個字節
又引起中斷
就重複剛纔的過程
如果四個字節都接收完了
PAN
這個地方就PAN
是否地址都接收完了
大家注意啊
看這個地方就PAN
地址是否接收完了
如果不是其次的話
大家注意啊
如果大家R0裏內容不等於其次
不等於其次
表示地址真沒接收完
如果一PAN
這個地方F0等於1
剛纔地址接收完了
就到這個地方以後
接收量跳
讀數據
就是說該接收對方的數據
那麼到哪呢
在這兒
這是接收數據
四個地址真接完了
都存到78777675
那四個單元裏面
然後數據
那麼大家注意看啊
接收數據
把這個指針呢
設成7877
指針78裝到DPTR高把位
77裝到DPTR低把位
然後大家注意接收數據了啊
從SBOF裏的數據讀到A1裏面
在緩衝器裏面是第一個數據
然後A1存到哪裏面
A1就是你接收到數據
存到什麼
這裏面裝的什麼
就是7877裏面的內容是什麼呢
2000
換句話說
把接收到的數據送到2000存起來
這和發黃不是一對應的嗎
對吧
是不是一對應的
對吧
好
這就把你接收到數據存到指定單元裏面
然後大家注意把指針扔1
因爲你存到2000
下一個該存到哪呢
再收到的數據2001
所以把這77H指1
然後大家注意這裏面
這個地方變成要小心
77到78有沒有進位
那判當前接收數據的地址是否向高八位進位
那怎麼判呢
把77送到A裏面
判的是否爲零
如果77爲零
原來不是零變零了
說明什麼
像78H有進位
所以非零的話跳到END2
not zero
就是非零跳到這
如果是零的話
那78得掙1
你用指定給他掙1
因爲中間有進位
他爲零了
77爲零
好了
如果沒有進位
大家再往下看
76送到A裏面
76是那個高字節
就是高位地
然後呢
比較一下和78裏的內容相比
那他倆肯定像的
都是二零嘛
如果不相等跳到RETN這個地方相等的話
大家注意要比較一下是否是最後一幀信息
那就判75裏的內容和77裏的內容
你看啊
75送到A裏面
A已經是75內容和77相比
大家知道78T7裝的是數據塊的首地址
7675裝的是數據塊的末地址
就是那塊最後的地址
如果不相等
就跳到RETN
如果相等
大家注意
如果是最後一幀數據幀了
把TRUNK
這是TRUNK中段關掉
因爲剛纔是採用中段方式
把總的中段開關位CLEAR清掉
這位清零
然後大家注意
一定SETB7F
把7F這位指1表示什麼呢
剛纔那些數據
最後一個數據我都收到了
把這位指1
然後呢
跳到RETN
RETN在哪呢
實際上是中段返回
跳到這兒
大家注意
跳到這兒
然後中段返回
這樣對方發一個字節
我這頭收一個字節
採用中段方式收一個字節
那麼剛纔最後那個完了
返回應該返回到什麼地方呢
剛纔是在哪中段呢
大家看一下程序
在這兒
大家注意看啊
在這中段
他這是兜圈的
現在剛纔已經收到最後一個字節了
7F就指1
又跳向這地方
一判7F爲1
不滿足這個條件應當怎麼辦
往下執行
就從這個指程去返回
從這個指程去返回
好了
這個程序兜了這麼多圈子
我不知道大家呢
你讀一遍
看能不能讀懂
你要能把我剛纔的整個的運行次序啊
都整的非常明白
說明你對串口這方式一呢
是就可以理解了啊
理解了
好
再往下看
這個程序
我建議大家讀一讀啊
下面我們介紹串口方式二的應用編程
實際上串口方式二和方式三呢
大家注意一個問題啊
一樣的
他倆就差波特率
都是九位數據同學就一幀信息
11位和方式一差別在哪
方式一八位數據
方式二
方式三九位數據多了一個附加位啊
大家看一看
所以呢
方式二和方式三呢
他倆基本就一回事
就波特率有差別
別的都一樣
那方式二和方式一
剛纔講的方式一有什麼不同呢
大家注意方式二是接收發送11位信息
就是九個數據位
還有一個起始位
一個停止位啊
好
就是第九位數據是個成空位啊
那麼這個成空位是你用戶用軟件往裏寫的啊
是寫到哪呢
發放的TP8位這個大家一定要清楚
好
再一個
方式二的波特率變化範圍呢
要比方式一的小啊
小
好
下面大家注意看一下這個問題啊
方式二的波特率等於振盪器頻率除以n
n呢
等於當smod的次方等於0的時候
n就等於64
smod等於1的時候
n就32啊
所以方式二的波特率範圍比較窄
固定的兩種啊
取決smod的值啊
所以方式二的應用編程和方式三一樣
就是差在波特率啊
下面我們再看一下方式三
方式三的這個程序
我大概先說一下
然後同學自己課後再讀
我要把方式三方式二與方式一的差別
一定要
那裏面關鍵的幾條指令給大家指一下啊
下面呢
我們用方式三進行數據的發送和接收
發房採用查詢方式發送地址證
採用中斷查詢都行
收房呢
採用中斷查詢都行啊
那麼大家注意發房和收房均採用六兆的經證
波特率爲四千八
大家注意這個問題啊
所以這個地方呢
這個例子
如果我讓大家改進的話
你還可以改怎麼改呢
把這經證換成11.0592兆
還有要改成什麼呢
時間長數要改
你得重新算一下啊
現在很多書裏面都給出了已經算好的那些值
它是定時器作爲波特率發生器
採用方式二
好
下面看甲級發送程序
首先先看條件
提示條件啊
發房首先把存在78H和77H單元當中的地址發給收房
然後呢
再把數據00H到FH
這一共256個數啊
大家注意要先發地址
地址在哪呢
7877H單元
然後發數據數據多少個呢
256
那麼大家看一下發售程序
大概讀一下啊
ORG0000
這是服務器入口
然後跳向min
然後大家注意這是中段入口
就是中段
一旦發生窗口中段
跳向這裏
這個Ljump跳到中段服務器程序
主程序從什麼地方開始發呢
ORG1000H
大家看一下啊
讀一下
MO53H送到SP裏面
這是設置對單指針
MO20送到78H立即送
MO00送到77H
這是什麼
發坊要把在7877裏面裝的
MO2000H發送過去
以及收到這個MO2000H以後
存上表示什麼呢
他接收到的數據要從MO2000H單元開始放
多少個數據呢
256
明白吧
這個大家一定要清楚
然後大家用curl調用這些子程序
調用這些子程序在這裏
這些大家只要懂得上一個例子
這就好辦了
TMOD20把定時器
技術器
他的波特率發射器設在FUNC
設定時器技術器
作爲波特率發射器
然後大家注意看
波特率爲4800
那麼這個時候計算出的時間長數FD
大家注意是6兆警鎮
4800波特率
如果我讓你採用11.0592兆警鎮
波特率重算啊
這倆得重算
他倆當然是一樣
這是採用定時器採用方式
好
然後呢
啓動定時器
就波特率發射器啓動了
定時器啓動
大家注意看啊
MU102H送到ICON裏面
ICON就是串口的控制集成器
他是把串口設爲方式三
這是方式三接收
大家可以把這控制呢
展開一下啊
和我們前面學的內容對比一下
然後大家注意看
SiteB TB8
大家注意啊
這個地方
這個就是方式二
方式三和方式一的差別
多了一個第九位數據
我是先發地址針
先發地址針呢
第九位應當是1表示地址針
那麼第九位數據在哪呢
就在TB8裏面
我用指令把它指1
表示地址針
然後大家注意MU00H送到IE裏面
把所有終端都關掉
然後大家注意啊
我採用查詢方式
往外發地址針
那麼MU78H裏的內容送到SBUF
大家一定要注意啊
這一條指令一執行
那串口的發送就啓動了
78H裏面裝的什麼
裝的20對吧
然後呢
他TI發完沒有
沒發完TI等於零
還在這兜圈子
就在這循環等判
那當發完的話
大家注意他判TI等於零還是1
一判發完了
他等於1就往下執行
那麼就把這發送終端標誌位清零
然後再發下一個字節
這三條指令是採用查詢方式往外發
第一個地址針
然後大家注意
再把下一個地址
把77裏面裝的是00H
然後呢
送到SBUF裏面
這塊串口又啓動了
然後大家注意右判TI
發送完畢以後TI就指1
那麼就不滿足這個條件
如果TI等於零在這兜圈子
TI等於1往下執行
然後把它清零
大家注意地址針發完了啊
然後開終端
然後Clear TB8
先把TB8變成零
表示什麼呢
下面要發數據針
大家就注意這兩個地方多了一個第九位
第九位的話
在創新通訊的時候呢
有時候要用第九位來表示
我發的這前八位是地址還是數據
那麼大家看這兩條指令
就把這個問題體現的非常清楚啊
我要發數據把TB8在Clear
我要發地址的話呢
SideB TB8
所以這個就是方式三方式二與方式一差別
多了一個第九位數據
然後母00H送到A裏面
大家注意
注意這個地方啊
A再送到SBUF裏面
這時候串口就啓動了
正往外發
這是發法啊
然後那個00H就是第一個數據
我什麼時候判定這數據快發完呢
得比一下是不是最後那個數據
FH
這256個數據
最後那個FH
如果不相等
就在這兜圈
相等的話
說明256個數據發完了
就把串口中斷
允許爲清零
然後呢
只成反饋
然後你也可以採用中斷方式
你要採用中斷方式的話
大家注意啊
剛纔實際上這個地方一開中斷以後
就剩下的數據是採用中斷方式發的
大家看一下這個地方啊
看一下啊
AE
這裏這是關中斷
這個地方開中斷
然後甚至發數據是採用中斷方式
這塊是第一個數
然後第二個數
第三個數
第四個數
每發一個數引起一次中斷
每發一個數引起中斷
然後判一下是否發到最後
第256個數FH就可以了
好
那這個就多了什麼呢
大家注意地址針數據針
所以這些程序呢
給大家都提供了將來你編串口程序
假設沒有這些程序的話
你自己名字不講
其實挺費勁的啊
有這些現成程序
你可以改一改
好
這發送方
再看收方
中斷方式收啊
大家看
ORG 000跳到MIN
然後0023在中斷入口
這個組成序
大家注意開始設對站指針
53送到你
好
大家注意啊
這個地方是設置地址針接收
計數器出值
他什麼意思
接收256
它是FE
一會我們看看
把它送到R0裏面
R0一會要做間接尋址
然後調用這個指程序
這個指程序在哪呢
在下一樣
指程序在這
然後MOD裏面送上R0
設定時器爲方叉
自動裝載時間長壽
然後把裏面裝出值
定時器第一裝高把位低把位
然後呢
開定時器
然後大家注意啊
這地方開中斷了
好
然後要把窗口設成什麼呢
ICON裏面送個F0
把窗口設成方式三
REN等於1就行了
他就允許接收
然後把這個F0指1指1指1
好
那麼指1的話
大家注意看啊
這個地方編的
指1
擱指列一盤
他爲1就在這兜圈呢
去吧
這等幹嘛呢
等着接收中斷
來一個數據中斷一次
來一個數據中斷一次啊
好
這個程序和前面那個呢
大家
尤其這個回去再看一看
然後這次接收中斷
我就不想多講了
因爲你要真懂方式一那個
方式二方式三
就多了一個地址針
數據針的那個第九位啊
第九位就是TB8啊
我剩下就不講了
所以大家就可以看一看了啊
好
這裏要提一點啊
在進行
穿行通訊的時候
一般都採用
一個定時器作爲波特率發生器
但是大家以後一定要注意
我們後來學的各種各樣的改進型的單片機
還有一些DSP的裏面的波特率呢
他的專門有一個波特率的設定
就串行通訊的波特率的決定的
專門有一個波特率發生器
他就不佔用這個定時器
這一條大家一定要注意啊
因爲這個佔用資源
這個事兒爲你將來設立的時候呢
你要一定要通盤考慮
好
一般都採用對8651單片機來說
採用定時器方叉確定波特率比較理想啊
不需要反覆裝初值
所以在波特率不是特別低的情況下
一般都建議採用
採用這個方叉T1的方叉來作爲波特率發生器
好
下面我們看一下PC機和單片機的點對點
點對點穿行通訊接口設計
我們的那個大就是那實訓教材裏面黑瓶那個裏面有一道題啊
有一道題
單片機和PC機的穿行通訊
有能力的同學把它做一做啊
有能力的同學
這個在實際當中很有用
因爲我跟大家說了
我們實際現場工業現場經常遇到什麼呢
前面那些點
那些數據採集點都是一個單片機
然後和PC機進行通訊啊
PC機進行通訊
那好了
下面我們把這個問題討論一下
一般在測控系統裏面
單片機的數據存儲容量和它的數據處理能力都比較比較差啊
所以一般情況下呢
單片機都通過串口和PC機串口相連啊
把採集到數據呢
送到PC機上
然後呢
再由PC機進行數據處理
大家注意啊
單片機的輸出是TGL電瓶
那麼PC機一般都配了一個232標準接口
那麼它就是232電瓶
那麼大家都知道
PC機上配了個九幀的D型連接器啊
九幀的大家看一眼
這個九幀的D型連接器
實際上我們單片機和它通訊的時候經常用三個信號線
大家注意看啊
RXD是PC機的二角
三角的是TXD
還有一個信號D
就用這三個引腳啊
那麼PC機已經給大家提供了232標準接口啊
那我們就應當很好地去利用啊
好
那麼下面大家要注意什麼呢
關鍵是單片機和PC機相連的時候
它的接口電路是什麼樣的
接口電路
大家看這就是單片機和PC機相連的時候接口電路
大家看啊
這個是PC機
這個是單片機
它倆連的時候
實際上注意啊
PC機出來的這個
這個要經過
和232一連啊
大家注意啊
就8051單片機
加一個Maximum 232
這是T點L電瓶
這個是什麼電瓶呢
232電瓶
這個芯片把T點L電瓶轉換成232電瓶
然後PC機那個232插座
剛纔我已經說了
它就是232標準接口
這個電瓶當然是232的
對吧
所以就三根線相連
這個大家一定要注意
另外呢
D和D相連就可以了
D和D相連
這個大家要清楚啊
所以PC機這邊的232插座
我們用戶實際上就用了三根線
TXD RXD還有D
實際上大家再回過頭來看這個插座
看這個插座啊
好
我們就用了二腳三腳五腳
這是標準的啊
PC機都配這個插座
然後呢
那個九個引腳上的信號呢
大家看一下
二腳TXD三腳RXD五腳呢
是D信號D
我就用這三個引腳
那麼它的接口電路呢
大家就一定把這個圖看明白了啊
這個232呢
這邊是TDL電瓶
這邊是232電瓶
它進行了一個電瓶轉換
編軟件沒有關係
於是你採用什麼接口沒有關係啊
這個大家要了解
所以單片機和PC機的串行接口方案就是這個啊
比較簡單
好
下面一個最重要的問題就是
我們討論一下
PC機以多個單片機的串行接口設計
大家要注意這個問題啊
在實際的工業現場當中
往往是前面有很多監測點
都是單片機加傳感器
然後呢
傳感器
你比如說測溫測溼度
測完以後傳感器輸出一個電壓信號
單片機呢
擴了一片AD
可以把電壓信號變成數字量
然後通過串口傳給PC機
那麼PC機呢
根據傳達收到的數字量
可以你在編軟件在屏幕上顯示是溫度啊
壓力啊
多少每一路可能很多點啊
所以下面我們討論一下
PC機與多個單片機的串行通訊接口設計
首先大家看一下硬件接口啊
硬件接口
一臺PC機和若干個單片機
可以構成小型分佈式測控系統
大家一定要注意
構成這個測控系統
分佈式測控系統
前提是單片機有那個串口
有那個串口
所以呢
大家一定要注意
不管什麼種
哪種類型的嵌入式處理器
他所帶的串口的種類
非常非常重要啊
非常我們單片機
這個是帶UART一個
那麼現在一些高檔單片機裏面呢
iPhone7接口
SPI串口
這些都串口
還有這些他都帶
很多現在高檔單片機都帶這些接口
所以呢
大家一定要注意
這個串口是很有用的
尤其是我剛纔說那個
因爲延長物檢測
這一個大車間可能很遠
這個車間很大
那些監測點
大家知道
溫度溼度對菸絲的質量影響非常大
所以一定要控制好
控制好
首先得測
測的話
就是剛纔說的方案
前面那些點都是單片機
都是單片機
然後呢
有溫度傳感器
溼度傳感器
然後他們都和一臺PC機串口相連
把剛纔測到的數據都發給PC機
發給PC機
好
下面我們就研究這個問題啊
先看一下硬件接口怎麼連
這個就典型的分佈式測控系統
這個在許多工業控制和數據採集系統當中
應用的比較多
那麼這種分佈式測控系統有什麼好處呢
可以充分發揮單片機呢
它的功能牆抗干擾性比較好
面向控制的特點
下面我們就研究這個接口啊
先看一下粗略方程
實際上PC機一般這都帶了232口
然後大家注意
這些單片機一二三四
這都前面一塊一塊
小的數據採集單元
點上還有傳感器
AD轉感器
那麼他們通過串口那兩根線呢
分別和PC機相連
那麼具體電路是什麼樣的啊
這是示意圖啊
一臺PC機和多臺單片機呢
構成的小型分佈式測控系統
下面看具體電路啊
那麼大家注意這個PC機和單片機
這個接口電路先看一下
在這看一眼啊
PC機和單片機的接口電路
大家注意剛纔已經講了
16N通訊
我們可以採用485接口
對吧
485接口串運接口
但PC機本身是一般帶一個22接口
那怎麼辦呢
你要是485接口買個卡
485卡插到擴充槽裏面就可以了
然後大家看485接口就兩根線除了
這些是一個一個一個單片機
多少個呢
N個
我可以採用485進行半雙工的串運工具
我單片機把採到的
比如說剛纔說的溫度溼度
那些數字量的傳給通過這兩根線
485接口的兩根線傳給PC機
剩下的問題
大家注意這個地方編程可以用C
也可以用匯編
彙編語言就是我們剛纔看到的那些串運工具
這個地方編程用什麼
大家清楚嗎
這個地方編程一般都採用
採用VB
VC或者是C
那麼對於我們車工專業來說呢
我們搞這個虛擬儀器的啊
這個界面實際上用虛擬儀器軟件編很容易
就是Label Windows UI
你也可以用VB來編
也可以用VC來編啊
這是軟件啊
但是大家一定要注意485接口
他那種擴展連接的這個一個一個層級最多不超過多少
剛纔已經不超過32
32
所以你要做這個系統
你能不能完成這個系統
我想現在你的知識基本就夠了
兩個內容
單片機這邊有個傳感器
比如說要測溫測溼度
有個溫度傳感器
有溼度傳感器
然後輸出呢
連到AD上
AD轉換完的數字量呢
就單片機控制AD轉換完數字量
輸到單片機裏面
我PC機要顯示這32點的溫度溼度怎麼辦
我PC機這邊還得編軟件
這軟件你能編嗎
當然這個軟件如果用我剛纔說的
Label Windows UI和Label View
這都是NI公司的虛擬儀器軟件
那麼編起來呢
很容易
非常好看美觀
所以呢
大家想想
你要做一個剛纔的分佈式測控系統
一個PC機與最多32個單片機系統進行數據傳輸
那麼兩邊的軟件你都得會編
我們現在單片機這邊的
雙煙通訊軟件講了
那PC機這邊呢
你能不能對它進行徐回檢測
把各路的
你各個檢測點的那地方溫度溼度
影響煙潮的質量
對吧
都應當編出來
好
這是軟件部分啊
這個現在資料特別多啊
我們同學呢
可以到
就是工大那書店啊
專門過去有一本書
專門講串煙通訊
什麼通訊呢
有單片機之間通訊的
有單片機和PC機之間通訊
所以大家將來進行這些設計的時候呢
要注意查找資料啊
注意查找資料
好
那麼在看什麼呢
在實際設計當中還要注意一個問題啊
在這種系統呢
PC機肯定要作爲主機
現在我問你這個問題
PC機怎麼和前沿的那些一個一個單片機進行通訊啊
這個就是你來編
然後呢
PC機把各個單片機串煙
傳輸過來的那些溫度溼度數據
要進行處理顯示打印啊
另外呢
PC機還得發一些控制命令
給那些前沿的單片機
所以呢
這裏最最關鍵的第一
首先要解決串煙通訊問題
第二要解決單片機和PC機的軟件編程問題
所以呢
這個系統是一個最經典的
常見的分佈式控制系統
所以希望我們同學呢
以後我們後面還有一門課叫虛擬儀器設計吧
那麼裏面重點講什麼呢
Labelwindows UI
LabelView
就這些虛擬儀器軟件
因爲怎麼設計一個軟面板
剩下問題真給你這個任務
看你怎麼完成
好
今天我們課就講這麼多
