MSP430教程13:MSP430单片机比较器A模块

2020-03-26来源: eefocus关键字:MSP430  单片机  比较器A模块

比较器A模块 
以下图可以看出比较器A的结构大概可以分4部分构成,分别为模拟输入,比较器A核心,低通虑波器,基准电压部分和中断部分组成。


首先,整个比较器A的工作必需由CAON位置为1时才能工作的,此位属CACTL1控制寄存器。单片机上电时此位是为0的,也就是说比较器是不工作的。
以下大概讲述几个部分电路的功能和一些相关信息。

模拟输入电路:
外部模拟引脚信号CA0,CA1(正负端)可以分别由P2CA0,P2CA1位控制开或关。经过软件的设置可以分别与内部的几个基准电压进行比较(0.5VCC,0.25VCC,三极管门值电压)或外部其中的电压进行比较。

应用的硬件比较可以分为以下三种组合:
两个外部引脚输入信号进行比较
其中一个外部引脚信号与内部的0.5VCC或0.25VCC比较
其中一个外部引脚信号与内部基准电压比较

参考电压发生器
参考电压电路是可以由CARSEL,CARERF0,CARERF1位来控制电压的产生。通过软件设置可以选择几种电压输出到比较器的输入中作为比较,当然此参考电压也可以通过单片机的引脚往外部提供参考电压之用。

比较器A核心
比较器CAON位控制开关,CAEX位控制位控制方向。

低通虑波器
低通虑波器只需一个CAF位来控制此虑波器的功能开与关。此虑波器功能是用于消除比较器输出信号的毛剌,以保证信号的质量和中断请求的可靠性。

中断请求
比较器A模块是具有中断功能的,如比较器功能CAIE中断允许开了,在CAIF信号产生时将生产中断(当然GIE要为1时)。比较器A模块是具有中断独立向量的,是一个单独的中断,CUP接受请求后会硬件自动清除中断标志位CAIFG。
        

比较器模块相关寄存器说明
CACTL1 比较器控制寄存器1

   
CAEX: 控制内部比较器A的输入信号和输出信号的方向

CARSEL:控制内部参考电压加到比较器A的正输入端还是负输入端 
由结构图可以看出,CAEX,CARSEL在不同设置时,比较器A输入端的所加的参考电压是有不同的.


请参考以下列表:
----------------------------------- 
CARSEL   CAEX     参考电压接入端
  0        0       内部参考源加到比较器的正端
  0        1       内部参考源加到比较器的负端 
  1        0       内部参考源加到比较器的负端 
  1        1       内部参考源加到比较器的正端

 

CAREF1, CAREF0 选择参考源:
 0 使用外部参考
 1 选择0.25VCC为参考电压
 2 选择0.5VCC为参考电压
 3 选择二极管电压为参考电压,须参见具体IC的资料

 

CAON: 控制比较器A的打开与关闭
 0 关闭比较器工作
 1 打开比较器工作

 

CAIES: 中断边沿触发模式选择
 0 上升沿使中断标志CAIFG置位
 1 下降沿使中断标志CAIFG置位

CAIE:比较器中断允许
 0 禁止中断
 1 允许中断

 

CAIFG: 比较器中断标志
 0 没有中断请求
 1 有中断请求标志信号



CACTL2 比较器控制寄存器2


   
P2CA1:控制输入端CA1
 0 外部引脚信号不与比较器A连接
 1 外部引脚信号与比较器A连接

 

P2CA0:控制输入端CA0
 0 外部引脚信号不与比较器A连接
 1 外部引脚信号与比较器A连接

 

CAF: 选择比较器输出端是否经过RC低通滤波器
 0 开通RC低通滤波器
 1 直通信号

 

CAOUT: 比较器A输出的信号
 0 CA0小于CA1
 1 CA0大于CA1


CAPD 端口禁止寄存器
比较器A模块的输入输出与IO口共用引脚,可以控制IO端口输入缓冲器的通断开关.CAPD控制位初始化为0,则端口输入缓冲器有效.当相应位为1时,端口输入缓冲器无效。

程序范例:
#include
void main (void)
 {
  WDTCTL = WDTPW + WDTHOLD;     // 停止WDT
  CAPD |= 0x08;           // 断开与IO端口输入
  CACTL2 = P2CA0;          // 设置P2.3为+comp
  CCTL0 = CCIE;           // CCR0 允许中断
  TACTL = TASSEL_2 + ID_3 + MC_2;  // SMCLK/8,计数模式
  _EINT();             // 开总中断

 

 while (1) // 循环
 {
  CACTL1 = 0x00;          // 没有参考电压
  _BIS_SR(LPM0_bits);        // 进入LPM0
  CACTL1 = CAREF0 + CAON;      // 0.25*Vcc=P2.3, 比较器开
  _BIS_SR(LPM0_bits);        // 再次进入LPM0
  CACTL1 = CAREF1 + CAON;      // 0.5*Vcc=P2.3, 比较器开
  _BIS_SR(LPM0_bits);        // 再次进入 LPM0
  CACTL1 = CAREF1 + CAREF0 + CAON;  // 0.55V on P2.3,比较器开
  _BIS_SR(LPM0_bits);        // 再次进入LPM0
  }
 }

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
 _BIC_SR_IRQ(LPM0_bits);       //退出LMP0模式
}

关键字:MSP430  单片机  比较器A模块 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492648.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430教程17:MSP430单片机开发总结
下一篇:MSP430教程12:MSP430单片机MSP430定时器

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430在CCS开发环境下的内存分配
这样的分析,我们很自然地想到,如果这些字符串常量能够离程序所在的区域“近一些”,那么这个问题就能解决了。如何来控制字符串常量所在的存储区域呢?这里我们需要了解一下cmd文件。以MSP430F6638的cmd文件为例,它主要包含了两个信息。一个是关于MSP430F6638的内存映射信息,如下图所示。利用红色的区域中的信息,我们也可以计算出,6638的RAM是从0x2400开始,大小为16K,USBRAM是从0x1c00开始,大小为2k,FLASH分为两个区域总的大小为256K。另一个是关于变量、代码等分配的存储位置。如下如所示。我们需要重点关注的是红色区域内的信息。观察一下。我们不难理解红色区域内代码的含义,是将.bss段、.data段
发表于 2020-03-09
MSP430在CCS开发环境下的内存分配
msp430g2553单片机学习心得
四年前学习的TI的Msp430g2553这款单片机,最近在整理学习记录的时候把当时的学习心得重新写下来。学习单片机最早是学习的51系列的,看的也是广为推崇的郭天祥郭老师的《十天学习单片机》,个人觉得单片机学习还是最先攻克51的。学习好51之后,对单片机操作有了基本的认识,再学习其他款单片机自然是能融会贯通。TI的430系列主打是低功耗,它的技术文档和Dome程序都非常详细,尤其是技术文档真让人有种膜拜的感觉,在每个模块的时候还有个框图,对理解模块内设置非常有帮助,我当时还特意打印了。当时它的User's Guide还没有中文版,如果实在看不懂,可以借鉴F149系列的(这款有人翻译了中文版本)。个人觉得在学习g2553这款
发表于 2020-03-09
学习MSP430G2553总结
个人感觉TI做的这块430就是一坨屎,内部时钟根本不稳,而且连datesheet都没有,但作为比赛指定的东西我们还是学了,这个连51都不如的16位单片机费了我四天时间把内部的模块给调了一遍,但是我调IIC时一直调不出来连时钟都没有,估计是做这块垃圾是连这个模块都没有吧,而且还写的那么复杂,连份像样的技术文档都没有,看的是别的技术文档,真是蛋疼无比,好了牢骚就发这么多,下面开始讲讲这块片子。首先介绍下MSP430G2553的时钟,这块芯片的时钟源是四个,时钟线是4个;时钟源我们就不说了,一般都是默认的选择内部的DCO作为时钟源,然后通过一系列的嫁接到MCLK SMCLK上,至于为什么这块芯片上不用锁相环的问题我深表不解,这个解释
发表于 2020-03-09
学习MSP430G2553总结
msp430 timerA interrupt
#include <msp430x24x.h> #define uchar unsigned char#define uint unsigned intuchar   table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar  position[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf
发表于 2020-03-09
MSP430:AD10
使用的MSP430G2553,为AD10,正常有8路输出,P1.0-P1.7为A0-A7有七个寄存器,参考电压可以是VCC或者内部参考电压1.5V或者2.5V参考时钟可以是内部ADC10OSC最高转换速率达200ksps转换方式四种:单通道单次,序列通道单次,单通道多次,序列通道多次。多次转换时候会用到DTC功能防止数据还没被取出就被覆盖单通道的实例程序,开启的为通道5,也就是P1.5 1 void AD_Channel5_Config(void) 2 { 3   /* Configure ADC  Channel */ 4   
发表于 2020-03-09
MSP430:AD10
MSP430低功耗设置小结
设置低功耗模式也就是对SR状态寄存器当中的位进行操作SCG0.SCG1,CPUOFF,OSCOFF等位进行操作如果我们要设置低功耗模式,那一般来说也是要设置 中断的,在中断函数中打开CPU来执行我们想要执行的程序大部分时间CPU是处于OFF状态的,这样可以达到降低功耗的目的void main{    unsigned char i;    BCSCTL1|=DIVA_2;    WDTCTL=_WDT_ADLY_1000;    IE1|=WTDIE;    while(1)    {    &
发表于 2020-03-09
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved