stm8 ADC模数转换

发布者:asdfrewqpp最新更新时间:2018-06-02 来源: eefocus关键字:stm8  ADC  模数转换 手机看文章 扫描二维码
随时随地手机看文章

第一步:stm8 ADC简介


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




stm8S103k5引脚图如下:



stm8


可以看见它只有16/15/14/13引脚是ADC的引脚,分别是AIN0、AIN1、AIN2、AIN3。都是ADC1。


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







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

第三步:具体实现

实现功能:PB0脚AIN0,当接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  

  }  

}  


关键字:stm8  ADC  模数转换 引用地址:stm8 ADC模数转换

上一篇:IAR for STM8 研究
下一篇:STM8的启动过程(基于IAR)

推荐阅读最新更新时间:2024-03-16 16:04

实验5 PWM
在讲PWM之前,大家先做以下5个实验。 1、LED1循环亮300ms,灭700ms; 2、LED1循环亮30ms,灭70ms; 3、LED1循环亮3ms,灭7ms; 4、循环以下步骤 1)LED1循环亮3ms,灭7ms;执行一百次; 2)LED1循环亮8ms,灭2ms;执行一百次; 5、循环以下步骤 1)LED1循环亮1ms,灭9ms;LED2循环亮3ms,灭7ms;LED3循环亮5ms,灭5ms;以上3灯闪烁动作共用同个10ms周期,执行一百次; 2)LED1循环亮5ms,灭5ms;LED2循环亮7ms,灭3ms;LED3循环亮9ms,灭1ms;以上3灯闪烁动作共用同个10ms周期,执行一百次; 第1、2个实验,可以明显看出LE
[单片机]
实验5 PWM
PIC16F873 ADC & PWM & EEPROM
/共6个按键分别定义为:1-6;利用RA0作为ADC模拟采样转换;将5V电源均分成6等分 //当相应键按下时,数码管会显示键值,RC2/CCP1会输出相应脉宽的PWM波形,一直到有其他键按下改变其值为止 //当芯片启动,没按过键的情况下,RC2/CCP1输出0.5脉宽的PWM波形 #include pic.h unsigned char vh,vl; void adc_init(void); void pwm_init(void); void interrupt adc(void); void numbers(unsigned char o); void eepromwrite(unsigned char addr,un
[单片机]
PIC16F873 <font color='red'>ADC</font> & PWM & EEPROM
stm8 clock
stm8时钟源有4种: 1. 16MHz的高速内部时钟源HSI 2. 1到16MHz的高速外部时钟源HSE 3. 32.768KHz的低速外部时钟源LSE 4. 38KHz的低速内部时钟源LSI 这4种时钟源都可以作为系统时钟,大家也可以用示波器量一下59引脚,看输出的的时钟频率是否正确,在量之前需要做如下设置: void main(void) { GPIO_Init(GPIOC, GPIO_Pin_4, GPIO_Mode_Out_PP_High_Fast); //CLK_CCOConfig(CLK_CCOSource_HSI, CLK_CCODiv_1); /* 16MHz */ CLK_
[单片机]
在MCU系统中如何利用ADC技术进行数据采集
使用MCU的系统设计人员受益于摩尔定律,即通过更小封装、更低成本获得更多的丰富特性功能。嵌入式系统设计人员和MCU厂商关心数据采集系统的三个基本功能:捕获、计算和通信。理解全部功能对设计大有帮助,本文将主要关注数据采集系统的捕获阶段。 捕获 复杂的混合信号MCU必须能够从模拟世界中捕获某些有用信息,并且能够把连续时间信号转换成离散的数字形式。模数转换器(ADC)是完成这项任务最重要的MCU外设,因此ADC的性能往往决定何种MCU适用于何种应用。MCU也能够通过各种串行或并行数字I/O接口捕获来自外部信号源的数字形式的系统信息。 计算 信号捕获后,需要对捕获数据进行某些处理;有时仅仅需要模数转换,但是更多情况下必须要对捕获的数
[单片机]
在MCU系统中如何利用<font color='red'>ADC</font>技术进行数据采集
STM8 AWU寄存器
控制/状态寄存器(AWU_CSR) 地址偏移值:0x00 复位值:0x00 位7:6 保留位,必须保持为0 位5 WUF:自动唤醒标志位 此位在自动唤醒模块产生中断时被置位,通过读AWU_CSR清零。写操作不影响此位的数值 0:无自动唤醒中断产生 1:自动唤醒中断产生 位4 AWUEN:自动唤醒使能位 此位由软件置位和清零。由此位使能自动唤醒功能。如果MCU进入Active-halt或Wait模式,则自动唤醒模块按照预先编程设置延时一段时间唤醒MCU。 0:禁止自动唤醒功能 1:使能自动唤醒功能 位3:1 保留位,必须保持为0 位0 MSR:测量使能位 此位使能fLS时钟连接到TM3的输入捕获。允许定时器测量低速时钟
[单片机]
<font color='red'>STM8</font> AWU寄存器
IAR for stm8安装破解
1.下载安装包和注册机 链接:https://pan.baidu.com/s/1maBEtoyps2HhcdGYxmZUcA 提取码:31dn 复制这段内容后打开百度网盘手机App,操作更方便哦 百度云下载下来 这个样子: 2.双点击EWSTM8-3104-Autorun安装 同意,下一步到结束 。。。 中间会装几个驱动,装就是了 装完退出,打完收工 3. 注册 IAR for STM8是一个收费的软件,官方严厉打击盗版,若你是商业用途,建议购买正版软件。当然,我这里是针对个人开发学习的朋友而言,进行非商业用途的使用。 3.1 打开上面安装好的IAR for STM8软件(没有创建桌面快捷方式,可以从开始菜
[单片机]
IAR for <font color='red'>stm8</font>安装破解
STM8单片机GPIO操作
设置GPIO的寄存器包括:输出寄存器(ODR),输入寄存器(IDR),方向寄存器(DDR),控制寄存器1(CR1)和控制寄存器2(CR2),可以利用后面三个寄存器组配置GPIO的8种模式。 固件库函数给出了GPIO 8种模式的定义,在上面的基础上加入了输出高/输出低电平的状态。 GPIO_Mode_In_FL_No_IT 浮空输入,无外部中断 GPIO_Mode_In_PU_No_IT 上拉输入,无外部中断 GPIO_Mode_In_FL_IT 浮空输入,有外部中断 GPIO_Mode_Out_OD_Low_Fast 开漏输出低电平 10MHZ GPIO_Mode_Out_PP_Low_Fast 推挽输出低电平
[单片机]
TMS320C28x模数转换器的精度校正
引 言:   TMS320F2812是德州仪器公司(TI)推出的主频最高可达150 MHz的32位高性能数字信号处理器(DSP),内部集成了ADC转换模块。ADC模块是一个12位、具有流水线结构的模数转换器,内置双采样保持器(S/H),可多路选择16通道输入,快速转换时间运行在25 MHz、ADC时钟或12.5 Msps,16个转换结果寄存器可工作于连续自动排序模式或启动/停止模式。   在现代电子系统中,作为模拟系统与数字系统接口的关键部件,模数转换器(ADC)已经成为一个相当重要的电路单元,用于控制回路中的数据采集。在实际使用中,发现该ADC的转换结果误差较大,如果直接将此转换结果用于控制回路,必然会降低控制精度。为了克服
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved