STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。

连续和带缓存的连在连 换模式中,将ADC设为连续模式,该模式是通过置位 ADC_CR1寄存器的 ADON 位来启动的。
● 如果缓冲功能没有被使能
ADC_DR寄存器中同时 EOC 标志被置位。如果EOCIE 位已被置位时将产生一次中断。然后开始下一次转换。

其中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 为单片机ADC通道
通过置位ADC_CR1寄存器的ADON位来开启ADC。当第一次置位ADON时,ADC从低功耗模式唤醒。
为了启动转换必须第二次使用写指令来置位ADON位。
在转换结束时,ADC会保持在上电状态,用户只需要置位ADON位一次来启动下一次转换。
转换完成后,转换数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置位,如果EOCIE被置位将产生一个中断
ADC输入通道初始化入口参数表示通道选择
*/
void ADC_CH_Init( u8 ch )
{char l = 0;ADC_CR1  = 0x00;                    //fADC = fMASTER/2, 8Mhz  单次转换,禁止转换ADC_CR1 |= ( 1 << 1 );              //开启连续转换模式ADC_CSR  = ch;                  //控制状态寄存器 选择要 AD输入通道  如:PD2(AIN3)ADC_CR2  = 0x00;                    //默认左对齐 读数据时先读高在读低ADC_TDRL = ( 1 << ch );     //禁止相应通道 施密特触发功能 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 并开始转换
}//采集PD2电压值
u16 ReadVol_CH3( void )
{u16 voltage = 0;while( ( ADC_CSR & 0x80 ) == 0 );      //等待转换结束if( ADC_CSR & 0x80 ){ADC_CSR &= 0x7F;DATAH = ADC_DRH;                    // 读出ADC结果的高8位DATAL = ADC_DRL;                    // 读出ADC结果的低8位voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据  0--1024}return voltage;
}

连续模式通过中断方式读取数据:

#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 为单片机ADC通道
通过置位ADC_CR1寄存器的ADON位来开启ADC。当第一次置位ADON时,ADC从低功耗模式唤醒。
为了启动转换必须第二次使用写指令来置位ADON位。
在转换结束时,ADC会保持在上电状态,用户只需要置位ADON位一次来启动下一次转换。
转换完成后,转换数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置位,如果EOCIE被置位将产生一个中断
ADC输入通道初始化入口参数表示通道选择
*/
void ADC_CH_Init( u8 ch )
{char l = 0;ADC_CR1  = 0x00;                    //fADC = fMASTER/2, 8Mhz  单次转换,禁止转换ADC_CR1 |= ( 1 << 1 );              //开启连续转换模式ADC_CSR  = ch;                  //控制状态寄存器 选择要 AD输入通道  如:PD2(AIN3)ADC_CR2  = 0x00;                    //默认左对齐 读数据时先读高在读低ADC_TDRL = ( 1 << ch );        //禁止相应通道 施密特触发功能 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 并开始转换
}//采集PD2电压值
u16 ReadVol_CH3( void )
{static  u16 voltage = 0;if( ADC_flag ){ADC_flag = 0;//默认左对齐 读数据时先读高高8位 再读低8位DATAH = ADC_DRH;DATAL = ADC_DRL;voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据  0--1024};return voltage;
}//AD中断服务函数 中断号22
#pragma vector = 24                     // IAR中的中断号,要在STVD中的中断号上加2
__interrupt void ADC_Handle( void )
{ADC_CSR &= ~0x80;                   // 转换结束标志位清零  EOCADC_flag = 1;                       // ADC中断标志 置1
}

STM8 ADC转换模式-------连续模式相关推荐

  1. STM8 ADC转换模式-------连续扫描模式

    STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式. 连续扫描模式         该模式和单次扫描模式相近,只是每一次在最后通道转换完成时,一次新 ...

  2. STM8 ADC转换模式-------带缓存的连续模式

    STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式. 连续和带缓存的连在连 换模式中,将ADC设为连续模式,该模式是通过置位 ADC_CR1寄存器的 ...

  3. STM8 ADC转换模式-------单次模式

    STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式. 单次模式         在单次转换模式中,ADC仅在由ADC_CSR寄存器的CH[3:0]选 ...

  4. STM8 ADC转换模式-------单次扫描模式

    STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式. 单次扫描模式 该模式是用来转换从AIN0到 之间的一连串模拟通道,'n'是在 ADC_CSR寄 ...

  5. STM32 ADC 单次模式、连续模式、扫描模式(转载)

    ADC单通道: 要求进行一次ADC转换:配置为单次模式使能,扫描模式失能.这样ADC的这个通道,转换一次后,就停止转换. 要求进行连续ADC转换:配置为连续模式使能,扫描模式失能.这样ADC的这个通道 ...

  6. STM32 ADC 单次模式、连续模式、扫描模式

    ADC单通道: 要求进行一次ADC转换:配置为单次模式使能,扫描模式失能.这样ADC的这个通道,转换一次后,就停止转换. 要求进行连续ADC转换:配置为连续模式使能,扫描模式失能.这样ADC的这个通道 ...

  7. stm8 ADC中断采集

    1.STM8的ADC介绍 使用模拟-数字转换器将模拟电压信号转换为数字值.具有28模拟通道可用.A / D转换可以在单个或连续模式下执行. 2.ADC 主要特点 •其配置的分辨率(12bit) •模拟 ...

  8. STM32F4系列探究1——三重ADC扫描连续采样+DMA双缓冲区存储

    文章目录 前言 一.STM32F4的ADC理论知识学习 1.基础知识 2.扫描模式与连续模式 3.单ADC模式下双缓存机制的实现 4.三重同步采样模式 二.由定时器触发的单缓冲区模式 1.时钟树配置 ...

  9. GD32F303固件库开发(10)----双ADC轮询模式扫描多个通道

    GD32F303固件库开发.10----双ADC轮询模式扫描多个通道 概述 视频教学 csdn课程 样品申请 硬件准备 keil配置 使能串口 串口重定向 ADC通道设置 ADC0初始化 ADC0配置 ...

最新文章

  1. .net erp(办公oa)开发平台架构之流程服务概要介绍
  2. PowerDesigner最基础的使用方法入门学习2
  3. php 通知数据库,如何通过php通知我的iPhone应用程序名称已添加到数据库?
  4. 银监会周末突发4号文件,18年贷款比想象的要难
  5. configure: error: You need a C++ compiler for C++ support.
  6. django-一对多关系
  7. del退役了/del 滚回来了
  8. python高通滤波_图像处理之高通滤波及低通滤波
  9. html 页面加载中 请稍候,html 提示“数据在加载中,请稍后……”
  10. 句柄(handle)是什么?
  11. 初步用Echarts实现圆饼图
  12. weblogic安装以及异常解决方法【转】
  13. Hack The Box——Academy
  14. 交互式电子白板android,交互式电子白板教学应用
  15. 【CIPS 2016】(1-3章)词法、句法、语义、语篇分析(研究进展、现状趋势)
  16. Intel SGX Explained
  17. Linux下Rsync+sersync实现数据实时同步
  18. windows内核情景分析 --- DPC 目的信令点编码
  19. C语言程序设计————学习知识归纳总结(四)
  20. Android获取系统信息

热门文章

  1. linux 的FAQ
  2. 动态切换view视图viewflipper组件
  3. 《编程之美》1.9:高效率的安排见面会的一个解法
  4. C#中的数组和C++中数组的区别
  5. IndexedDB基本概念
  6. 墨刀 vs Axure RP
  7. 都说快递鸟接口好,对接快,可是为什么我搞了几个小时还没有搞完
  8. 匿名类型(C# 编程指南)
  9. ODP.NET数据访问
  10. 优先队列-二叉堆-堆排序原理-Java相关API