//============================================================================== //2005-03-28...2005-03-29 //ADC0834模塊的C51程序源文件 //File Name=ADC083X.c //============================================================================== #include #include "DELAY_S.h" #include "ADC083X.h"
//外部全局變量的預(yù)定義
//******************************************************* //序號(hào): // HD_ADC083X_S01 //功能: // 端口初始化 //輸入: // 無(wú) //輸出: // 無(wú) //******************************************************** void adc083x_init(void) { SET_ADC083X_CS; SET_ADC083X_DO; CLR_ADC083X_CLK;
#if TYPE_VAL >=ADC0832 SET_ADC083X_DI; #endif
#if TYPE_VAL >=ADC0834 SET_ADC083X_SARS; #endif
}
//******************************************************* //序號(hào): // HD_ADC083X_S02 //功能: // 讀出AD數(shù)據(jù)字節(jié) //輸入: // chanel 通道號(hào)以及單、雙端設(shè)置選擇,它的值被類(lèi)型值限制! // 即有效值是select分別取最低4、3、2位或不使用 // 具體的值參見(jiàn)pdf文檔! //輸出: // AD轉(zhuǎn)換的結(jié)果字節(jié) //******************************************************** uchar adc083x_do_one_change(uchar chanel) { uchar data ad_val; uchar data i;
//轉(zhuǎn)換前的初始化 SET_ADC083X_CS; CLR_ADC083X_CLK; SET_ADC083X_DO; CLR_ADC083X_CS;
//SARS引腳非必要時(shí)可以不使用,以節(jié)省引腳資源! #if (TYPE_VAL==ADC0838) //chanel_.3 .2 .1 .0 =0000 通道0+_通道1-, =001 通道2+_通道3-,(雙端方式) // SGL/DIF ODD/SIGN SELECT SELECT =0010 通道4+_通道5-, =011 通道6+_通道7-,(雙端方式) // =0100 通道0-_通道1+, =0101 通道2-_通道3+,(雙端方式) // =0110 通道4-_通道5+, =0111 通道6-_通道7+,(雙端方式) // =1000 通道0+, =1001 通道2+,(單端方式) // =1010 通道4+, =1011 通道6+,(單端方式) // =1100 通道1+, =1101 通道3+,(單端方式) // =1110 通道5+, =1111 通道7+,(單端方式) //引腳/SE可以接地,不使用其控制反響字節(jié)的輸出延時(shí)功能!
chanel |=0x10; //附加起始位 for(i=0; i<5; i++) { if( (chanel &0x10)!=0) { SET_ADC083X_DI; } else { CLR_ADC083X_DI; } SET_ADC083X_CLK; CLR_ADC083X_CLK; chanel <<=1; }
#elif (TYPE_VAL==ADC0834) //chanel_.2 .1 .0 =000 通道0+_通道1-, =001 通道2+_通 道3-, (雙端方式) // SGL/DIF ODD/SIGN SELECT =010 通道0-_通道1+, =011 通道2-_通 道3+, (雙端方式) // =100 通道0+, =101 通道2+, (單端方式) // =110 通道1+, =111 通道3+, (單端方式)
chanel |=0x08; //附加起始位 for(i=0; i<4; i++) { if( (chanel &0x08)!=0) { SET_ADC083X_DI; } else { CLR_ADC083X_DI; } SET_ADC083X_CLK; CLR_ADC083X_CLK; chanel <<=1; }
#elif (TYPE_VAL==ADC0832) //chanel_.1 .0 =00 通道0+_通道1-, =01 通道0-_通道 1+, (雙端方式) // SGL/DIF ODD/SIGN =10 通道0+, =11 通道1+, (單端方式) chanel |=0x04; //附加起始位 for(i=0; i<3; i++) { if( (chanel &0x04)!=0) { SET_ADC083X_DI; } else { CLR_ADC083X_DI; } SET_ADC083X_CLK; CLR_ADC083X_CLK; chanel <<=1; }
#else //缺省時(shí)為ADC0831 SET_ADC083X_CLK; CLR_ADC083X_CLK; #endif
SET_ADC083X_CLK; //數(shù)據(jù)接收前的轉(zhuǎn)換位 CLR_ADC083X_CLK;
for(ad_val=0, i=0; i<8; i++) { ad_val <<=1; SET_ADC083X_CLK; ad_val +=(JUDGE_ADC083X_DO ==1? 1:0); CLR_ADC083X_CLK; } //對(duì)非ADC0831的型號(hào)而言,后續(xù)波形沒(méi)有使用!
SET_ADC083X_CS; return(ad_val); }
//============================================================================= //End Of File |
|