铜河 发表于 2013-2-26 15:20:59

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;
                        }
    }
}  

ba1731 发表于 2013-2-28 14:17:29

表四鄙人纯属随机路过。。。顺带帮顶。。。
页: [1]
查看完整版本: STM8S的ADC转换程序例子