您的位置 首页 主动

STM8S的ADC使用

软件环境:IARFORSTM8V10作者:Nicole功能:AD的单次转换程序,适合温度的采集和电压的采集日期:20101105includeios

//软件环境:IAR FOR STM8 V1.0

//作者:Nicole

//功用:AD的单次转化程序,合适温度的收集和电压的收集
//日期:2010.11.05

#include “iostm8s105c6.h”
unsigned int DATA;
unsigned int DATAH;
unsigned int DATAL;
// 函数功用:延时函数
// 输入参数:ms — 要延时的毫秒数,这儿假定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–;
}
}
//时钟装备默许
void CLK_Init(void)
{
}

// 将PD0设置成推挽输出,以便推进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成果数据左对齐
ADC_CR1 = 0x00;// ADC时钟=主时钟/2=1MHZ
// ADC转化形式=单次
// 制止ADC转化
ADC_CSR = 0x00;// 挑选通道0
ADC_TDRL = 0x01;//制止施密特触发
}
main()
{
int i;
GPIO_Init();
ADC_Init();
while(1)// 进入无限循环

{

ADC_CR1 = 0x01;// CR1寄存器的最低方位1,使能ADC转化
for(i=0;i<100;i++);// 延时一段时间,至少7uS,确保ADC模块的上电完结
ADC_CR1 = ADC_CR1 | 0x01; // 再次将CR1寄存器的最低方位1
// 使能ADC转化
while((ADC_CSR & 0x80) == 0); // 等候ADC完毕

DATAH = ADC_DRH;// 读出ADC成果的高8位

DATAL = ADC_DRL;

DATA = (DATAH<<2) + DATAL ; //得到十位精度的数据

//PD_ODR = 0x01;// PD0灭

DelayMS(DATA);// 延时一段时间

PD_ODR = PD_ODR ^ 0x01;

// DelayMS(DATA);

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/257861.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部