STM8单片机ADC连续采样模式
STM8S003单片机内部ADC为12位,A/D转换的各个通道可以执行单次和连续的转换模式。
单次转换模式的意思就是,ADC每次转换一次数据后,就会停止转换,如果还需要继续转换的话,就需要手动开启第二次转换功能。
连续转换模式的意思就是每次转换结束后,系统会自动开启第二次转换,不需要手动设置第二次转换的开启,也就是说连续转换模式只需要开启一次。
ADC框图如下:
ADC连续模式转换时序图如下:
通过时序图可以看出,在第2次转换完成后,第一次采样的结果才会输出,也就是结果输出比采样滞后了一个周期。
下面用代码来实现ADC的连续转换模式:
#include "adc.h"
#include "main.h"u16 DATAH = 0; //ADC转换值高8位
u16 DATAL = 0; //ADC转换值低8位
_Bool ADC_flag = 0; //ADC转换成功标志//AD通道引脚初始化
void ADC_GPIO_Init( void )
{PD_DDR &= ~( 1 << 3 ); //PD3 设置为输入 电流PD_CR1 &= ~( 1 << 3 ); //PD3 设置为悬空输入
}
//ch 为单片机的对应管脚
void ADC_CH_Init( u8 ch )
{char l = 0;ADC_CR1 = 0x00; //fADC = fMASTER/2, 8Mhz 单次转换,禁止转换ADC_CR1 |= ( 1 << 1 ); //开启连续转换模式ADC_CSR = ch + 1; //控制状态寄存器 选择要 AD输入通道 如:PD2(AIN3)ADC_CR2 = 0x00; //默认左对齐 读数据时先读高在读低ADC_TDRL = ( 1 << ( ch + 1 ) ); //禁止相应通道 施密特触发功能 1左移ch+1位ADC_CR1 |= 0x01; //使能ADC并开始转换//ADC_CSR |= 0x20; //EOCIE 使能转换结束中断 EOC中断使能for( l = 0; l < 100; l++ ); //延时,保证ADC模块的上电完成 至少7usADC_CR1 = ADC_CR1 | 0x01; //再次将CR1寄存器的最低位置1 使能ADC 并开始转换
}//采集PD3电压值
u16 ReadVol_CH3( void )
{u16 voltage = 0;if( ADC_CSR & 0x80 ){DATAH = ADC_DRH; // 读出ADC结果的高8位DATAL = ADC_DRL; // 读出ADC结果的低8位voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据 0--1024ADC_CSR &= 0x7F;};return voltage;
}
连续转换模式,只需要开启一次转换,然后一直等待数据转换结束,读取数据就行。由于连续转换模转换速度和快,使用中断的话,系统中断太频繁,影响其他代码执行。所以可以不需要中断去读取数据,需要数据的时候直接判断转换结束标志位去读取数据就行。
ADC_CSR寄存器如下:
当ADC转换结束后ADC_CSR寄存器的EOC位就会置1,读取完采样结果后需要手动将EOC位清零。
由于连续转换模式在初始化之后只会转换当前通道,如果要切换到其他通道需要重新初始化ADC。
在主程序中直接调用通道读取函数就行。
#include "iostm8s103F3.h"
#include "led.h"
#include "adc.h"
#include "stdio.h"
void SysClkInit( void )
{CLK_SWR = 0xe1; //HSI为主时钟源 16MHz CPU时钟频率CLK_CKDIVR = 0x00; //CPU时钟0分频,系统时钟0分频
}
void main( void )
{u16 val1 = 0;u16 i=0;u16 value[450]={0};SysClkInit();__asm( "sim" ); //禁止中断LED_GPIO_Init();ADC_CH_Init( 3 );__asm( "rim" ); //开启中断while( 1 ){LED = !LED;for(i=0;i<450;i++){val1 = ReadVol_CH3();value[i]=val1;}i=0;}
}
在主函数中连续读取450次采样的数据存储在数组中。
STM8单片机ADC连续采样模式相关推荐
- STM8单片机ADC连续扫描模式
当STM8单片机使用ADC功能读取多个通道的值时,可以使用连续模式,但是连续模式一次只能采样一个通道的值,那么如果要采样多个通道时怎么办呢?STM8提供了一个多通道连续采样扫描模式.也就是说多个通 ...
- STM8单片机ADC带缓存的连续采样模式
在上一篇文章中说了STM8的ADC连续采样模式,为了提高采样的精度和速率,STM8单片机还提供了带缓存的连续采样模式,也就是说ADC会连续采集8个数据,放在缓存中,读取数据时可以一次从缓存中读取8 ...
- TI DSP 28335 ADC连续采样检测SPI控制的DAC输出 SCI串口232通信
文章目录 前言 1 SCIA FIFO 串口通信配置 2 DAC 数模转换 配置 2.1 TLV5620芯片简介 2.2 TLV5620初始化函数 2.2 DAC 输出函数 3 ADC 模数转换 配置 ...
- STM8单片机低功耗---停机(Halt)模式实现
在上一篇文章 STM8单片机低功耗-等待(Wait)模式实现 中介绍了低功耗模式中的等待(Wait)模式代码实现方法,这篇文章就来演示一下 停机(Halt)模式的代码实现. 停机(Halt) ...
- STM8S系列基于IAR开发单通道ADC连续采样示例
STM8S系列基于IAR开发单通道ADC连续采样示例
- STM8单片机ADC采样功能通过定时器触发
在使用STM8单片机的ADC功能时,读取ADC数据时一般有两种方式,一种是通常不断地读取采样标志位,来判断ADC采样是否结束,一种是通过中断的方式来通知系统采样是否结束. 有时候采样ADC数据 ...
- STM8单片机ADC模拟看门狗功能实现
看门狗的功能大家都知道,而这个模拟看门狗又是什么东西呢? 简单的说就是这个模拟看门狗可以实时监控ADC采样的数据,当采样的数据值小于设置的最小值或者大于设置的最大值时,单片机就会触发ADC中断 ...
- STM8单片机低功耗---等待(Wait)模式实现
在平时使用单片机的时候,一般不太关心功耗的问题.但是当产品需要使用电池供电的话,那么功耗问题就要必须重视起来.那么如何降低单片机的功耗呢?STM8官方资料上给我们提供了以下几点建议: 如果项目 ...
- STM8单片机 ADC模拟看门狗中文资料错误
在调试stm8单片机的adc模拟看门狗功能时,不管怎么设置ADC_HTR和ADC_LTR寄存器的值,然后通过IAR软件单步调试时观察这两个寄存器的值都不对. 根据中文手册上看,高位寄存器存储的 ...
最新文章
- 信息处理进入了计算机领域,信 息 处 理 进 入 了 计 算 机 领 域 ,实 质 是 进 入 了()的 领 域 。...
- 腾讯云一口气发布四大新品,云原生时代将正式开启
- 温度补偿计算公式_钢材的基本计算公式(下)
- 父类子类的创建对象和实例化
- 如何使用计算机小学生课件,小学生计算机课件
- 编程语言新宠儿——Julia诞生记(转)
- mcgs组态软件中字体如果从左到右变化_MCGS组态软件课件-第5章.ppt
- 介绍NVivo 12 Mac
- uploadify html5 java_工作中碰到uploadify插件两个版本:HTML5和Flash
- 《设计模式之禅》前言
- 云智信短信验证码php示例
- GNU/Linux 初學之旅
- 怎么用鸿蒙os系统,鸿蒙OS2.0系统怎么降级到EMUI11 鸿蒙OS2.0系统降级到EMUI11方法...
- Win7下调出任务快捷栏
- java基础知识点整理大全
- JLINK SW接线方式
- 无缝大世界之无缝连接Terrain转mesh
- 年底了,骗子们也要冲业绩了
- 大面积无线WIFI覆盖 H3C WX3010E(AC+PoE三层交换机)+ H3C WA2620E、WA4320无线AP +华为USG6310S防火墙
- 服务器(vps)如何修改3389(rdp)端口