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);
}

        

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STC8A单片机是一款高性能、低功耗的8位单片机,具有多种功能和特性。它的ADC(模数转换器)模块可以用于采集模拟信号,并将其转换为数字信号进行处理。 STC8A单片机ADC采集程序需要以下基本步骤: 1. 初始化ADC模块:配置ADC通道、参考电压以及采样时钟等参数。可以使用相应的寄存器设置来完成此任务。 2. 设置ADC输入通道:选择需要采集的模拟信号输入通道。单片机ADC模块可以有多个输入通道,通过设置相应的寄存器来选择通道。 3. 启用ADC模块:将ADC模块打开,使其处于工作状态。可以通过设置相应的寄存器来完成此任务。 4. 设置ADC采样时钟:根据需求设置ADC的采样时钟频率。采样时钟频率的选择要结合被采样信号的变化速度和所需精度来确定。 5. 开始采样:启动ADC模块进行模数转换,将模拟信号转换为数字信号。可以通过设置相应的寄存器来启动ADC转换过程。 6. 等待转换完成:等待ADC转换完成,可以通过查询相应的标志位或使用中断来实现。一旦转换完成,可以读取转换结果。 7. 处理转换结果:获取ADC转换的结果值,并进行相应的处理。可以将结果值用于后续的计算、显示或其他处理。 8. 关闭ADC模块:在不需要进行ADC采集时,应关闭ADC模块,以节省功耗。 以上是STC8A单片机ADC采集程序的基本步骤。通过合理的配置和操作,可以实现对模拟信号的精确采集和处理,满足各种应用需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值