stc單片機(jī)ad轉(zhuǎn)換程序
#include
#include
sfr P1_ADC_EN = 0x97; //A/D轉(zhuǎn)換功能允許寄存器
sfr ADC_CONTR = 0xC5; //A/D轉(zhuǎn)換控制寄存器
sfr ADC_DATA = 0xC6; //A/D轉(zhuǎn)換結(jié)果寄存器
sfr P1M0=0x91;
sfr P1M1=0x92;
#define uchar unsigned char ;
#define uint unsigned int ;
void delay(uchar delay_time) // 延時(shí)函數(shù)
{
uchar n;
uint m;
for (n=0;n {
for(m=0;m《10000;m++);
}
}
uchar get_AD_result(uchar channel)
{
uchar AD_finished = 0; // 存儲(chǔ) A/D 轉(zhuǎn)換標(biāo)志
ADC_DATA = 0;
ADC_CONTR = channel; // 選擇 A/D 當(dāng)前通道
delay(1); //使輸入電壓達(dá)到穩(wěn)定
ADC_CONTR |= 0x08; //0000,1000 令 ADC_START = 1, 啟動(dòng)A/D 轉(zhuǎn)換
AD_finished = 0;
while ( AD_finished == 0 ) // 等待A/D 轉(zhuǎn)換結(jié)束
{
AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1測(cè)試A/D轉(zhuǎn)換結(jié)束否
}
ADC_CONTR &= 0xF7; //1111,0111 令 ADC_START = 0, 關(guān)閉A/D 轉(zhuǎn)換,
return (ADC_DATA); // 返回 A/D 轉(zhuǎn)換結(jié)果
}
void main()
{
P1 = P1 | 0x03; // 0000,0011,P1.0,P1.1為 A/D 轉(zhuǎn)換,即通道0與1
P1_ADC_EN = 0x03; //0000,0011, P1 的P1.0,P1.1設(shè)置為 A/D 轉(zhuǎn)換輸入腳
// 斷開P1.0,P1.1 內(nèi)部上拉電阻
while(1)
{
get_AD_result(0);
delay(200);
get_AD_result(1);
delay(200);
}
}
stc單片機(jī)ad轉(zhuǎn)換程序心得
話說stc內(nèi)部自帶ad,但是功能多了!必然控制起來就啰嗦了!不像外部ad。stc如果不用中斷ad方式需要注意一下幾個(gè)問題:
1、在初始化ad的時(shí)候,一定要第一個(gè)給ad提供電源,即adc_power一定要第一個(gè)置1;
2、在每次對(duì)adc-contr進(jìn)行操作后,必須延時(shí)至少4個(gè)時(shí)鐘周期,原因是adc_contr這個(gè)寄存器需要時(shí)間存儲(chǔ)信息;
3、在對(duì)adc_contr進(jìn)行操作時(shí),盡量不要用位尋址。直接對(duì)整個(gè)寄存器進(jìn)行修改。
4、在數(shù)據(jù)手冊(cè)上面提示盡量不要用“與”“或”,但是在時(shí)機(jī)應(yīng)用的時(shí)候因?yàn)槊看螌?duì)adc_contr進(jìn)行操作后都要延時(shí),所以“與”“或”還是很必要的;
-
AD轉(zhuǎn)換
+關(guān)注
關(guān)注
3文章
168瀏覽量
46083 -
STC單片機(jī)
+關(guān)注
關(guān)注
9文章
223瀏覽量
39039
發(fā)布評(píng)論請(qǐng)先 登錄
STC單片機(jī)程序下載器設(shè)計(jì)
STC11F單片機(jī)串口測(cè)試程序
STC單片機(jī)參考程序資料免費(fèi)下載

STC單片機(jī)程序下載原理與自動(dòng)下載

stc單片機(jī)自動(dòng)下載程序原理和代碼實(shí)現(xiàn)

stc單片機(jī)自動(dòng)下載程序原理和代碼實(shí)現(xiàn)

如何學(xué)習(xí)STC單片機(jī)

STC系列單片機(jī)燒錄

評(píng)論