STM8S的ADC转换程序例子
程序:/******************************
* ADC操作测试程序 *
* 功能描述:ADC数据比较点亮LED*
* 硬件配置:ST三合一之STM8板 *
* 设 计 者:铜河 *
* 建立日期:2010年10月10日 *
* 版本信息:V1.0 *
* 修改日期:2010年10月10日 *
* 主控芯片:STM8S105K6 *
******************************/
#include "iostm8s105.h"
#define flag1 200
#define flag2 400
#define flag3 600
#define flag4 800
#define LED_ON() PD_ODR |= 1<<3
#define LED_OFF() PD_ODR &= ~(1<<3)
/******************************
* ADC读取函数 *
* 功能描述:读取ADC转换结果 *
******************************/
unsigned int read_adc(void)
{
unsigned int temp;
unsigned char i;
/* Sample AIN voltage in ADC single mode */
ADC_CR1 |= 0x01; //第一次启动转换
i = 6; //等7uS待系统稳定
while(i--);
ADC_CR1 |= 0x01; //启动正式转换
while(!(ADC_CSR & 0x80));//等待转换结束
temp = ((((unsigned int)ADC_DRH)<<2)+ADC_DRL);//按左对齐方式读数据
return temp;
}
/******************************
* 端口初始化函数 *
* 功能描述:端口输入输出配置 *
******************************/
void GPIO_Init(void)
{
/* LED IO Configuration */
/* LD3: PD3 */
/* LD2: PD1 */
/* LD1: PD0 */
PD_DDR |= 0x0D; /* Output. */
PD_CR1 |= 0x0D; /* PushPull. */
PD_CR2 = 0x00; /* Output speed up to 2MHz. */
/* PD7 external interrupt */
EXTI_CR1 = 0x00;
EXTI_CR2 = 0x00;
PD_DDR &=~0x80;
PD_CR2 |= 0x80;
}
/******************************
* 时钟初始化函数 *
* 功能描述:时钟配置 *
******************************/
void CLK_Init(void)
{
/* Configure HSI prescaler*/
CLK_CKDIVR &= ~0x10; /* 01: fHSI= fHSI RC output/2. */
/* Configure CPU clock prescaler */
CLK_CKDIVR |= 0x01; /* 001: fCPU=fMASTER/2. */
}
/******************************
* ADC初始化函数 *
* 功能描述:ADC配置 *
******************************/
void ADC_Init(void)
{
ADC_CR2 = 0x00;
ADC_CR1 = 0x00; //单次转换
ADC_CSR = 0x03; //第三通道
ADC_TDRL = 0x20;
}
/************************
* 主函数 *
************************/
void main ( void )
{
unsigned int j;
unsigned int AD_Value;
_asm("sim"); /* Disable interrupts */
CLK_Init();
GPIO_Init();
ADC_Init();
while ( 1 )
{
AD_Value = read_adc();
if(AD_Value < flag1)
{
PD_ODR = 0x00;
}
else if((AD_Value>flag1)&&(AD_Value<flag2))
{
PD_ODR = 0x01;
}
else if((AD_Value>flag2)&&(AD_Value<flag3))
{
PD_ODR = 0x04;
}
else if((AD_Value>flag3)&&(AD_Value<flag4))
{
PD_ODR = 0x08;
}
else if(AD_Value>flag4)
{
PD_ODR = 0x0D;
}
}
} 表四鄙人纯属随机路过。。。顺带帮顶。。。
页:
[1]