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

单次模式
        在单次转换模式中,ADC仅在由ADC_CSR寄存器的CH[3:0]选定的通道上完成一次转换。该模式是在当CONT位为0时通过置位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_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 ){DATAH = ADC_DRH;                    // 读出ADC结果的高8位DATAL = ADC_DRL;                    // 读出ADC结果的低8位voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据  0--1024ADC_CR1 = ADC_CR1 | 0x01;          //再次将CR1寄存器的最低位置1  启动下一次转换ADC_CSR &= 0x7F;};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_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 并开始转换
}
//采集PD3电压值
u16 ReadVol_CH3( void )
{static  u16 voltage = 0;if( ADC_flag ){ADC_flag = 0;voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据  0--1024ADC_CR1 = ADC_CR1 | 0x01;          //再次将CR1寄存器的最低位置1  启动下一次转换};return voltage;
}
//AD中断服务函数 中断号22
#pragma vector = 24                     // IAR中的中断号,要在STVD中的中断号上加2
__interrupt void ADC_Handle( void )
{ADC_CSR &= ~0x80;                   // 转换结束标志位清零  EOC//默认左对齐 读数据时先读高高8位 再读低8位DATAH = ADC_DRH;                    // 读出ADC结果的高8位DATAL = ADC_DRL;                    // 读出ADC结果的低8位ADC_flag = 1;                       // ADC中断标志 置1
}

STM8 ADC转换模式-------单次模式相关推荐

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

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

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

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

  3. STM8 ADC转换模式-------连续模式

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

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

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

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

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

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

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

  7. STM8学习笔记----PWM单脉冲模式输出

    先看看官方资料对单脉冲模式的介绍 下面看C代码的实现 void PWM_GPIO_Init( void ) {PC_DDR_DDR6 = 1; //输出管脚 PC6 TIM1_CH1PC_CR1_C1 ...

  8. STM32之ADC模数转换器单通道。

    ADC模数转换器 ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁. 12位逐次 ...

  9. 瑞萨e2studio(7)----ADC通过单次扫描多通道方式采样

    瑞萨e2studio.7--ADC通过单次扫描多通道方式采样 概述 视频教学 csdn课程 样品申请 硬件准备 开发板 新建工程 工程模板 保存工程路径 芯片配置 工程模板选择 时钟设置 UART配置 ...

最新文章

  1. 特征工程(二)TfidfVectorizer
  2. 美国动物园小鹿“撞脸”韩国艺人 粉丝众筹为其取名
  3. PAT-乙级-1062 最简分数
  4. ApacheCN 2019Q1 总结
  5. 微软拆分 VS Code 中 Python 扩展,部分功能可独立下载
  6. 交互式、非交互式,登录式、非登录式Shell
  7. Redis bind用法
  8. android wifi 抓sniffer log
  9. 浏览器禁用第三方Cookie
  10. TinyOS数据帧与CC2420 Radio Stack解读
  11. 药品大数据公司都有哪些?
  12. wand(wead and)算法简介与改造,修改为店铺与品牌的关键字搜索
  13. 基于ibeacons三点定位(微信小程序)
  14. svn修改offline状态
  15. vue动态计算表格列两个时间的差值
  16. 左右手材料,左右手传输线
  17. 详谈!抖音怎么快速申请企业蓝V认证
  18. Clamav安装及基本使用教程
  19. 计算机组成原理设计,计算机组成原理课程设计
  20. android 开发 关机没有关机铃声动画 显示正在关机pop框,关机 – Pop's Blog

热门文章

  1. PinPhoto On OS X
  2. 解剖C语言---数据类型转换与数据运算集锦
  3. 《windows核心编程》–Windows内存体结构(一)
  4. objective-c 关键字和概念
  5. html语言的字体设置
  6. 函数式编程(4)-装饰器
  7. java的第一个程序 ----Hello World
  8. linux下面的j2sdk的安装和配置过程
  9. 【maven】新建一个maven项目的基本配置
  10. 设计模式的七大设计原则:其三:依赖倒转原则