?? get0809.c
字號(hào):
/*
----------------------------------------------------------
; (c) Copyright xami All Rights Reserved
----------------------------------------------------------
; SOURCE_FILE: GET0809.C
; APPLICATION: 80c51\80c52
; DESCRIPTION: 取adc0809的數(shù)據(jù),采用查詢方式
; AUTHOR: xami
; DATE: 28 Apr. 2007
----------------------------------------------------------
<工作時(shí)序說(shuō)明>
START: 上升沿使內(nèi)部寄存器清零,下降沿開始轉(zhuǎn)換;
ALE: 地址鎖存允許信號(hào),上升沿將輸入地址(ADDC,ADDB,ADDC)
鎖存,確定通道;
OE: 數(shù)據(jù)輸出充許端,高電平時(shí)打開片內(nèi)的三態(tài)鎖存緩沖器,
將輸出寄存器的數(shù)據(jù)放到數(shù)據(jù)線上;
EOC: 轉(zhuǎn)換結(jié)束信號(hào),高電平有效,在START信號(hào)上升沿之后0~8個(gè)
周期內(nèi)變?yōu)榈碗娖?轉(zhuǎn)換結(jié)束變?yōu)楦唠娖?可用作查詢或中
斷信號(hào)用;
CLK: 時(shí)鐘信號(hào),ADC0809工作頻率f不大于640kHz,一般利用擴(kuò)展
槽上的CLOCK信號(hào)(4.77MHz)8分頻得到的596kHz信號(hào).
----------------------------------------------------------
*/
unsigned char getadc0809(void) //取出ADC0809的數(shù)據(jù),中斷方式
{
unsigned char res;
P2_5=0; //選中ADC0809
WR=1;
delay(10);
WR=0;
delay(10);
WR=1; //(start ALE的電平)一起先上升沿,再下降沿,啟動(dòng)ADC0809
delay(10); //時(shí)序限定了,先要等待8個(gè)周期以上才能查詢.
while(INT0!=0); //等待,當(dāng)INT0不為0時(shí)等待
RD=0; //輸出允許(OUT ENABLE)(查)
res= P0;
return(res);
}
/*采集電壓的值,基于全為內(nèi)部電路的情況下的測(cè)量*/
float get_u(void){
//程控:端口選擇,輸入電壓范圍為0.7~7v。
//-----------------------------------------------------------------
/*
//先設(shè)定到中間檔
P2_0= 1; // 0.7/2 = 0.35 min
P2_1= 0; // 7/2 = 3.5 max
res_u= getadc0809();
if(res_u> 4){
P2_0= 0; // 0.7/20 = 0.035 min
P2_1= 0;} // 7*2.5 = 0.35 max
else if(res_u< 0.4){
P2_0= 0; // 0.7/0.2 = 3.5 min
P2_1= 1;} // 7/0.2 = 35 max
*/
//------------------------------------------------------------------
//改進(jìn):為了器件安全,先設(shè)定到最低增益檔,再逐漸降增加增益
//放大轉(zhuǎn)換
//------------------------------------------------------------------
P2_0= 0;
P2_1= 1;
res_u= ((float)getadc0809()/0.2)*0.0196; //0.025: 1/40
/*為了提高精度,盡可能提高增益*/
if(res_u< 0.7){
P2_0= 1;
P2_1= 0;
res_u= ((float)getadc0809()/2.0)*0.0196; //0.25: 1 /4 1~0.1
if(res_u< 0.7){
P2_0= 0;
P2_1= 0;
res_u= ((float)getadc0809()/20.0)*0.0196; //2.5: 10/4
}
}
//------------------------------------------------------------------
//衰減轉(zhuǎn)換
//------------------------------------------------------------------
switch(mode_set_u_list){
case p20dB:{
res_u= res_u*(0.316*0.316);}break;
case p10dB:{
res_u= res_u*0.316;}break;
case p0dB: break;
case m10dB:{
res_u= res_u/0.316;}break;
case m20dB:{
res_u= res_u/(0.316*0.316);}break;
case m30dB:{
res_u= res_u/(0.316*0.316*0.316);}break;
default: break;
}
//------------------------------------------------------------------
return(res_u);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -