『壹』 adc0809轉換的一些問題(與51單片機配合)
1 、地址是人為定義的,在51單片機中P0口是低位地址8位與數據口8位分時復用,所有連接在地址匯流排上的器件,都必須有一個地址區間(地址塊),例如,RAM 62256需要32Kbyte,0000H--7FFFH,就是一個片選信號。
ad轉換器需要一個,經過地址解碼器,解碼後的「區間」,即儲存器的片選信號,解碼器可以分成1,2,4,8塊----,1就是單一地址,必須解碼器;看自己需要選定,選定一塊,如果需要,這一塊還可以用解碼器再次解碼,原則上可以到單個地址,ADC0809需要8個地址,用低位地址線A0,A1,A2三根,和上面所述的片選信號線,完成對該器件8路ad轉換器的選擇,低位地址線可以共用,片選線不能與其它器件共用。
2、外部數據輸入到P0口是需要有相應的器件被選擇,需要讀寫信號線控制的,這里用 /RD 讀信號,它不是單一發出,它與地址線共同完成對器件的讀寫操作。
這個例子中,需要選擇這個ADC器件(片選),還需要選擇由哪一路轉換器輸出(A0,A1,A2)。
data=P0這條指令和data=P1一樣,沒有地址輸出,沒有/RD輸出,就是沒有選擇到需要的器件。
『貳』 51單片機程序問題 stc12c5a60s2 的a/d轉換問題..
好吧,先聲明我也正在學單片機,回答可能不專業,因為AD問題我只接觸過一次。以下結論來著STC12的手冊。
1.轉換的引腳由ADC_CONTG的低3位CHS2、CHS1和CHS0控制,三位二進制能表示0~7八個數,與P1口一一對應。ADC的結構決定了它一次只能轉換一個口,但是STC的轉換速度達到10萬次/秒,依次轉換P1.0和P1.1與同時轉換差別不大。設置P1.0時,ch=0x00.設置P1.1時,ch=0x01.
2.是按照一個位元組讀的,直接讀ADC_RES的話只能讀到數據的高八位。只用8位ADC轉換的話,讀ADC_RES就可以了。要想得到10位數據必須加上SendData(ADC_LOW2);
3.既然send函數提到了SBUF,那麼說明轉換結果是通過串口傳到電腦上,用STC下載工具的串口調試應該可以看到轉換結果。
4.連續讀取可以用函數循環或定時器循環來調用轉換函數。例子嘛,定時器我還不會用而你給的值定時器中斷法。所以我說下函數的方法,大概是這樣:
void main{
InitADC();//初始化ADC
while(1){//死循環
adc_isr();//轉換函數
delay(xx);//延時一段時間,否則轉換太快,數據量太大。
}
}
5.UART是一種通用串列數據匯流排,在這里是用於與電腦進行串口通信的。
『叄』 51單片機有外部數據存儲器的時候怎麼開始AD轉換
movx @dptr,A,開啟AD轉換會與外部數據存儲器發生沖突做兄,那是因為DPTR中的地址沒有指向AD轉換器的埠地址,或擾行者AD埠地址與外部數據存儲器的地址重復了。沒有具體電路,真正原因不好確緩胡嘩定。
單片機可採用埠模式與AD轉換器連接比較好,見下圖。
『肆』 51 AD轉換,用ADC0804,數據接P1.0-1.7,例子要求讀取數據前先用P1=0Xff將P1口寫1,什麼原因為何不寫0
51的P1口可輸入可輸出。
那麼哪條指令讓它作為輸入口,怎麼樣才能讓它作為輸入口呢?
每個口上都有一個鎖存器,鎖住之前寫的值。
比如,口上只是接一個上拉電阻,這個口作為輸入應該是高電平吧。
那你往口裡寫一個0,口會輸出0,這個口就成了低電平了。此時,你讀這個IO口,也會是低電平。
如果不改寫為1,鎖存器內就一直是0,也就是輸出0 ,程序讀這個口上的電平也是0。
改寫為1後,這個口上的電平才會1,或者說,不會把這個口拉低。
作為輸入口時,要事先寫1,也可以不用每次都寫,只要裡面不是0就成。
簡單的來說就是:因為單片機的構造(上拉了電阻),需要將P1口寫1,使之成為高電平,能夠作為輸入口。
『伍』 請問如何用51單片機生成頻率可調的方波請給出方案或者修改我的方案(如下)
P0 口,應該加上上拉電阻。山瞎
AD 轉換的結果,應該是:0~255。
使用真實的硬體,結果是多少?
可以在 P2 口,接上八個 LED,當場顯示出來看看。
另外,對於這一批數據,你所期望得到的頻逗族空率范圍,究穗叢竟是多少?
還有,採用軟體定時,並不準確。