標題: 用單片機驅動ADC0808時仿真不出來,求大神幫忙解答!感激不盡 [打印本頁]
作者: 奔跑別聽 時間: 2018-3-20 15:15
標題: 用單片機驅動ADC0808時仿真不出來,求大神幫忙解答!感激不盡
問題描述:用proteus仿真時,不管兩個變阻器怎么調節,始終是兩個紅燈亮。求大神幫忙解答。
硬件描述:我用的是AT89C51,ADC0808,四個LED燈,兩個滑動變阻器代替模擬兩個傳感器。ADC0808接口:IN0接滑動變阻器RVI,IN1接滑動變阻器RV2,ADDA、B、C分別接P2.0、P2.1、P2.2,ALE和START接P0.6,CLOCK接單片機ALE經過四分頻,EOC接P0.2,OE接P0.0,OUT1~OUT8接P3端口。P1.0和P1.2接紅燈,P1.1和P1.3接綠燈。硬件圖如下:
問題2.png (58.65 KB, 下載次數: 46)
下載附件
2018-3-20 14:40 上傳
問題1_20180320143907.png (74.38 KB, 下載次數: 48)
下載附件
2018-3-20 14:40 上傳
實現的功能:不停地將兩個滑動變阻器RV1和RV2的模擬電壓信號通過ADC0808轉換成數字信號輸出到單片機P3端口,當RV1的輸出電壓超過2.5V時,P1.0紅燈亮,否則P1.1綠燈亮;當RV2的輸出電壓超過2.5V時,P1.2紅燈亮,否則P1.3綠燈亮。
匯編程序:
ORG 0000H //開始
CHONG: CLR P0.0 //OE置0
MOV P2,#0 //選擇IN0端口
CLR P0.6 //啟動A/D轉換
SETB P0.6
CLR P0.6
JNB P0.2,$ //等待轉換結束
SETB P0.0 //轉換結束則將OE置1,允許輸出
MOV A,P3 //將ADC0808的輸出放到A
SUBB A,#80H //將其減去2.5V
ANL A,#80H //判斷余數是正數還是負數
JNZ YWZC //若為負數則模擬電壓小于2.5V,轉變阻器1正常顯示程序;否則順序執行變阻器1不正常顯示程序
CLR P1.0 //紅燈1亮
SETB P1.1 //綠燈1滅
SJMP COCGQ //轉RV2判斷
YWZC: CLR P1.1 //紅燈1滅
SETB P1.0 //綠燈1亮
COCGQ: CLR P0.0 //OE置0,以下程序判斷RV2
MOV P2,#01 //選擇IN1端口
SETB P0.6 //啟動A/D轉換
CLR P0.6
JNB P0.2,$ //等待轉換結束
SETB P0.0 //轉換結束則將OE置1,允許輸出
MOV A,P3 //將ADC0808的輸出放到A
SUBB A,#80H //將其減去2.5V
ANL A,#80H //判斷余數是正數還是負數
JNZ COZC //若為負數則模擬電壓小于2.5V,轉變阻器2正常顯示程序;否則順序執行變阻器2不正常顯示程序
CLR P1.2 //紅燈2亮
SETB P1.3 //綠燈2滅
SJMP COBZC //轉移
COZC: CLR P1.3 //紅燈2滅
SETB P1.2 //綠燈2亮
COBZC: SJMP CHONG //轉第一步,無限循環
作者: zl2168 時間: 2018-3-21 10:28
本帖最后由 zl2168 于 2018-3-21 10:30 編輯
實例81 ADC0808中斷方式A-D(ALE輸出CLK)
先Proteus仿真一下,確認有效。
以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1.書中電路和程序設計有詳細說明,程序語句條條有注解。
作者: 奔跑別聽 時間: 2018-3-21 11:35
為什么你的單片機XTALE1和XTALE2沒接晶振,而他的ALE引腳能直接接到ADC0808的clock
作者: zl2168 時間: 2018-3-21 14:58
第一個問題:Proteus仿真時系統默認,實際電路必須接。
作者: zl2168 時間: 2018-3-21 15:09
第二個問題:51單片機,無讀寫外RAM操作時,ALE信號固定為CPU時鐘頻率的1/6,可用作0808的CLK信號
作者: zl2168 時間: 2018-3-21 15:10
本帖最后由 zl2168 于 2018-3-21 15:15 編輯
實例82 ADC0808查詢方式A-D(ALE輸出CLK)
實例82 ADC0808A-D( ALE輸出CLK,查詢方式).rar
(54.04 KB, 下載次數: 8)
2018-3-21 15:10 上傳
點擊文件名下載附件
0809ad2.jpg (313.32 KB, 下載次數: 48)
下載附件
2018-3-21 15:10 上傳
查詢方式時,0809 EOC端可不必通過反相器與INT0或INT1相連,直接與80C51 P1口或P3口中任一端線相連,不斷查詢EOC電平,當EOC高電平時,表示0809A-D完成,即可讀0809A-D值。
作者: zl2168 時間: 2018-3-21 15:11
本帖最后由 zl2168 于 2018-3-21 15:16 編輯
實例83 ADC0808延時方式A-D(ALE輸出CLK)
實例83 ADC0808A-D( ALE輸出CLK,延時等待方式).rar
(54.13 KB, 下載次數: 8)
2018-3-21 15:11 上傳
點擊文件名下載附件
0809ad3.jpg (311 KB, 下載次數: 51)
下載附件
2018-3-21 15:12 上傳
延時等待方式時,0809 EOC端可不必與80C51相連,而是根據時鐘頻率計算出A-D轉換時間,每路每次需64個時鐘周期,80C51一機周發出2次ALE信號,因此需要32個機器周期,略微延長后直接讀A-D轉換值。
作者: zl2168 時間: 2018-3-21 15:12
本帖最后由 zl2168 于 2018-3-21 15:14 編輯
實例84 ADC0808并行A-D(虛擬CLK)
實例84 ADC0808A-D(虛擬CLK).rar
(35.75 KB, 下載次數: 7)
2018-3-21 15:12 上傳
點擊文件名下載附件
0809ad4.jpg (242.47 KB, 下載次數: 42)
下載附件
2018-3-21 15:13 上傳
先Proteus仿真一下,確認有效。以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil C和Proteus》清華大學出版社ISBN 978-7-302-41682-1.書中電路和程序設計有詳細說明,程序語句條條有注解。
作者: zl2168 時間: 2018-3-21 15:21
以上4例有雙解c和匯編程序,取之于《單片機原理與控制技術——雙解匯編和C51》第3版ISBN 978-7-111-42393-5機械工業出版社和《單片機學習指導及習題解答——雙解匯編和C51》第2版ISBN 978-7-111-42431-4機械工業出版社。程序語句條條有注解,便于閱讀理解,便于自學。
作者: 程序新手 時間: 2018-3-24 13:40
你的單片機XTALE1和XTALE2沒接晶振,而他的ALE引腳能直接接到ADC0808的clock
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |