【STC库函数】Compare比较器的使用

如果我们需要比较两个点的电压,当A点高于B点的时候我们做一个操作,当B点高于A点的时候做另一个操作。

我们除了加一个运放或者比较器,还可以直接使用STC内部的一个比较器。

正极输入端可以是P37、P50、P51,或者从ADC的十六个通道里选一个,但是要开ADC。

负极输入端可以是P36或者内部的1.19V。

中间可以选择模拟滤波和数字滤波。

比较的结果可以选择从P34或者P41输出,同时还可以有上升沿和下降沿的中断,也可以通过读取CMPRES来查询结果,是一个只读位。

接下来直接看库函数。

把这个文件包含进工程里STC32G_Compare.c,如果需要中断的话这个STC32G_Compare_Isr.c也包含进去。

用下面的函数对比较器进行初始化。

结构体的成员从上往下依次是

EN使能,我们直接给ENABLE。

P_Select正极输入端,有四个可以选择。

如果用ADC的话,记得把ADC_CONTR这个寄存器里的ADC电源和模拟通道输入给配置了,等等示例代码里我会演示。

N_Select负极输入端,有两个可以选择。

Outpt_EN输出使能,我们给ENABLE。

InvCMPO输出取反,这个看具体情况选择ENABLE或者DISABLE。

100nsFilter是否开启模拟滤波,一般是开启ENABLE。

OutDelayDuty数字滤波延时的时间周期,范围是0~63,官方示例代码里是16。

如果我们需要中断的话,在NVIC里选择上升沿或者下降沿,也可以用位或|来都要。

下面的代码中,我使用的ADC通道0作为比较器输入的正极,负极就用的内部1.19V。

ADC通道0是P10,我接了个光敏电阻,它是光照强度越大,电压就越小,反之越大。所以就是光强到了一定程度,电压小于1.19V了,比较器输出低电平,光强弱到一定程度,电压大于1.19V,那么比较器输出高电平,我在输出端接了个LED,这样看的结果就很明显了。

cpp 复制代码
#include <STC32G.H>
#include "STC32G_GPIO.h"
#include "STC32G_Delay.h"
#include "STC32G_Compare.h"

void GPIO_Init(void){
    P1_MODE_IN_HIZ(GPIO_Pin_0);
    P3_MODE_IO_PU(GPIO_Pin_4);
}

void Compare_Init(void){
    CMP_InitDefine initer;
    initer.CMP_100nsFilter = ENABLE;        // 开启100ns模拟滤波
    initer.CMP_EN = ENABLE;                 // 比较器使能
    initer.CMP_InvCMPO = DISABLE;           // 不取反输出
    initer.CMP_N_Select = CMP_N_GAP;        // 选择1.19V
    initer.CMP_OutDelayDuty = 16;           // 数字滤波16个时钟周期
    initer.CMP_Outpt_En = ENABLE;           // 输出使能
    initer.CMP_P_Select = CMP_P_ADC;        // 选择ADC模拟通道
    CMP_Inilize(&initer);

    ADC_CONTR = 0x80;       // 1000 0000 开启ADC电源,选择通道0  P10
    CMPO_S = 0;             // 选择比较器输出引脚为P34
}


void main(void){
    WTST = 0;		//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXSFR();		//扩展SFR(XFR)访问使能 
    CKCON = 0;      //提高访问XRAM速度
    
    GPIO_Init();
    Compare_Init();

    while(1){

    }
    return ;
}

需要注意的是,我们选择比较器输出端引脚以及打开ADC和选择ADC通道都需要去操作寄存器,上述代码中我有注释,可供小伙伴们参考。

相关推荐
cjy_Somnr1 小时前
keil5报错显示stm32的SWDIO未连接不能烧录
stm32·单片机·嵌入式硬件
Lay_鑫辰2 小时前
西门子诊断-状态和错误位(“轴”工艺对象 V1...3)
服务器·网络·单片机·嵌入式硬件·自动化
无垠的广袤4 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
雲烟6 小时前
嵌入式设备EMC安规检测参考
网络·单片机·嵌入式硬件
泽虞6 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
田甲6 小时前
【STM32】 数码管驱动
stm32·单片机·嵌入式硬件
up向上up7 小时前
基于51单片机垃圾箱自动分类加料机快递物流分拣器系统设计
单片机·嵌入式硬件·51单片机
纳祥科技16 小时前
Switch快充方案,内置GaN,集成了多个独立芯片
单片机
单片机日志17 小时前
【单片机毕业设计】【mcugc-mcu826】基于单片机的智能风扇系统设计
stm32·单片机·嵌入式硬件·毕业设计·智能家居·课程设计·电子信息
松涛和鸣18 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法