STC15比较器介绍以及比较器中断方式作为掉电检测示例程序

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STC15比较器介绍以及比较器中断方式作为掉电检测示例程序相关的知识,希望对你有一定的参考价值。

【STC15】比较器介绍以及比较器中断方式作为掉电检测示例程序


比较器介绍

  • STC15W201S系列、STC15W404S系列及STC15W1K16S系列的比较器内部规划如下图所示:
  • 有ADC的单片机STC15W401AS系列及STC15W4K32S4系列的比较器内部规划如下图所示:
  • 比较器正极输入端CMP+电平可以与比较器负极输入端CMP-的电平进行比较,也可以与内
    部BandGap参考电压(1.27V附近)进行比较。
  • STC15W系列与比较器相关的特殊功能寄存器(STC15W SFRs associated with comparator)

比较器控制寄存器1:CMPCR1


比较器控制寄存器2:CMPCR2

实验对象

使用的芯片型号:STC15W408AS单片机,使用可调电位器接入到P5.5口,作为单片机电压检测口,P5.5口的输入电压与内部BandGap参考电压(1.27V附近)进行比较,当外部输入的电压P5.5口低于内部参考电压1.27V时将产生中断,让P 1.0口的led灯点亮。

示例代码

结合上面的比较器内部结构图看代码就比较直接容易理解。

#include "reg51.h"
#include "intrins.h"
sfr CMPCR1 = 0xE6; //比较器控制寄存器1
#define CMPEN 0x80 //CMPCR1.7 : 比较器模块使能位
#define CMPIF 0x40 //CMPCR1.6 : 比较器中断标志位
#define PIE 0x20 //CMPCR1.5 : 比较器上升沿中断使能位
#define NIE 0x10 //CMPCR1.4 : 比较器下降沿中断使能位
#define PIS 0x08 //CMPCR1.3 : 比较器正极选择位
#define NIS 0x04 //CMPCR1.2 : 比较器负极选择位
#define CMPOE 0x02 //CMPCR1.1 : 比较结果输出控制位
#define CMPRES 0x01 //CMPCR1.0 : 比较器比较结果标志位
sfr CMPCR2 = 0xE7; //比较器控制寄存器2
#define INVCMPO 0x80 //CMPCR2.7 : 比较结果反?输出控制位
#define DISFLT 0x40 //CMPCR2.6 : 比较器输出端虑波使能控制位
#define LCDTY 0x3F //CMPCR2.[5:0] : 比较器输出的区抖时间控制
sbit LED = P1^0; //测试脚

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

    CMPCR1 &= ~CMPIF; //清除完成标志
    LED = (CMPCR1 & CMPRES); //将比较器结果CMPRES输出到测试口显示

void main()

    CMPCR1 = 0; //初始化比较器控制寄存器1
    CMPCR2 = 0; //初始化比较器控制寄存器2
    CMPCR1 &= ~PIS; //选择外部管脚P5.5(CMP+)为比较器的正极输入源
// CMPCR1 |= PIS; //选择ADCIS[2:0]所选的ADCIN为比较器的正极输入源
    CMPCR1 &= ~NIS; //选择内部BandGap电压BGV为比较器的负极输入源
// CMPCR1 |= NIS; //选择外部管脚P5.4(CMP-)为比较器的负极输入源
    CMPCR1 &= ~CMPOE; //禁用比较器的比较结果输出
// CMPCR1 |= CMPOE; //使能比较器的比较结果输出到P1.2
    CMPCR2 &= ~INVCMPO; //比较器的比较结果正常输出到P1.2
// CMPCR2 |= INVCMPO; //比较器的比较结果取反后输出到P1.2
    CMPCR2 &= ~DISFLT; //不禁用(使能)比较器输出端的0.1uS虑波电路
// CMPCR2 |= DISFLT; //禁用比较器输出端的0.1uS虑波电路
    CMPCR2 &= ~LCDTY; //比较器结果不去抖动,直接输出
// CMPCR2 |= (DISFLT & 0x10); //比较器结果在经过16个时钟后再输出
    CMPCR1 |= PIE;
   //使能比较器的上升沿中断
// CMPCR1 |= NIE; //使能比较器的下降沿中断

    CMPCR1 |= CMPEN; //使能比较器

    EA = 1;

    while (1);



  • 使用STC15头文件程序示例
#include "STC15Wxx.H"
//#include "STC15Fxxxx.H"
sbit Led =P1^0;
void main()

	CMPCR1 = 0xb0;//1011,0000 开启比较器中断
	CMPCR2 = 0x00;//0000 0000 比较器只延时0.1us
	EA =1;
	while(1);

void cmp() interrupt 21 using 1

	CMPCR1 &= 0xbf;//清除中断标志,1011,1111
Led = (CMPCR1 & 0x01); //将比较器结果CMPRES输出到测试口显示


以上是关于STC15比较器介绍以及比较器中断方式作为掉电检测示例程序的主要内容,如果未能解决你的问题,请参考以下文章

STC8G2K64S4比较器介绍以及比较器掉电检测示例程序

STC15系列PWM中断控制寄存器介绍以及PWM相关示例

STC15单片机 - 按键单击和长按检测(外部中断)

STC15中断系统介绍

存储管理:

STC15单片机利用PCA在扩展外部中断和定时器以及脉宽测量的应用示例