【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通道都需要去操作寄存器,上述代码中我有注释,可供小伙伴们参考。

相关推荐
小麦嵌入式1 小时前
FPGA入门(一):手把手教你用 Vivado 创建工程并仿真
stm32·单片机·嵌入式硬件·mcu·fpga开发·硬件架构·硬件工程
czwxkn3 小时前
PCB设计-器件:2.电感
嵌入式硬件
佳木逢钺4 小时前
从零开始:基于STM32H750的硬件设计与软件开发完整流程详解
stm32·单片机·嵌入式硬件
Deitymoon6 小时前
ESP8266——透传
单片机·网络协议·tcp/ip
zhangrelay6 小时前
云课实践速通系列-基础篇汇总-必修-通识基础和专业基础-2026--工科--自动化、电气、机器人、测控等
linux·笔记·单片机·学习·ubuntu·机器人·自动化
Deitymoon7 小时前
ESP8266——UDP传输
单片机·网络协议·udp
踏着七彩祥云的小丑7 小时前
嵌入式——认识电子元器件——光电器件系列
单片机·嵌入式硬件
羽获飞7 小时前
从零开始学嵌入式之STM32——31.高级定时器
stm32·单片机·嵌入式硬件
iCxhust10 小时前
一块电路板的自觉
单片机·嵌入式硬件·嵌入式·微机原理
学习者12345678910 小时前
Bootloader跳转APP代码流程
单片机·嵌入式硬件