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连续采样模式相关推荐

  1. STM8单片机ADC连续扫描模式

      当STM8单片机使用ADC功能读取多个通道的值时,可以使用连续模式,但是连续模式一次只能采样一个通道的值,那么如果要采样多个通道时怎么办呢?STM8提供了一个多通道连续采样扫描模式.也就是说多个通 ...

  2. STM8单片机ADC带缓存的连续采样模式

      在上一篇文章中说了STM8的ADC连续采样模式,为了提高采样的精度和速率,STM8单片机还提供了带缓存的连续采样模式,也就是说ADC会连续采集8个数据,放在缓存中,读取数据时可以一次从缓存中读取8 ...

  3. TI DSP 28335 ADC连续采样检测SPI控制的DAC输出 SCI串口232通信

    文章目录 前言 1 SCIA FIFO 串口通信配置 2 DAC 数模转换 配置 2.1 TLV5620芯片简介 2.2 TLV5620初始化函数 2.2 DAC 输出函数 3 ADC 模数转换 配置 ...

  4. STM8单片机低功耗---停机(Halt)模式实现

      在上一篇文章 STM8单片机低功耗-等待(Wait)模式实现 中介绍了低功耗模式中的等待(Wait)模式代码实现方法,这篇文章就来演示一下 停机(Halt)模式的代码实现.    停机(Halt) ...

  5. STM8S系列基于IAR开发单通道ADC连续采样示例

    STM8S系列基于IAR开发单通道ADC连续采样示例

  6. STM8单片机ADC采样功能通过定时器触发

      在使用STM8单片机的ADC功能时,读取ADC数据时一般有两种方式,一种是通常不断地读取采样标志位,来判断ADC采样是否结束,一种是通过中断的方式来通知系统采样是否结束.   有时候采样ADC数据 ...

  7. STM8单片机ADC模拟看门狗功能实现

      看门狗的功能大家都知道,而这个模拟看门狗又是什么东西呢?   简单的说就是这个模拟看门狗可以实时监控ADC采样的数据,当采样的数据值小于设置的最小值或者大于设置的最大值时,单片机就会触发ADC中断 ...

  8. STM8单片机低功耗---等待(Wait)模式实现

      在平时使用单片机的时候,一般不太关心功耗的问题.但是当产品需要使用电池供电的话,那么功耗问题就要必须重视起来.那么如何降低单片机的功耗呢?STM8官方资料上给我们提供了以下几点建议:   如果项目 ...

  9. STM8单片机 ADC模拟看门狗中文资料错误

      在调试stm8单片机的adc模拟看门狗功能时,不管怎么设置ADC_HTR和ADC_LTR寄存器的值,然后通过IAR软件单步调试时观察这两个寄存器的值都不对.   根据中文手册上看,高位寄存器存储的 ...

最新文章

  1. 信息处理进入了计算机领域,信 息 处 理 进 入 了 计 算 机 领 域 ,实 质 是 进 入 了()的 领 域 。...
  2. 腾讯云一口气发布四大新品,云原生时代将正式开启
  3. 温度补偿计算公式_钢材的基本计算公式(下)
  4. 父类子类的创建对象和实例化
  5. 如何使用计算机小学生课件,小学生计算机课件
  6. 编程语言新宠儿——Julia诞生记(转)
  7. mcgs组态软件中字体如果从左到右变化_MCGS组态软件课件-第5章.ppt
  8. 介绍NVivo 12 Mac
  9. uploadify html5 java_工作中碰到uploadify插件两个版本:HTML5和Flash
  10. 《设计模式之禅》前言
  11. 云智信短信验证码php示例
  12. GNU/Linux 初學之旅
  13. 怎么用鸿蒙os系统,鸿蒙OS2.0系统怎么降级到EMUI11 鸿蒙OS2.0系统降级到EMUI11方法...
  14. Win7下调出任务快捷栏
  15. java基础知识点整理大全
  16. JLINK SW接线方式
  17. 无缝大世界之无缝连接Terrain转mesh
  18. 年底了,骗子们也要冲业绩了
  19. 大面积无线WIFI覆盖 H3C WX3010E(AC+PoE三层交换机)+ H3C WA2620E、WA4320无线AP +华为USG6310S防火墙
  20. 服务器(vps)如何修改3389(rdp)端口

热门文章

  1. Android数据存储:Shared Preferences
  2. UML与软件建模 第五次作业
  3. XamlWriter-将对象树写入Xaml
  4. js几种数组排序及sort的实现
  5. DEVO 7E遥控器配对
  6. linux技能点七 shell
  7. Slimer软工课设日报-2016年6月30日
  8. 百度地图SDK使用注意其代理的处理
  9. EF:oracle的number类型映射为C#的boolean类型
  10. lucene的Query类型