单片机
返回首页

12.STC15W408AS单片机比较器

2022-08-03 来源:csdn

一、比较器内部结构

STC15W408AS单片机内置比较器功能。的比较器内部规划如下图所示:

比较器正极输入端CMP+电平可以与比较器负极输入端CMP-的电平进行比较,也可以与内部BandGap参考电压(1.27V附近)进行比较。


二、STC15W系列与比较器相关的特殊功能寄存器

2.1 比较器控制寄存器1:CMPCR1

CMPCR1 : 比较器控制寄存器1

CMPEN:比较器模块使能位


        CMPEN=1,使能比较器模块;


        CMPEN=0,禁用比较器模块, 比较器的电源关闭。


在 CMPEN为1的情况下:


当比较器的比较结果由LOW变成HIGH时, 若是PIE被设置成1, 那么内建的某一个


叫做CMPIF_p的寄存器会被设置成1;


当比较器的比较结果由HIGH变成LOW时, 若是NIE被设置成1, 那么内建的某一个


叫做CMPIF_n的寄存器会被设置成1;


当CPU 去读取 CMPIF 的数值时, 会读到 (CMPIF_p || CMPIF_n);


当CPU对CMPIF写0后, CMPIF_p 以及 CMPIF_n 都会被清除为0 .


而中断产生的条件是 [ (EA==1) && (((PIE==1)&&(CMPIF_p==1)) || ((NIE==1)&&(CM


PIF_n==1))) ]CPU接受中断后, 并不会自动清除此CMPIF标志, 用户必须用软件写”0”去清除它。


PIE: 比较器上升沿中断使能位( Pos-edge Interrupt Enabling)


        PIE = 1, 使能比较器由LOW变HIGH的事件 设定CMPIF_p/产生中断;


        PIE = 0, 禁用比较器由LOW变HIGH的事件 设定CMPIF_p/产生中断。


NIE: 比较器下降沿中断使能位 ( Neg-edge Interrupt Enabling)


        NIE = 1, 使能比较器由HIGH变LOW的事件 设定CMPIF_n/产生中断;


        NIE = 0, 禁用比较器由HIGH变LOW的事件 设定CMPIF_n/产生中断。


PIS: 比较器正极选择位


        PIS = 1, 选择ADCIS[2:0] 所选择到的 ADCIN 做为比较器的正极输入源


        PIS = 0,选择外部P5.5为比较器的正极输入源


NIS: 比较器负极选择位


        NIS = 1,选择外部管脚P5.4为比较器的负极输入源


        NIS = 0,选择内部BandGap电压BGV为比较器的负极输入源


CMPOE:比较结果输出控制位


        CMPOE = 1,使能比较器的比较结果输出到P1.2;


        CMPOE = 0, 禁止比较器的比较结果输出


CMPRES:比较器比较结果 (Comparator Result)标志位


        CMPRES = 1,CMP+的电平高于CMP-的电平(或内部BandGap参考电压的电平);


        CMPRES = 0,CMP+的电平低于CMP-的电平(或内部BandGap参考电压的电平)


此 bit 是一个”只读(read-only)”的bit ; 软件对它做写入的动作没有任何意义。软件所读到的结果


是“经过ENLCCTL控制后的结果”, 而非Analog比较器的直接输出结果。


2.2 比较器控制寄存器2:CMPCR2

比较器控制寄存器2

INVCMPO:比较器输出取反控制位 (Inverse Comparator Output)


        INVCMPO = 1,比较器取反后再输出到P1.2;


        INVCMPO = 0,比较器正常输出。


比较器的输出, 采用“经过ENLCCTL控制后的结果”, 而非Analog比较器的直接输出结果。


DISFLT:去除比较器输出的 0.1uS Filter


        DISFLT = 1, 关掉比较器的输出0.1uS Filter (可以让比较器速度有少许提升);


        DISFLT = 0, 比较器的输出有0.1uS 的 Filter。


LCDTY[5:0]:比较器输出端 Level-Change control的 filter 长度(Duty)选择


bbbbbb:=


当比较器由LOW变HIGH, 必须侦测到该后来的HIGH持续至少bbbbbb个时钟, 此芯片线


路才认定比较器的输出是由LOW转成HIGH; 如果在bbbbbb个时钟内, Analog比较器的输


出又回复到LOW, 此芯片线路认为什么都没发生, 视同比较器的输出一直维持在LOW;


当比较器由HIGH变LOW, 必须侦测到该后来的LOW持续至少bbbbbb个时钟, 此芯片线


路才认定比较器的输出是由HIGH转成LOW; 如果在bbbbbb个时钟内, Analog比较器的输


出又回复到HIGH, 此芯片线路认为什么都没发生, 视同比较器的输出一直维持在HIGH.


若是设定成 000000, 代表没有 Level-Change Control。

三、比较器测试程序

#include 'stc15.h'

void CmpInit();

 

void main()

{

CmpInit();

EA = 1;    // CPU开放中断

while (1);

}

// 初始化比较器模块

void CmpInit()

{

// P5.5为比较器正极

// P5.4为比较器的负极

// P1.2为比较器的结果输出口

CMPCR1 = 0; // 初始化比较器

CMPCR1 |= 0x80;  // 使能比较器模块

CMPCR1 |= 0x02;     // 使能比较器的比较结果输出到P1.2

CMPCR1 |= 0x20;     // 使能比较器的上升沿中断

}

// 比较器中断服务函数

void cmp_isr() interrupt 21 //比较器中断向量入口

{

     CMPCR1 &= ~0x40; // 清除完成标志

     P12 = CMPCR1 & 0x01; // 将比较器结果CMPRES输出到测试口显示

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

    相关电子头条文章