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