IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STC8A单片机ADC功能使用 -> 正文阅读

[嵌入式]STC8A单片机ADC功能使用

1、概述

????????STC8系列单片机内部集成了一个12位15通道的高速ADC转换器。ADC的时钟为系统时钟的2分频的16分频的32分频到系统时钟的2分频的16分频的512分频。转换结果有2种格式:左对齐和右对齐。

????????注:ADC不能多通道同时进行,一次只能检测一个通道!

2、ADC相关的寄存器:

ADC_CONTR:ADC控制寄存器

????????低4位(ADC_CHS):ADC通道选择位。

????????????????

????????第6位(ADC_FLAG):ADC转换标志位。当完成一次AD转换后硬件会自动将这位置1并触发ADC中断,必须手动清零。

????????第7位(ADC_START):ADC转换启动控制位。写入1开始转换,转换完成后硬件自动置0.为0时无影响,即使ADC正在进行转换也不会停止。

????????第8位(ADC_POWER):ADC电源控制位。写入1ADC芯片开始供电,写入0停止供电。

ADC_CFG:ADC配置寄存器

????????低4位(SPEED):ADC时钟控制位。ADC时钟=SYSClk/2/16/SPEED.

????????????????

????????第6位(RESFMT):ADC转换结果控制位。为0时,转换结果左对齐。ADC_RES储存转换结果的高8位,ADC_RESL的高4位存储转换结果的低4位,ADC_RESL的低4位为0;为1时转换结果右对齐。ADC_RES的高4位为0,低4位储存转换结果的高4位。ADC_RESL储存转换结果的低8位。

ADC_RES和ADC_RESL:转换结果储存寄存器。

3、转换步骤:

????????首先ADC通道设置为高阻输入模式。

????????????????

????????????????eg:P1M0=0X00;P1M1=0X01;//配置P1.0为高阻输入模式。

????????然后开启AD转换器的电源、并且选定ADC转换通道。通过配置ADC_CONTR的值来控制。

????????????????eg:ADC_CONTR=0x80;//开启ADC电源,同时选定转换通道为P1.0;

????????配置ADC转换的时钟、数据储存格式。通过配置ADC_CFG的值来控制。

????????????????eg:ADC_CFG=0x0f;//设置转换结果左对齐,同时ADC时钟为系统时钟的2分频的16分频的512分频;

????????开始进行ADC转换。将ADC_CONTR寄存器的第7位置1即可。

????????????????eg:ADC_CONTR=ADC_CONTR|0x40;//通过或运算将ADC_CONTR寄存器的第7位置1而不改变其它位的值。

????????等待转换ADC完成。通过ADC_CONTR寄存器的第6位来判断是否转换完成。转换完成时这个位为1;

????????????????eg:while(!(ADC_CONTR&0X20));//转换未完成时,第6位为0,与运算后结果为0,取反后为1。转换完成后,第6位为1,与运算后结果为0x20,取反后为0;

????????清除转换标志位。将ADC_CONTR寄存器的第6位置0。

????????????????eg:ADC_CONTR=ADC_CONTR&0x9f;//进行与运算,0xdf的第6位和第7位为0,与运算以后的值第6位和第7位一定为0。其余6位如果原来为1依旧为1,原来为0依旧为0。

????????读取转换结果。保存ADC_RES和ADC_RESL寄存器的值,保存操作为ADCH_Value=ADC_RES ;? ADCL_Value=ADC_RESL; 保存后可以根据个人对寄存器清0,清零操作为:ADC_RES=0;ADC_RESL=0。

至此一次ADC转换就进行完成了。

注:在开始进入等待ADC转换结束之前可以先进行一段延时,如延时两个机器周期(_nop_();)

4、范例程序:

#include"main.h"
#include "intrins.h"

unsigned char ADCH_Value;
unsigned char ADCL_Value;

void main(void)
{
	P1M0 = 0x00;                                //设置P1.1为ADC口
    P1M1 = 0x02;
    ADC_CONTR = 0x81;                           //使能ADC模块
    ADCCFG = 0x0f;                              //设置ADC时钟为系统时钟/2/16/16,右对齐
	ADC_CONTR |= 0x40;                      //启动AD转换
    _nop_();
    _nop_();
    while (!(ADC_CONTR & 0x20));            //查询ADC完成标志
    ADC_CONTR = ADC_CONTR & 0x9f;			//清除ADC完成标志
	ADCH_Value=ADC_RES;						//保存ADC转换的值
	ADCL_Value=ADC_RESL;
	ADC_RES=0;								//寄存器清零
	ADC_RESL=0;
	while(1);
}

????????

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 19:05:27  更:2022-01-30 19:06:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:27:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码