【哈爾濱工業大學】《單片機原理》(建議收藏) P31 - 31. 11.2-AT89S51單片機與DA、AD轉換器的接口(2)

长安书院_
146 位粉絲
2026年10月20日
AI 生成·可能包含錯誤
上一次講了單片機與DA70832的接口
然後呢
講了一個實際接口例子
然後程序又介紹給大家了
大家尤其要注意的怎麼控制那雙道門
雙道門就是雙道鎖存
下面呢
我們介紹51單片機和12位DA轉換器
它的接口設計
八位分辨率不夠的時候
比如說我們用0832
但往往這分辨率是不夠的
那怎麼辦呢
你就要採用高於八位分辨率的DA
有十位的
十二位的
十四位
十六位的
十二位的就是我們下面要介紹的AD667
十六位的呢
最典型的是AD669
大家注意一個問題啊
我現在介紹這些芯片
典型電路芯片
接口電路芯片
大部分都是AD公司的
AD公司呢
實際上是美國一個生產器件
是世界知名的這些半導體器件的生產公司
就是它的一個公司
那麼它的器件很有名啊
很有名
這裏大家不要侷限於我們教科書上的AD
選用AD公司的
就是AD DAC芯片都選AD公司
你可以選別其他公司的啊
其他公司
根據需要來選啊
好
我們介紹這十二位DA芯片呢
它是一個分辨率爲十二的並行輸入
電壓輸出型的
電壓輸出
建立時間呢
小於三位秒啊
它是雙緩衝輸入
我現在解釋
再來解釋雙緩衝
大家都清楚了吧
兩道門啊
電壓輸出啊
用硬件編程就是改變外邊外面的電路接法
可以呢
正5V輸出
正10V輸出
正負2.5V輸出
正負5V和正負10V輸出啊
裏邊還還有一個高穩定的基準電壓源
這個大家就不用自己外接基準電壓啊
所以它非常方便的可以和四位八位
16位各種微處理器和單片機接口啊
這引腳呢
大家先大概看一下
這引腳呢
一共是28個
我們後面要結合它的具體接口電路
結合它的轉換過程
再詳細介紹它啊
大家先看一下
內部結構這裏大家注意這個問題啊
由於它是12位DA轉換器
單片機和它進行相連的時候
相接口的時候要注意什麼呢
因爲單片機的數據總線是八位
你這八位呢
你一下輸出不了12位
那怎麼辦呢
它這12位DA轉換器做的非常靈活
大家看啊
這是一個四位鎖存器
四位鎖存器
你單片機不要送
不就送給它數字量
讓它輸出電壓和電流嗎
對吧
乘比例的電壓和電流
那怎麼來控制它的數據寫入呢
你看這四個數據線
這四個這四個數據線
大家注意啊
每一個四位鎖存器都有個控制端
大家注意看
A2和CS有效是這四位
A1和CS有效的選的是這四位
A10是這四位
那麼這一共12位鎖存器
單片機把12位數據就給它
數字量給它
然後大家注意
單片機給的數字量鎖存完以後呢
下面還一道DA鎖存器
這是第二道門
那麼當這三個四位鎖存器裏面把單片機送來12位數據都鎖存完了以後
再加這個控制信號
一堆把這12位呢
送到它這個12位DA鎖存器
然後呢
大家注意鎖到這裏以後
它直接就可以加到12位高
全電子網絡上進行轉換
然後呢
大家注意這輸出的是電壓
這裏面經過IV轉換以後呢
輸出的是電壓
也就是說DA轉換器把單片機送來的12位數據量
進行DA轉換
變成電壓輸出
電壓輸出
那麼大家看
這裏面電壓輸出呢
有幾種方式啊
大家看一看有20伏的10伏的
大家注意這個地方啊
這個控制引腳呢
是單片機來對它進行控制
怎麼來進行控制它
你分三次
先把這三四一十二位數據量鎖到第一道門裏
我們把它看作第一道
然後呢
都鎖完以後
你在控制讓這個信號有效呢
一起加到12位DA轉換器鎖到裏面
然後經過它的輸出
直接加到全電子網絡
然後就得到電壓輸出
關鍵在這個控制電路
然後這些都連到單片機的數據線
數據線
好
這就是AD67內部的功能結構礦頭
尤其這幾個鎖存器要引起大家注意
要引起大家注意
好
下面我們看一下基本應用特性啊
它模擬電壓輸出的範圍
可以通過片外引腳的不同連接來得到不同的輸出電壓
單機性的是0-5伏
它輸出0-5伏
輸出0-10伏
雙機性輸出呢
是正負2.5
正負5.5
正負10
所以大家將來設計DA轉換電路的時候呢
這就是一個非常好的設計方案
關鍵看你如果要電壓輸出是單機性的還雙機性的
主要改變外邊的電路連接就可以解法啊
那麼這些良辰輸出
不同良辰輸出
實際上有AD667的1239腳的不同連接來實現啊
這個我們書裏面已經給出表了
大家將來一定要根據應用的要求
應用設計要求來
確定自己的硬件電路連接啊
裏面還有一些其他特性
大家注意它相比其他軟件的
它有熱跟蹤功能
所以它的增移和偏移偏置飄移呢
非常小啊
非常小
另外大家還要注意
這AD667的AD是指AD公司啊
AD公司
世界著名的半導體芯片
集成電路芯片的生產公司啊
好
你怎麼來接連接外部的1239腳呢
你就這個地方都給你介紹了啊
然後呢
這就是輸出電壓的範圍
輸出電壓範圍啊
大家照着接就行了
單極性電壓輸出實際上就給出了電路啊
電路
那麼大家注意看啊
這兩個音角這輸出零到十伏的
也就是單片機送給他12位數字量
從全零到全一
全一的時候呢
就輸出十伏減去一個LSB
這個大家一定要清楚啊
一個LSB
那還要注意這個問題啊
這個地方是模擬地
這個大家概念一定要清楚
他這裏面這個地方實際上是模擬電路啊
IV轉換是模擬電路
實際上這裏還有數字地
大家注意一個單片機系統設計的時候
一定要注意模擬地和模擬地連在一起
數字地和數字數字地連在一起
最後一條線把這兩個地連起來
這是設計這種系統的最基本的原理啊
這是零到十伏單機性輸出
如果有的同學將來設計的時候呢
遇到我需要輸出零到十伏
電路的話
你可以採用這個啊
運行前呢
你這電路連好以後要調零
什麼叫調零呢
你先給他加全零
12位全零
這時候這個模擬電壓輸出端因爲零伏
另外呢
你還可以進行增益
還要進行增益調節
你給他輸入12位全優
然後呢
他的模擬電壓輸出呢
是9.9976伏
這個是多少呢
滿兩層輸出十伏減去一個LSB是9.9976啊
那麼這個靠那裏面的是100歐電位器
就W2
就那個電路的W2來調節啊
所以DA在使用前呢
要進行電路調令和增益調節
這個大家要注意
然後呢
雙極性電壓輸出
將來有同學可能我做一個DA轉換器
單片機控制DA轉換器
有時候輸出的電壓要雙極性的
比如說我們下面給的電路呢
是負伏到正伏的雙極性電壓輸出電路啊
那麼大家看一眼
這個外接電路是這樣
這個是外接電路這樣
那麼這個
這個地方輸出負伏到正伏
負伏正伏
這裏注意啊
剛纔已經又一次提到這模擬地
這個是電源地
真正在實際連接的時候
DA轉換器這個接地和AD轉換器接地很有講究
對於這個DA轉換器接地呢
模擬地一定要和電源地就近把它連好
就近把它連好
好
大家看一看啊
這雙極性輸出在使用前要調節什麼呢
大家看一眼
第一要偏置調節
就是說數量全領的時候
你調那個電路里面的100歐電位器
讓這模擬電壓輸出爲負的5.000伏
然後爭議調節呢
你給它輸入爲全優
這時候調那個電路里面的W2電位器
這時候輸出電壓值呢
因爲最大值是正伏嘛
它應當這個最大值輸入全優的時候
它的輸出應當是4.9976伏
就是最大電壓輸出減去一個LSB
好
要把這些調完以後
這時候DA電路呢
你就可以用了
單片機就往這個DA轉換器呢
給它送數字量
另外呢
大家注意這個AD667好在什麼地方
它片內有基準電壓
基準電壓
我們大家都清楚
在輸入電路前面講
DA轉換器的時候都介紹過基準電壓
對基準電壓要求大家也聽過
現在對我們設計者來說
關鍵是你來做的基準電壓
還是電路片內就有
注意片內就有這個基準電壓源
好
這裏面呢
還有接地和動態電容的接法
這個大家要注意
它片內實際上是把模擬地ATND和電源地呢
分開
分開片內
實際是分開的
目的是爲了什麼呢
減少呢
不必要的信號路徑
就那個路徑當中的一些電流
那好了
大家注意使用DA轉換器的時候
一個電路連接細節
大家不要忘記
就是
電源引腳和模擬地
電源引腳和模擬地這個引腳器之間呢
一定要加確有電容
這個是需要大家注意的
那麼大家注意什麼呢
就是剛纔我說到AD667這個DA轉換器
片內呢
有三個四位的
輸入數據鎖存器
我們把它叫第一道鎖存器
或者叫第一級鎖存器
單片機呢
把這12位數據
大家想想一次送不了
得分兩次往裏送
第二道門是一個12位的DA7鎖存器
也叫第二級鎖存器
爲什麼要採用兩道鎖存器
大家想一想
就是爲了在DA轉換過程當中
由於單片機不能一次輸出12位
只能一次八位一次四位往外輸
那麼在輸的過程當中
沒有第二道這個12位的鎖存器
那麼大家注意輸出端呢
就會模擬輸出電壓
在送數據的過程當中
它直接ADA轉換了
它的輸出的電壓量就會在變化
就會出現毛刺
那麼採用這兩級鎖存器以後
你第一次把三個四位的鎖存器裏面的數據量全送進去以後
這三個四位數據鎖存器裏面都存有
這一共存有這12位數據
然後把它一起送到12位的DAC鎖存器裏面
一通往外輸出
這樣就不會出現剛纔說的那個毛刺現象
毛刺現象
好
那麼四個鎖存器控制
我們大家剛纔看內部電路圖了
實際上由A0到A3
這不是四個鎖存器嗎
A0 A1 A2是控制那三個四位鎖存器的鎖存信號
那麼片選端和A0 A1 A2分別控制那三個四位鎖存器
往裏鎖存數據
片選端和A3共同控制
就他倆控制第二級鎖存器
讓這12位一起往外出
好
下面大家看一下這個表
這個表說明什麼問題呢
就是說
當你片選端有效的時候
片選端有效
他和A0結合在一起
選選通第一四位的那個數據鎖存器
當片選端有效的時候
他和A1共同選通中四位
那麼片選端爲零的時候
他和A1 A2共同選通高四位的
這是第一道鎖存器
12位三個四位
第二道門
大家注意片選端有效的時候
A3是來選把那個12位數據呢
直接一堆那個鎖存器選通啊
把他送到DA直接轉換啊
大家
看一下這接口點錄
這個是
51單片機
這個是AD667
大家注意看啊
AD667
他是12位的數字量輸入
單片機呢
他是八位的數字量輸出輸入
那麼單片機和他相連的時候
大家注意先看怎麼連呢
P0口的第八位先連到DB0到DB7
然後呢
P0大家再看
P0口的第四位呢
同時連到這樣啊
DB8
DB9
DB10
DB11
也就是說
12位數字量
單片機要分兩次送給AD667
那麼大家注意這是一個鎖存器啊
這是一個鎖存器
單片機P0口呢
發出的D8爲D9呢
先發到鎖存器裏鎖存
然後P0口再做數據口
好了
最關鍵的問題
大家注意看片選端的控制
片選端的控制
那麼單片機是靠WR和P27
這兩個引腳
這是個過門來
他倆都爲零的時候
就把這片選端選中了
然後呢
還要注意什麼呢
大家看A10 A11
就是片內的
不有三個四位鎖存器嗎
第一道門
那麼其中的兩個控制信號
你看他用A0
這個信號就是地址的最低那位
共同把它連好了
什麼意思呢
當單片機片選端有效的時候
這倆引腳有效的時候
單片機P0口輸出的要DAE轉換的
低把位數據鎖到中和低
那兩個四位鎖存器裏面
然後大家看啊
這是高四位的鎖存器的控制信號
當片選端有效的話呢
你就把最高的四位
就是通過這四位數據呢
通過P0口送給他
送給他
然後呢
大家注意看A2和這裏面的AD667的A13相連
這個是單片機的地址線和A13相連
並且片選端有效
就把三個四位的鎖存器的輸出
也就是單片機送給DAE轉換器要轉換的數字量
從第二道門鎖到第二道門裏面
第二道門是直接連到後面的什麼呢
是全電子網絡
就是DAE轉換網絡
這樣的話呢
你這個地方就會輸出一個電壓量
輸出一個電壓量
這個接口電路大家看很簡單
所以呢
如果讓你單片機將來擴一個12位DAE轉換器的話
這個就是一個比較好的方案選擇
大家一定要清楚比較好的方案選擇
那麼剩下的問題
接口電路清楚以後
我們看軟件怎麼來編
實際上單片機控制的DAE轉換器就是給它送什麼呢
送數
但是大家注意
它這個送數分兩次送
一次送低把位
再一次送高四位
最後呢
再把第二道門
再把這個信號有效
然後呢
讓12位單片機送給DAE轉換器的數字量
從那三個四位的鎖存器裏面
一起加到DAE轉換的那個網絡上
然後呢
就得到相應的電壓輸出
剩下的問題
我們就來看這個程序怎麼編
大家看啊
單片機把AD667所佔的三個端口地址都看作什麼呢
外部RAM單元的三個單元
看作外部RAM的三個單元
大家知道單片機裏面IO端口的編制呢
和RAM單元的是統一編制的
那剩下問題就簡單了
你就往那端口送數
但是一定要注意它的次序啊
第一次送低把位
第二次送高四位
爲什麼不能一次送呢
因爲單片機P0口就是把位
這是一個12位的
然後呢
第三次把三個四位鎖存器裏的數
通通送到12位鎖存器裏面
直接就DAE轉換就輸出電壓
下面大家看它的要求
假定我要轉換的
送給DAE的低把位數據
在單片機片內的R0單元
高四位數據存到R1單元的D4位
然後呢
這個程序怎麼來編
大家看
20H單元裏的數據送到A
這是把要進行DAE轉換的
低把位數據送到AD667
大家看啊
7FFE就是這個AD667的端口地址
大家注意
爲什麼是7FFE
一會兒我們分析
然後DPTR裏面送上7FFE
最關鍵這條指令
大家看啊
A裏的內容是R0裏面的內容
就是你要進行DAE轉換的
低把位數據
然後把它送到7FFE這個單元去
這個單元實際上就是端口地址
誰的端口地址呢
大家看一看
爲什麼是7FFE
它實際上就是
把要轉換的12位數據裏面的低把位
送到第一級鎖存器裏面的中低四位
7FFE是什麼
大家看這個地址
7FFE是A15
70111
FFFFIE
大家注意這個就是A0
這個就是A0
大家看爲什麼是送到第一級鎖存器裏
看啊
執行MOVX
就剛纔MOVX那條指令的時候
WR是不是有效
寫信號有效吧
WR信號有效
好再往下看
那麼P2.7
大家注意看
P2.7就是A15
它是不是有效
這倆引腳信號都有效
偏引端是不是有效
偏引端有效
那麼大家還要注意
看它發出的最低位的位地址是什麼
是A0這個地方
我把這個地方
A0這個地方是0
大家看0
0的話
它直接連到這個芯片的中四位和低四位的鎖存器
然後大家注意
就把這兩個端都選通了
選通了什麼意思
選中了中四位
低四位的鎖存器
就是把這個鎖存器選通了
這兩個鎖存器
中
這個和這個
P0口輸出的把位數據是低把位
一下就加到這倆鎖存器裏
單片機要給他12位轉換的DA數據
那麼這把位送到這裏
那麼哪個信號有效呢
A0
A1
然後呢
大家還注意偏引端的方牌
WR飛和P2.7那個定調是有效的
所以大家看一下這個電路
結合這個電路看一眼啊
大家看啊
P2.7和WRE執行MOVX指定的時候有效
偏引端這一端有效
A1 A0呢
你發出這個7FE
那個A0最低位爲0
0的話就選中了中低四位的兩個四位
中四位低四位的這個鎖
把這個要DA轉換的數據送到這裏面鎖
存上
好
我要轉換的低把位數據送出去了
那麼最關鍵是執行這條指令
大家看一看執行了這條指令
WRP2.7有效
P2.7是這裏這個7啊
對應的P2.7
E呢
最低位A0
A0有效
A0有效是這個有效啊
是華麗手動器
就是這個A0
大家注意啊
眼睛盯着
看A0有效
直接加到這兩個中四位低四位的手動器上
再往下看這個程序
然後高四位存到21A內部RAM
單片機內部RAM21H的第四位裏面
那麼21H的內容是第四位
送到高四位送到A加7裏面
然後大家注意看啊
再把這個地址
大家注意7FFD送到DPTR裏面
7FFD送到DPTR
然後大家A加7的內容送到DPTR
實際上就寫到7FFD端口
那7FFD是什麼意思
D實際上把這個啊
7FFD就是0111
1111
對吧
那這位爲0的話
對應電路里面的哪一個位呢
對應這個位
那個0正好是這位
正好選中了什麼
A2
AD667
A2的音角
這時候大家注意
高四位
也送到AD667
怎麼送的呢
是通過這個
這四位
然後呢
通過它進去
進到裏面高四位的那種鎖存器
這樣第一道鎖存器裏面的12位要轉換的數據都送到裏面
剩下的再執行下一條指令
大家看啊
下一條指令在這
大家看啊
就這條指令
那高四位已經送到裏面
然後再把7FFD
送到DPTR
這裏面裝的是7FFD
A裏的內容就送到DPTR
但是大家注意
這條指令與A的內容沒有關係
實際上是利用這條指令發出一個什麼信號呢
大家注意這條指令一執行
這個地址是多少
7FFB
7FFB是多少呢
1011
就是最低的四位
那實際上是這個信號有效
1011正好是最低四位是它有效
這時候就加到A13這端
然後呢
剛纔那條MOV X指令
它倆又有效
又加到偏前端上
那麼這時候
第二道鎖存器打開了
實際上就是把那四位鎖存器
三個12位數據一起寫到第二道鎖存器裏
然後就疊以轉換
直接轉換了
所以呢
大家注意
第三次呢
執行這條指令
與A裏面的內容沒有關係
大家看一看啊
執行這條指令
我們前面講第一期0832的時候
有的同學也發現了有這麼一條指令
打開第二道門第二道鎖存器
說這A裏面往外送的什麼
實際上A裏的內容沒有關係
要的是什麼
控制信號
要的什麼控制信號呢
P2.7就是剛纔那兩位控制信號
讓它有效
所以大家注意
當寫着啓動第二道鎖存的時候
把三個四位鎖存器鎖到第二道第二級鎖存器的時候
執行這條指令
A裏的內容無關緊要
沒有用
但是呢
執行這條指令的時候
發出的控制信號是有用的
這樣的話呢
第二道門第二道鎖存器
我們展示一下這個門吧
打開了就進行疊以轉換
這樣的話
大家注意由於是單片機是八位的
它擴展一個12位的DA轉換器
單片機一次不能送出12位DA轉換器
只能分兩次
當兩次都送完時候
再把第二道鎖存器打開
一堆轉換
否則就容易出現剛纔我說的那毛刺現象
就電瓶發生了變化
沒等12位一起轉換的時候呢
輸出電瓶就發生變化
這個在實際應用當中是不允許的
這個軟件一定要和那接口電路一一對應
對吧
一一對應
下面大家注意看啊
當我雙極性輸出的時候
大家注意是12位數據
那麼12位數據
當你送的是000的時候
是大家是是負的啊
你比如說正負2.5
這個地方輸出負2.5
這12位數據正好是中間那個數值的時候
那麼是800輸出的電壓爲0
DA轉換器輸出電壓爲0
那麼當你給全FF的時候
就全搖最大的數的時候呢
你輸出的是這個正的最大值
這個是負的裏面的絕對值最大
這是雙極性的輸出輸入的關係
這個大家也要清楚啊
也要清楚啊
這個接口電路比較簡單
比較好設計
控制起來呢
也特別清晰啊
所以呢
這個是一種比較好的單片機並行擴展12位DA的一個典型的接口電路
大家知道在實際應用當中
一般擴12位用的是比較多的
如果它分辨率再不夠
這個AD轉換器就換成14位或者是16位
那麼大家想一想
14位和16位
與51單片機的接口道理都是一樣
編軟件呢
大家注意就注意這個數據是怎麼送給第一道鎖程器
所以這一類的DA轉換器
它都有兩道鎖程器啊
或者叫兩筆鎖程器
目的就是爲了保證最後最終的數據一起送到全電子網絡
通過它輸出啊
一起輸出
避免那個毛刺
這是AD667和
單片機的接口
下面我們看到
51單片機和串行的12位DA轉換器的接口
這個典型的芯片呢
是AD7543
這個也是AD公司的芯片
那麼大家知道
單片機與串行的
它的接口設計是採用串行口
串行口一個最大特點就是連線簡單
連線少簡單
那首先我們先看看AD7543的基本特性
7543是美國AD公司呢
專門爲異步串口設計的12位的
注意這個地方啊
異步串口設計的12位的
廉價的DA轉換器
那麼大家想想
它可以和51單片機的異步串口呢
直接相連啊
直接相連
那麼大家看一下它片內的結構
片內結構
大家把這片的結構看明白就可以了
這個是單片機呢
串口輸出的數據
然後呢
送到這12位的移位計算器裏
然後都送完以後
大家注意這12位數據呢
直接數字量加到DA計算器B
這個是A
A加到B
然後大家注意
12位數字量加到B以後
B就直接輸出12位數字量
然後就給這個DA轉換的那個電路
最後呢
它就輸出
大家注意兩路輸出
一腳和二腳呢
就有兩路輸出啊
輸出
當然它倆的核呢
是一個常數
那麼最關鍵的是什麼呢
這個地方是和DA轉換器相連
和那個串口相連
DA轉換器
它是分了兩個寄存器
寄存器A和寄存器B
那麼這樣的話呢
你就需要單片機的串口和它相連
分兩次輸出數據
一次八位
一次四位就可以了
都輸完以後
大家注意12位數據都到A裏面以後
寄存器A
然後才能加到寄存器B
才能加到寄存器B
最後加到這個轉換網絡
然後輸出
這個AD7543和單片機相連的話呢
最大優點是接口非常簡單
大家知道串口相連
兩根線就可以
然後這裏面這些都是控制信號
這些控制
那麼這個呢
是數字D
這個是模擬D
大家注意DA轉換器
AD轉換器實際上它是一個模擬和數字電路的混合體
對吧
所以它的D有兩個
這個D的接法呢
對於我們單片機操控系統來說呢
這個D的接法也非常非常重要
也非常非常重要
這是AD7543
串口的AD7543的片內結構
這是它的引腳圖
這個給大家的引腳圖呢
就是爲了將來設計的時候呢
這又是一種單片機擴展DA的方案
所以這個引腳圖呢
供將來大家設計參考
下面大家看這個接口電路
接口電路
這也是51單片機
AD7543在這兒
那單片機怎麼樣把這12位要轉換的數字量變成模擬量呢
單片機必須把它送給AD7543
那麼RXD
大家注意啊
RXD送給通過這個腳寫到那裏
寫到AD7543裏面的那個寄存器A裏面
那麼誰來控制這個數據串的往外輸出呢
是靠一個時鐘
時鐘是由單片機串口的TXD
大家注意一猜你就會想到
單片機的串口是工作在方式零
工作在方式零
這個是時鐘轉
這個是數據轉
這個輸出的是同步移位時鐘
好
那麼這個是輕零轉
那麼大家看這個接口電路連接起來非常簡單
和前面講的並行連接並行擴展的那個方案比呢
你看連線簡單得多
但是這些數據呢是串的往外送的
串的往外送的啊
然後後面呢
大家注意它實際上這是電流輸出
然後經過IV轉換
最後呢
就得到輸出電壓
那麼這個輸出電壓呢
就跟你單片機送到
這個電源轉換器裏那個寄存器A和B那個數字量呢
成正比啊
這個輸出電壓絕對值的大小
那麼大家注意看一下啊
剛纔那個電路內部結構
你自己分析一下
這四個引腳都已經接地了啊
四個引腳
要把這個這個引腳接地
和前面那個內部框圖呢
把它聯繫在一起
大家看一下前面內部框圖啊
大家要和左側的這些控制
引腳呢
緊密結合在一起啊
緊密結合在一起
好
那麼剛纔SII這個腳呢
這就是串行的數字量輸入
由單片機串行口方式零輸出12位數據
剩下的問題呢
我們看一下
軟件怎麼來編啊
我們設計這個單片機擴展一個串行接口的DAC芯片
那麼關鍵是一部分電路設計
一部分是軟件設計
軟件設計這裏大家要清楚啊
首先就AD7543
你給他的12位數據啊
應當是由高到低
往裏串行數據的
高位在前12位數
高位在前
但是呢
大家注意
你們還記得咱們前面講過的單片機串口方式零吧
他輸出的數據是由低到高
串行口先輸出低位再輸出高位
所以單片機串口方式零
往外送這12位數據的時候
必須重新顛倒一下次序
我們把它叫做重新裝配啊
重新裝配
把低位和高位顛倒一下
這樣呢
才符合AD7543的12位數據是由高到低的
這個規律的
而串口方式零輸出由低到高
所以一定要有一段程序呢
把它進行重新裝配
重新裝配的原理是什麼呢
把高位導成低位
低位導成高位
讓它次序顛倒過來
好
那麼大家注意
下面我們就開始介紹這個串口的驅動程序
這裏假設啊
7543的端口地址是ADDRH
這是一種抽象的先發
那麼
他的端口地址啊
數據緩衝器單元的地址呢
爲
DBUF-H和DBUF-L
就是高四位和低把位
這個數據緩衝器單元地址在哪呢
在單面積片內的RAM裏
你要進行定義轉換的時候
那12位數據
你要分兩次給他
一個數據裝高四位
一個單元裝高四位
一個單元裝低把位
然後呢
把這兩個RAM單元裏的12位數據分兩次送給AD7543
AD7543的端口地址
大家注意
他是一個叫ADDRH
大家把這些前提明確以後呢
下面看程序怎麼來編
這個是AD7543
我們剛纔介紹過的原理圖
就內部框圖
大家看一看啊
MU-A裏面送上DBUF-H
就是高把位數據
存高把位數據的RAM單元裏面的高四位數據
送到A累加器裏面
送到A累加器以後呢
大家注意調用了一個子程序
這個子程序幹嘛呢
重新裝配
因爲這個單偏極力存的數據和
AD7543要轉換的數據呢
它的位的次序不對
它是先低後高
它是先高後低
那麼這塊呢
就重新顛倒一下位的次序
這個是裝配子程序
調用一下
把那位顛倒過來
由高變低
由低變高
然後大家注意看這個地方啊
高四位數據一執行這條指令
這是串引口方式零
我們大家想一想
前面講過的串引口方式零
一執行網發送緩衝器裏寫數的話
串引口方式零就啓動了
啓動了
從網上輸出
那麼這時候大家注意送出去的是高四位數據
已經經過裝配
把那次序顛倒完了
符合AD7543的那個數據位的高低規律
下面再看這個
這個是取低八位數據
把它送到A裏面
然後再把次序顛倒一下
就是調用一下
裝配子程序
然後大家再看這條指令
某A累加器網串口發送緩衝器裏一送出
又啓動了低八位的數據輸出
所以這12位要轉換的數據呢
通過這串口呢
兩次輸出
然後大家注意看
這個是端口地址
端口地址
這個是AD753的端口地址
我們先看把指令看完
把這個端口地址送到DPTR
大家注意
XA裏的內容
實際上A裏的內容並沒起作用
一執行X指令的時候
他就把這裏面的12位數據
把這門打開
就是加載到這個DA寄存器B裏
這裏面已經存有剛纔分兩次送出去的12位數據
然後加載到這裏面
加載到這裏面以後
他的輸出直接就經過DA轉換
那個網絡
叫全聯通網絡
然後就輸出了
輸出在這
所以大家注意
這條指令
大家要正確理解
非常關鍵
他一執行往外送出
A里加器網一個端口地址送出
實際上並沒有把A里加器裏的數送出去起什麼作用
而是要執行這條指令所產生的控制信號
好
大家再看一下這個電路
大家注意
他執行的時候實際上讓他有效
讓他有效
就把寄存器A裏的數據寫到寄存器B裏面
然後大家看啊
裏面內部截圖圖
在這
關鍵是把這裏面已經送進來的12位數據送到B裏面
送到B裏面
這個12位數據就加到DA轉換器上面
進行DA轉換
然後輸出電流
後邊還有一個運放
進行IV轉換
就形成了電壓輸出
對吧
那他和誰稱震比
和這裏面加的12位數字量稱震比
好
那麼這裏又給大家一個方案
單片機怎麼利用本身的E部串口擴展一個12位DA轉換器
那麼這種擴展方法
最大優點是接口電路簡單
就兩條線
一個是往裏送數據
一個是一個移位脈衝
是利用單片機串口的方式連
那麼這個方案也是一個實用方案
所以給大家這兩種方案的目的
就是說單片機怎麼擴展大於八位的
511單片機就是八位的
怎麼擴展大於八位的DA轉換器
另外有並行的有串行的
這種串行擴展是用UART
就是E部串口的方式連
大家還要注意
現在的DA轉換器串行輸入的
還有一種是單片機利用自己的SPI口
就同步串口來擴展
高於八位的DA轉換器
這個大家要注意
這種方案現在用的特別多
但是單片機
511基本的511內核的單片機沒有SPI口
你可以用軟件驅動IO引腳
來模擬同步串口來持續
但是這些內容呢
是我們下一章要講的
這兩種方案講完了
大家注意
一定要把它的基本硬件電路
和軟件解密結合起來
這裏最後一點呢
就是要說一下這個裝配程序
這個裝配程序實際上
我們後邊這個例子呢
就單片機通過串口往外送數據的時候呢
方式連的特點是什麼
低位在前高位在後
但是這個DA轉換器
AD公司這個串行接口的轉換器呢
是高位在前低位在後
所以呢
要進行裝配
換句話說
要把高位低位顛倒一下那個次序
那麼這個程序呢
我就不講了
這個就是已經調試成功的一個裝配製程序
就把那個位呢
顛倒一下就可以了
否則你的DA輸出就不對了
DA輸出就不會了
講到這兒呢
DA轉換器全部講完了
我們DA轉換器這部分
八位的講的是單片機怎麼擴
然後呢
在實際當中
12位用的比較多
我們也給出了兩種方案
我們選的這個器件呢
都AD公司器件
一個是12位的並行的擴展
就單片機12位
AD與12位並行AD轉換器的接口
還有一個呢
單片機通過異步串口方式連擴展串行接口的DA轉換器
這兩種DA轉換器呢
在實際當中的用的比較多
所以這兩個例子呢
也是給大家將來留作單片機擴展DA的一個參考案例
好
我們休息一會兒
