|
仿真目的:采用總線形式進(jìn)行ADC0808仿真
問題:1.輸出值范圍與預(yù)期不符,量程應(yīng)該為【0-5】,仿真結(jié)果是【0.88-3.45】且在變動的過程中出現(xiàn)了大于9的數(shù);2.即使采集口沒有接其他東西,也會顯示一個定值;3.本來是采集IN0的數(shù)據(jù),但是如果IN1的模擬量變化,顯示的數(shù)據(jù)也會變化。
小弟我真的看不出來,照著視頻一行一行敲的代碼,求助個位大佬的幫助。
出錯情況
1.未連接有初值
G_N1BKDH]~64EA}KBCI7BZG.png (34.08 KB, 下載次數(shù): 106)
下載附件
2022-1-25 22:01 上傳
2.量程不對
S%L[1R$(`5J0{J4`I634GSJ.png (37.3 KB, 下載次數(shù): 86)
下載附件
2022-1-25 22:01 上傳
3.端口“串線”
M76W]WQCZ_SEV0ZZG}RW)IF.png (37.54 KB, 下載次數(shù): 97)
下載附件
2022-1-25 22:01 上傳
代碼:
1.ADC0808
頭文件:
- #ifndef __ADC0809_H__
- #define __ADC0809_H__
- #include <REGX52.H>
- #include <absacc.H>
- sbit EOC = P3^5;
- #define AD_IN0 XBYTE[0X7FF8]
- #define AD_IN1 XBYTE[0X7FF9]
- #define AD_IN2 XBYTE[0X7FFA]
- unsigned char ADC_Conv();
-
- #endif
復(fù)制代碼 函數(shù)部分:
- #include "ADC0809.H"
- unsigned char ADC_Conv()
- {
- unsigned char ad_result = 0;
- AD_IN0 = 0x0000; //借助對端口地址執(zhí)行寫操作時序,來滿足A/D的操作時序
- while(EOC == 0);//查詢方式 高電平結(jié)束
- ad_result = AD_IN0;//借助對端口地址執(zhí)行讀操作時序,來滿足A/D的操作時序
- return ad_result;
- }
復(fù)制代碼
2.主函數(shù) 與 顯示服務(wù)函數(shù)
- #include <REGX52.H>
- #include "DISPLAY.H"
- #include "ADC0809.H"
- void display_service();
- unsigned char ad_result = 0; // 0-255
- int ad_show = 0;
- void main()
- {
- while(1)
- {
- DotDig1 = 1;
- ad_result = ADC_Conv();
- ad_show = ad_result * 1.0 *500/255; //5v - 500 255-份
- display_service();
- Display();
- }
- }
- void display_service()
- {
- LEDBUF[0]=23;
- LEDBUF[1]=ad_show/100%10;
- LEDBUF[2]=ad_show/10%10;
- LEDBUF[3]=ad_show%10;
- }
復(fù)制代碼
附件:仿真與代碼
ADC0808總線型.zip
(112.88 KB, 下載次數(shù): 8)
2022-1-25 22:06 上傳
點(diǎn)擊文件名下載附件
|
|