当前位置:网站首页>[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
边栏推荐
- One of the advanced applications of I / O reuse: non blocking connect -- implemented using select (or poll)
- LM317的直流可调稳压电源Multisim仿真设计(附仿真+论文+参考资料)
- Detailed explanation of C language P2 selection branch statement
- Raised exception class eaccexviolation with 'access violation at address 45efd5 in module error
- 三、梯度下降求解最小θ
- GIS数据处理-cesium中模型位置设置
- 外包干了四年,废了...
- [servlet] detailed explanation of servlet (use + principle)
- 全连接层的作用是什么?
- AT89C51 MCU digital voltmeter development, measuring range 0 ~ 5V, proteus simulation, schematic diagram, PCB and C program, etc
猜你喜欢
A blog allows you to learn how to write markdown on vscode
Swift protocol Association object resource name management multithreading GCD delay once
qt之.pro文件详解
Svn detailed use tutorial
51单片机的直流电机PWM调速控制系统(附Proteus仿真+C程序等全套资料)
555 timer + 74 series chip to build eight way responder, 30s countdown, proteus simulation, etc
Interviewer: let's talk about the process of class loading and the mechanism of class loading (parental delegation mechanism)
Ali developed three sides, and the interviewer's set of combined punches made me confused on the spot
Set up an AI team in the game world and start the super parametric multi-agent "chaos fight"
[servlet] detailed explanation of servlet (use + principle)
随机推荐
1 - first knowledge of go language
The initial C language framework is suitable for review and preliminary understanding
I/O复用的高级应用之一:非阻塞 connect———使用 select 实现(也可以用 poll 实现)
Upgrade of openssh and modification of version number
51单片机的花卉、农田自动浇水灌溉系统开发,Proteus仿真,原理图和C代码
capacitance
Swift - Literal,字面量协议,基本数据类型、dictionary/array之间的转换
Swift - literal, literal protocol, conversion between basic data types and dictionary / array
阿里研发三面,面试官一套组合拳让我当场懵逼
Want to be an architect? Tamping the foundation is the most important
555 timer + 74 series chip to build eight way responder, 30s countdown, proteus simulation, etc
Electronic perpetual calendar of DS1302_ 51 single chip microcomputer, month, day, week, hour, minute and second, lunar calendar and temperature, with alarm clock and complete set of data
First acquaintance with STL
Detailed explanation of C language knowledge points -- first knowledge of C language [1]
【STC8G2K64S4】比较器介绍以及比较器掉电检测示例程序
1-初识Go语言
LotusDB 设计与实现—1 基本概念
Use of ansible and common modules
I thought I could lie down and enter Huawei, but I was confused when I received JD / didi / iqiyi offers one after another
Resolve the conflict between computed attribute and input blur event