欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 【STC库函数】Compare比较器的使用

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

2025/1/10 14:53:09 来源:https://blog.csdn.net/m0_63235356/article/details/144589196  浏览:    关键词:【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,这样看的结果就很明显了。

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com