新聞中心

STM8S的ADC應(yīng)用

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
//軟件環(huán)境:IAR FOR STM8 V1.0

//作者:Nicole

本文引用地址:http://m.butianyuan.cn/article/201611/321590.htm

//功能:AD的單次轉(zhuǎn)換程序,適合溫度的采集和電壓的采集
//日期:2010.11.05

#include "iostm8s105c6.h"
unsigned int DATA;
unsigned int DATAH;
unsigned int DATAL;
// 函數(shù)功能:延時(shí)函數(shù)
// 輸入?yún)?shù):ms -- 要延時(shí)的毫秒數(shù),這里假設(shè)CPU的主頻為2MHZ
void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms != 0)
{
for(i=0;i<250;i++)
{
}
for(i=0;i<75;i++)
{
}
ms--;
}
}
//時(shí)鐘配置默認(rèn)
void CLK_Init(void)
{
}

// 將PD0設(shè)置成推挽輸出,以便推動(dòng)LED
void GPIO_Init(void)
{
PD_DDR = 0x01;
PD_CR1 = 0x01;
PD_CR2 = 0x00;
}

// 初始化A/D模塊
void ADC_Init(void)
{
ADC_CR2 = 0x00;// A/D結(jié)果數(shù)據(jù)左對(duì)齊
ADC_CR1 = 0x00;// ADC時(shí)鐘=主時(shí)鐘/2=1MHZ
// ADC轉(zhuǎn)換模式=單次
// 禁止ADC轉(zhuǎn)換
ADC_CSR = 0x00;// 選擇通道0
ADC_TDRL = 0x01;//禁止施密特觸發(fā)
}
main()
{
int i;
GPIO_Init();
ADC_Init();
while(1)// 進(jìn)入無(wú)限循環(huán)

{

ADC_CR1 = 0x01;// CR1寄存器的最低位置1,使能ADC轉(zhuǎn)換
for(i=0;i<100;i++);// 延時(shí)一段時(shí)間,至少7uS,保證ADC模塊的上電完成
ADC_CR1 = ADC_CR1 | 0x01; // 再次將CR1寄存器的最低位置1
// 使能ADC轉(zhuǎn)換
while((ADC_CSR & 0x80) == 0); // 等待ADC結(jié)束

DATAH = ADC_DRH;// 讀出ADC結(jié)果的高8位

DATAL = ADC_DRL;

DATA = (DATAH<<2) + DATAL ; //得到十位精度的數(shù)據(jù)

//PD_ODR = 0x01;// PD0滅

DelayMS(DATA);// 延時(shí)一段時(shí)間

PD_ODR = PD_ODR ^ 0x01;

// DelayMS(DATA);

}

}



關(guān)鍵詞: STM8SADC應(yīng)

評(píng)論


技術(shù)專區(qū)

關(guān)閉