当前位置:网站首页>[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
边栏推荐
- I/O复用的高级应用:同时处理 TCP 和 UDP 服务
- Basic regular expression
- Resolve the conflict between computed attribute and input blur event
- 2-GO variable operation
- 如何打开Win10启动文件夹?
- Swift: entry of program, swift calls OC@_ silgen_ Name, OC calls swift, dynamic, string, substring
- Logical volume creation and expansion
- we引用My97DatePicker 实现时间插件使用
- SVN详细使用教程
- I/O复用的高级应用之一:非阻塞 connect———使用 select 实现(也可以用 poll 实现)
猜你喜欢
自动化的艺术
1 minute to understand the execution process and permanently master the for cycle (with for cycle cases)
Ali developed three sides, and the interviewer's set of combined punches made me confused on the spot
LM317的直流可调稳压电源Multisim仿真设计(附仿真+论文+参考资料)
一款不错的工具:aardio
Model location setting in GIS data processing -cesium
ASEMI超快恢复二极管与肖特基二极管可以互换吗
AT89C51单片机的数字电压表开发,量程0~5V,proteus仿真,原理图PCB和C程序等
Swift:Entry of program、Swift调用OC、@_silgen_name 、 OC 调用Swift、dynamic、String、Substring
金九银十,入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)
随机推荐
QT interface optimization: double click effect
Matlab Simulink modeling and design of single-phase AC-AC frequency converter, with MATLAB simulation, PPT and papers
Don't you know the usage scenario of the responsibility chain model?
8.3 语言模型与数据集
GIS数据处理-cesium中模型位置设置
利用 MATLAB 编程实现最速下降法求解无约束最优化问题
OpenFaaS实战之四:模板操作(template)
QT actual combat: Yunxi calendar
2-GO variable operation
QT actual combat: Yunxi chat room
AT89C52 MCU frequency meter (1Hz ~ 20MHz) design, LCD1602 display, including simulation, schematic diagram, PCB and code, etc
we引用My97DatePicker 实现时间插件使用
Proteus simulation design of four storey and eight storey elevator control system, 51 single chip microcomputer, with simulation and keil c code
冰冰学习笔记:一步一步带你实现顺序表
L'externalisation a duré quatre ans.
【Servlet】Servlet 详解(使用+原理)
你还不知道责任链模式的使用场景吗?
1-初识Go语言
Proteus simulation design of DC adjustable regulated power supply (with simulation + paper and other data)
[servlet] detailed explanation of servlet (use + principle)