C8051F396 ADC操作

描述

C8051F396中ADC具有最大500ksps转换速度,10bit逐次逼近的寄存器

配置

时钟配置:
ADC时钟根据系统时钟分频确定,通过配置ADC0CF 寄存器的 AD0SC bits来确定
对齐方式:
左对齐或右对齐,通过配置ADC0CN寄存器的 AD0LJST bits来确定,一般右对齐

AD0LJST = 0:右对齐
AD0LJST = 1:左对齐

数据存放位置:
ADC0H与ADC0L寄存器存放数据的高低位

多种开启转换方式

配置 ADC0CN寄存器AD0CM [2:0] 位

000: ADC0CN寄存器AD0BUSY位置一触发
001:定时器0溢出触发
010:定时器2溢出触发
011:定时器1溢出触发
100: CNVSTR输入引脚上升沿触发 //用户配置IO,PS:跳过交叉编译器
101:定时器3溢出触发
110:定时器4溢出触发
111:定时器5溢出触发

用户可自定义ADC采集,通过软件控制向ADC0CN寄存器AD0BUSY位写1,在采集期间,AD0BUSY位状态为1,采集完成后自动复位为0;
可配置AD0BUSY位下降沿触发中断;ADC中断标志AD0INT;
在使用轮询ADC时,应启用ADC中断标志;

采集保持模式

ADC0CN寄存器AD0TM位控制,除了在转换期间,ADC输入被持续采集;

AD0TM 置1:ADC0工作在低功耗采集保持模式下,在开始转换前有三个SAR 时钟周期来采集;
当使用 用户配置IO CNVSTR信号在低功率采集模式下启动转换时,ADC0仅在CNVSTR较低时进行采集,在CNVSTR IO上升沿开始转换;
当设备处于低功耗待机或休眠模式时,跟踪被关闭;
在这里插入图片描述
在这里插入图片描述

PS:当AMUX设置频繁更改时,低功率采样-保持模式也很有用

需求时间

在每次转换之前都需要一个最小的采集时间,以确保执行精确的转换;采集时间由AMUX0电阻,ADC采样电容,外部电源电阻决定;最小采集时间为三个SAR 时钟周期

PS:在低功率采集模式下,每次开始转换前用三个SAR 时钟周期采集

时间计算:
在这里插入图片描述

SA:采集精度
RTOTAL :AMUX0 电阻和所有外部电阻的和
n :ADC的分辨率(10)

可编程窗口检测

ADC可编程窗口检测器持续地将ADC0输出寄存器与用户编程的阈值进行比较,并在检测到所需条件时通知系统,非常适合中断系统,节省代码空间和CPU消耗,并提供更快的系统响应时间。
窗口检测中断标志(ADC0CN寄存器中的AD0WINT位)也可以在轮询模式中使用;
ADC中大于(ADC0GTH, ADC0GTL)和小于(ADC0LTH, ADC0LTL)寄存器存储比较值,窗口检测中断标志可以配置为在设定的范围内或范围外置位,取决于ADC的小于寄存器和大于寄存器

寄存器

ADC配置寄存器 :ADC0CF在这里插入图片描述
ADC高字节数据存储寄存器:ADC0H
在这里插入图片描述
ADC低字节数据存储寄存器:ADC0L
在这里插入图片描述
ADC控制寄存器:ADC0CN
在这里插入图片描述

函数
void ADC0_Init (void)
{
   ADC0CN = 0x02;                      //关闭ADC,普通采集模式
                                       // 定时器2溢出开始转换
   REF0CN = 0x0B;                      // VDD 作为ADC的电压参考
                                       // 使能片上参考缓冲, 在VREF引脚驱动内部电压基准

   AMX0P = 0x07;                       // ADC0 positive input = P1.7
   AMX0N = 0x11;                       // ADC0 negative input = GND
                                       // i.e., single ended mode
                                       
   ADC0CF = ((SYSCLK/8000000)-1)<<3;   // Set SAR clock to 8MHz
   ADC0CF |= 0x00;                     // 右对齐
   
   EIE1 |= 0x08;                       // 开启ADC采集完成中断

   ADC0CN_ADEN = 1;                    // 开启ADC
}
void Timer2_Init (void)
{
   TMR2CN  = 0x00;                      // 关闭 Timer2; 清除中断 TF2;
                                        // Use SYSCLK as timebase, 16-bit
                                        // 自动重装载
   CKCON  |= 0x10;                      // Select SYSCLK for timer 2 source
   TMR2RL  = 65535 - (SYSCLK / 10000);  // 初始化重装载值为10 us
   TMR2    = 0xffff;                    // 立即重新加载
   TMR2CN_TR2     = 1;                  //开启 Timer2
}
void PORT_Init (void)
{
   XBR0     = 0x01;                    // 开启USART
   XBR1     = 0x40;                    // Enable crossbar and weak pull-ups
   P0MDOUT |= 0x10;                    // TX引脚推挽输出
   P0MDIN &= ~0x80;                    // P0.7 模拟输入
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mapoplus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值