圣龙扬特-AVR电子

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2679|回复: 1
打印 上一主题 下一主题

STM8S的ADC转换程序例子

[复制链接]

26

主题

1

好友

3446

积分

超级版主

Rank: 8Rank: 8

UID
7
帖子
140
精华
0
注册时间
2013-2-26
在线时间
20 小时

突出贡献

跳转到指定楼层
楼主
发表于 2013-2-26 15:20:59 |只看该作者 |倒序浏览
程序:
/******************************
*                                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;
                        }
    }
}  
回复

使用道具 举报

0

主题

1

好友

3101

积分

超级版主

Rank: 8Rank: 8

UID
31
帖子
36
精华
0
注册时间
2013-2-27
在线时间
5 小时
沙发
发表于 2013-2-28 14:17:29 |只看该作者
表四鄙人纯属随机路过。。。顺带帮顶。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|圣龙扬特-AVR电子 ( 鲁ICP备05022832号 )

GMT+8, 2024-12-31 02:09 , Processed in 0.189879 second(s), 19 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部