当前位置:网站首页>[stc8g2k64s4] introduction of comparator and sample program of comparator power down detection
[stc8g2k64s4] introduction of comparator and sample program of comparator power down detection
2022-04-23 14:45:00 【perseverance52】
【STC8G2K64S4】 Comparator introduction and comparator power down detection example program
STC8GK2 Introduction to comparator
STC8G A comparator is integrated in the series MCU . The positive pole of the comparator can be P3.7 Port or ADC Analog input channel , The negative electrode can P3.6 Or internal port BandGap after OP After REFV voltage ( Internal fixed comparison voltage ). The application of multiple comparators can be realized through multiplexer and time-sharing multiplexing .
There is a programmable two-stage filter inside the comparator : Analog filtering and digital filtering . Analog filtering can filter out the burr signal in the comparison input signal , Digital filtering can wait for the input signal to be more stable before comparison . The comparison result can be obtained directly by reading the internal register bit , The result of the comparator can also be output to the external port in the forward or reverse direction . The comparison result is output to the external port, which can be used as trigger signal and feedback signal of external events , It can expand the application scope of comparison .
- Internal structure diagram of comparator
- Comparator related registers
- Comparator control register 1(CMPCR1)
- Comparator control register 2(CMPCR2)
- Wiring instructions
Use of comparator ( Interrupt mode )
/*STC8G2 MCU interrupt mode to obtain P36 Pin voltage value and internal voltage 1.19V Compare the voltage , Output the result to P10, When P36 Pin voltage is higher than 1.19v when , be P10 Output high level , lower than 1.19V An interrupt is triggered ,P10 Output low level */
#include "reg51.h"
#include "intrins.h"
sfr CMPCR1 = 0xe6;
sfr CMPCR2 = 0xe7;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sbit P10 = P1^0;
sbit P11 = P1^1;
void cmp() interrupt 21 using 1
{
CMPCR1 &= 0xbf;// Manually clear the interrupt flag ,1011,1111
P10 = (CMPCR1 & 0x01); // Compare the result of the comparator CMPRES Output to the test port to display
}
void main()
{
P0M0 = 0x00;// Set up a IO The port is a quasi two-way port
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P10 =0;// initial P10 The port is low
CMPCR2 = 0x00;
CMPCR2 &= ~0x80; // Comparator forward output
// CMPCR2 |= 0x80; // Comparator reverse output
CMPCR2 &= ~0x40; // Can make 0.1us wave filtering
// CMPCR2 |= 0x40; // prohibit 0.1us wave filtering
// CMPCR2 &= ~0x3f; // The result of the comparator is output directly
CMPCR2 |= 0x10; // The comparator result passes through 16 Output after de dithering the clock
CMPCR1 = 0x00;
CMPCR1 |= 0x30; // Enable comparator edge interrupt
// CMPCR1 &= ~0x20; // Disable comparator rising edge interrupt
// CMPCR1 |= 0x20; // Enable the rising edge of the comparator to interrupt
// CMPCR1 &= ~0x10; // Disable the falling edge interrupt of the comparator
// CMPCR1 |= 0x10; // Enable the falling edge of the comparator to interrupt
CMPCR1 &= ~0x08; //P3.7 by CMP+ Input foot
// CMPCR1 |= 0x08; //ADC Input pin is CMP+ Input foot
CMPCR1 &= ~0x04; // Inside 1.19V The reference signal source is CMP- Input foot
// CMPCR1 |= 0x04; //P3.6 by CMP- Input foot
// CMPCR1 &= ~0x02; // Disable comparator output
CMPCR1 |= 0x02; // Enable comparator output
CMPCR1 |= 0x80; // Enable comparator module
EA =1;
while (1)
{
}
}
Use of comparator ( A query )
If the query method is , Is in the while In the loop, the status of the corresponding register is continuously queried to determine the current comparator input pin (P37 mouth ) The voltage value of .
/*STC8G2 MCU interrupt mode to obtain P36 Pin voltage value and internal voltage 1.19V Compare the voltage , Output the result to P10, When P36 Pin voltage is higher than 1.19v when , be P10 Output high level , lower than 1.19V An interrupt is triggered ,P10 Output low level */
#include "reg51.h"
#include "intrins.h"
sfr CMPCR1 = 0xe6;
sfr CMPCR2 = 0xe7;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sbit P10 = P1^0;
sbit P11 = P1^1;
//void cmp() interrupt 21 using 1
//{
// CMPCR1 &= 0xbf;// Manually clear the interrupt flag ,1011,1111
// P10 = (CMPCR1 & 0x01); // Compare the result of the comparator CMPRES Output to the test port to display
//}
void main()
{
P0M0 = 0x00;// Set up a IO The port is a quasi two-way port
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P10 =0;// initial P10 The port is low
CMPCR2 = 0x00;
CMPCR2 &= ~0x80; // Comparator forward output
// CMPCR2 |= 0x80; // Comparator reverse output
CMPCR2 &= ~0x40; // Can make 0.1us wave filtering
// CMPCR2 |= 0x40; // prohibit 0.1us wave filtering
// CMPCR2 &= ~0x3f; // The result of the comparator is output directly
CMPCR2 |= 0x10; // The comparator result passes through 16 Output after de dithering the clock
CMPCR1 = 0x00;
CMPCR1 |= 0x30; // Enable comparator edge interrupt
// CMPCR1 &= ~0x20; // Disable comparator rising edge interrupt
// CMPCR1 |= 0x20; // Enable the rising edge of the comparator to interrupt
// CMPCR1 &= ~0x10; // Disable the falling edge interrupt of the comparator
// CMPCR1 |= 0x10; // Enable the falling edge of the comparator to interrupt
CMPCR1 &= ~0x08; //P3.7 by CMP+ Input foot
// CMPCR1 |= 0x08; //ADC Input pin is CMP+ Input foot
CMPCR1 &= ~0x04; // Inside 1.19V The reference signal source is CMP- Input foot
// CMPCR1 |= 0x04; //P3.6 by CMP- Input foot
// CMPCR1 &= ~0x02; // Disable comparator output
CMPCR1 |= 0x02; // Enable comparator output
CMPCR1 |= 0x80; // Enable comparator module
// EA =1;
while (1)
{
// CMPCR1 &= 0xbf;// Manually clear the interrupt flag ,1011,1111
P10= (CMPCR1 & 0x01); // Compare the result of the comparator CMPRES Output to the test port to display
}
}
As a power down detection , It is best to use interrupt mode , To deal with Events , take P37
As an external voltage detection port , If the internal voltage is used for comparison , Namely 1.19V As a comparative value . It is recommended to use P36
As CMP-
Input foot , Receive 3.3V
On voltage , Single chip microcomputer adopts 5V Power supply ,P37 Pin detection 5V Voltage value , When the detection voltage is lower than 3.3V when , The interrupt will be triggered , It is equivalent to increasing the reference voltage of the comparison to 3.3V, The implementation related code is as follows :CMPCR1 |= 0x04; //P3.6 by CMP- Input foot
- P36 As CMP- Enter the pin code
/*STC8G2 MCU interrupt mode to obtain P36 Pin voltage value and internal voltage 1.19V Compare the voltage , Output the result to P10, When P36 Pin voltage is higher than 1.19v when , be P10 Output high level , lower than 1.19V An interrupt is triggered ,P10 Output low level */
#include "reg51.h"
#include "intrins.h"
sfr CMPCR1 = 0xe6;
sfr CMPCR2 = 0xe7;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sbit P10 = P1^0;
sbit P11 = P1^1;
void cmp() interrupt 21 using 1
{
CMPCR1 &= 0xbf;// Manually clear the interrupt flag ,1011,1111
P10 = (CMPCR1 & 0x01); // Compare the result of the comparator CMPRES Output to the test port to display
}
void main()
{
P0M0 = 0x00;// Set up a IO The port is a quasi two-way port
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P10 =0;// initial P10 The port is low
CMPCR2 = 0x00;
CMPCR2 &= ~0x80; // Comparator forward output
// CMPCR2 |= 0x80; // Comparator reverse output
CMPCR2 &= ~0x40; // Can make 0.1us wave filtering
// CMPCR2 |= 0x40; // prohibit 0.1us wave filtering
// CMPCR2 &= ~0x3f; // The result of the comparator is output directly
CMPCR2 |= 0x10; // The comparator result passes through 16 Output after de dithering the clock
CMPCR1 = 0x00;
CMPCR1 |= 0x30; // Enable comparator edge interrupt
// CMPCR1 &= ~0x20; // Disable comparator rising edge interrupt
// CMPCR1 |= 0x20; // Enable the rising edge of the comparator to interrupt
// CMPCR1 &= ~0x10; // Disable the falling edge interrupt of the comparator
// CMPCR1 |= 0x10; // Enable the falling edge of the comparator to interrupt
CMPCR1 &= ~0x08; //P3.7 by CMP+ Input foot
// CMPCR1 |= 0x08; //ADC Input pin is CMP+ Input foot
// CMPCR1 &= ~0x04; // Inside 1.19V The reference signal source is CMP- Input foot
CMPCR1 |= 0x04; //P3.6 by CMP- Input foot
// CMPCR1 &= ~0x02; // Disable comparator output
CMPCR1 |= 0x02; // Enable comparator output
CMPCR1 |= 0x80; // Enable comparator module
EA =1;
while (1)
{
// P10= (CMPCR1 & 0x01); // Compare the result of the comparator CMPRES Output to the test port to display
}
}
版权声明
本文为[perseverance52]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231426130235.html
边栏推荐
- Find daffodils - for loop practice
- 【STC8G2K64S4】比较器介绍以及比较器掉电检测示例程序
- select 同时接收普通数据 和 带外数据
- MDS55-16-ASEMI整流模块MDS55-16
- Sword finger offer II 019 Delete at most one character to get palindrome (simple)
- 帧同步 实现
- A good tool: aardio
- 自动化的艺术
- Raised exception class eaccexviolation with 'access violation at address 45efd5 in module error
- PCIe X1 插槽的主要用途是什么?
猜你喜欢
MCU function signal generator, output four kinds of waveforms, adjustable frequency, schematic diagram, simulation and C program
UML项目实例——抖音的UML图描述
Vous ne connaissez pas encore les scénarios d'utilisation du modèle de chaîne de responsabilité?
LotusDB 设计与实现—1 基本概念
Outsourcing for four years, abandoned
ASEMI超快恢复二极管与肖特基二极管可以互换吗
A blog allows you to learn how to write markdown on vscode
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码
[jz46 translate numbers into strings]
MQ-2和DS18B20的火灾温度-烟雾报警系统设计,51单片机,附仿真、C代码、原理图和PCB等
随机推荐
你还不知道责任链模式的使用场景吗?
Model location setting in GIS data processing -cesium
capacitance
ASEMI超快恢复二极管与肖特基二极管可以互换吗
Raised exception class eaccexviolation with 'access violation at address 45efd5 in module error
一个月把字节,腾讯,阿里都面了,写点面经总结……
《JVM系列》 第七章 -- 字节码执行引擎
Do (local scope), initializer, memory conflict, swift pointer, inout, unsafepointer, unsafebitcast, success
epoll 的 ET,LT工作模式———实例程序
阿里研发三面,面试官一套组合拳让我当场懵逼
Find daffodils - for loop practice
Set up an AI team in the game world and start the super parametric multi-agent "chaos fight"
Mq-2 and DS18B20 fire temperature smoke alarm system design, 51 single chip microcomputer, with simulation, C code, schematic diagram, PCB, etc
你還不知道責任鏈模式的使用場景嗎?
A blog allows you to learn how to write markdown on vscode
UML项目实例——抖音的UML图描述
Chapter 7 of JVM series -- bytecode execution engine
[untitled]
编程哲学——自动加载、依赖注入与控制反转
GIS数据处理-cesium中模型位置设置