stm8 ADC模数转换

第一步:stm8 ADC简介

stm8ADC1ADC210位逐次比较型模拟数字转换器。A/D转换的各个通道可以执行单次和连续的转换模式。

stm8 ADC模数转换_第1张图片

stm8 ADC模数转换_第2张图片

stm8S103k5引脚图如下:


stm8stm8 ADC模数转换_第3张图片

可以看见它只有16/15/14/13引脚是ADC的引脚,分别是AIN0AIN1AIN2AIN3。都是ADC1

stm8 ADC模数转换_第4张图片

第二步:ADC相关寄存器说明

stm8 ADC模数转换_第5张图片

stm8 ADC模数转换_第6张图片

stm8 ADC模数转换_第7张图片

stm8 ADC模数转换_第8张图片

stm8 ADC模数转换_第9张图片

stm8 ADC模数转换_第10张图片

基本还是和前几节一样都是直接截图的数据手册。

第三步:具体实现

实现功能:PB0AIN0,当接3.3V电压时点亮LED,接地时LED熄灭,没有可调电阻和可调电源,就这么操作了。

#include "IOSTM8S105K4.h"

#define u16 unsigned int
#define u8 unsigned char

void System_Init(void)
{
   CLK_SWR = 0xE1;  //选择高速内部时钟HSI为主时钟
   CLK_ICKR |= 0x01;  //高速内部HSI时钟使能
   while(!(CLK_ICKR&0x02)); //等待内部高速HSI就绪
   CLK_CKDIVR = 0x18;   // Fhsi = Fhsi = Fcpu = Fmaster = 2MHz
}
/*延时xms函数@ HSI 2MHz*/
void delay_ms(u16 xms)
{
  u16 i,j;
  for(i=xms;i>0;i--)
   for(j=330;j>0;j--)
   {
      asm("nop");
   }
}
void Gpio_Init(void)
{
  /*PE5设置为推挽输出*/
  PE_DDR|=0x20;
  PE_CR1|=0x20;
  PE_CR2|=0x00;  //最大为10MHz
}
/*ADC初始化*/
void Adc_Init(void)
{
  /*PB0 设置为悬浮输入*/
  PB_DDR &=0xFE;  //PB0输入模式
  PB_CR1 &=0xFE;  //PB0浮空输入
  PB_CR2 &=0xFE;  //PB0禁止外部中断
  /*开启ADC时钟*/
  CLK_PCKENR2 |= 0x08;  //开启ADC时钟  ADC时钟默认是开启的,可不设置
  /*设置ADC时钟、转换模式、数据对齐格式和通道*/
  ADC_CR1 = 0x00;  //ADC时钟1MHz,单次转换,关闭ADC  默认如此
  ADC_CR2 = 0x00;  //数据左对齐,禁止外部触发,禁止扫描模式   默认如此
  ADC_CSR = 0x00;  //选择通道0 AIN0   默认如此
}
/*获取10位的ADC转换结果*/
u16 Get_Adc_Result(void)
{
  u8 ADC_H,ADC_L;
  u16 ADC_temp;
  ADC_CR1 |= 0x01;  //启动ADC 启动ADC电源
  delay_ms(1);      //延时1ms 等待ADC启动
  ADC_CR1 |= 0x01;  //再次启动ADC转换
  while((ADC_CSR&0x80) == 0); //等待ADC转换结束
  ADC_H = ADC_DRH;  //左对齐 先读高八位
  ADC_L = ADC_DRL;  //读取低位值
  ADC_temp = (ADC_H << 8) +ADC_L; //两个八位数据合并成一个16位数据
  return ADC_temp;  //返回10位ADC转换结果
}

int main( void )
{
  u16 temp;
  System_Init();
  Gpio_Init();
  Adc_Init();
  while (1)
  {
    temp = Get_Adc_Result();
    if(temp>=800)  //如果ADC转换结果大于800
    {
      PE_ODR = 0x00;  //PE5口的LED点亮
    }
    else PE_ODR = 0xFF;  //否则PE5口的LED不点亮
    delay_ms(800);  //延时800ms
  }
}

关于时钟和LED端口部分请查看《stm8 点亮第一个LED》









你可能感兴趣的:(寄存器,IAR,stm8,ADC模数转换)