|
仿真目的:采用總線形式進行ADC0808仿真
問題:1.輸出值范圍與預期不符,量程應該為【0-5】,仿真結果是【0.88-3.45】且在變動的過程中出現了大于9的數;2.即使采集口沒有接其他東西,也會顯示一個定值;3.本來是采集IN0的數據,但是如果IN1的模擬量變化,顯示的數據也會變化。
小弟我真的看不出來,照著視頻一行一行敲的代碼,求助個位大佬的幫助。
出錯情況
1.未連接有初值
G_N1BKDH]~64EA}KBCI7BZG.png (34.08 KB, 下載次數: 106)
下載附件
2022-1-25 22:01 上傳
2.量程不對
S%L[1R$(`5J0{J4`I634GSJ.png (37.3 KB, 下載次數: 86)
下載附件
2022-1-25 22:01 上傳
3.端口“串線”
M76W]WQCZ_SEV0ZZG}RW)IF.png (37.54 KB, 下載次數: 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
復制代碼 函數部分:
- #include "ADC0809.H"
- unsigned char ADC_Conv()
- {
- unsigned char ad_result = 0;
- AD_IN0 = 0x0000; //借助對端口地址執行寫操作時序,來滿足A/D的操作時序
- while(EOC == 0);//查詢方式 高電平結束
- ad_result = AD_IN0;//借助對端口地址執行讀操作時序,來滿足A/D的操作時序
- return ad_result;
- }
復制代碼
2.主函數 與 顯示服務函數
- #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;
- }
復制代碼
附件:仿真與代碼
ADC0808總線型.zip
(112.88 KB, 下載次數: 8)
2022-1-25 22:06 上傳
點擊文件名下載附件
|
|