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

相关推荐
项目題供诗4 小时前
STM32-TIM输入捕获(十四)
stm32·单片机·嵌入式硬件
cpsss06814 小时前
Freertos的Systick_Handler重定义
单片机·嵌入式硬件
国产电子元器件5 小时前
电流传感器的输出可以直接接示波器吗?
stm32·单片机·嵌入式硬件
zlinear数据采集卡6 小时前
SPI Flash存储电路深度解析:从芯片选型到ZLinear采集卡的实战设计
c语言·嵌入式硬件·自动化·硬件架构
m0_747124537 小时前
单片机 VSCode 开发环境搭建
vscode·单片机·嵌入式硬件
嵌入式小站8 小时前
STM32 零基础可移植教程 21:1602A 并口 4 位模式,先显示 Hello
stm32·单片机·嵌入式硬件
夜月yeyue8 小时前
KCP 与 UDP 可靠传输
linux·网络·单片机·网络协议·udp·php
WIZnet8 小时前
W55RP20-EVB-MKR MicroPython 实战(14):MQTT 协议与 OneNET 平台对接
单片机·网络协议·wiznet
三佛科技-187366133978 小时前
AIP8P005B(SOP14)中微爱芯8位MCU用辉芒微FT60E112A SOP14替代
单片机·嵌入式硬件
西城微科方案开发8 小时前
LED汽车打气泵PCBA方案
单片机·嵌入式硬件