12C5A单片机低电压检测的P4.6口(31管脚 电压检测入口输入端)的外围是不是要接什么电路? 我的做法:我是把P4.6直接接到外部一个5V的电压源,然后调整电压从5V一直降到1V。但是到了3点多幅的时候会突然外部电压跳到1V。整个过程也没有产生低电压检测中断
/************************测试1 是否有电压输出 是否正常***************************/
//#include "lcd1602.h"
#include "delay.h"
#include "common.h"
#include "STC12C5A60S2.h"//包含单片机寄存器的头文件
#include "usart.h"
//#include "iic.h"
/*测试2:外部掉电中断检测*/
7 6 5 4 3 2 1 0 Reset Value
//sfr PCON = 0x87; - - LVDF POF GF1 GF0 PD IDL 0001,0000 //Power Control
//LVDF: 低压检测标志,只要电压低于检测门槛电压,该位置1,软件清0。睡眠前禁止低压中断可降低功耗。允许则低压时中断唤醒MCU。
void main()
{
USART0_Init(); //串口初始化
PCON = PCON & ~(1<<5); //低压检测标志清0
PLVD = 1; //低压中断 优先级高
EA = 1;
ELVD = 1; //低压监测中断允许
/*现象:串口调试助手每过2S钟打印出一行"hello,world"。但是无论我如何调试P4.6的电压始终没有进入中断,外部是不是要接什么电路呢*/
/*说明:#include "STC12C5A60S2.h" 这个头文件就是keil的stc12c5a.h 。里面我有加防重复包含的语句 可以不用管*/
while(1)
{
USART0_SendString("hello,world");//串口调试助手显示“hello,world”
Delay1ms(2000); //延时2S
}
}
void LVD_Routine(void) interrupt 6
{
uchar i;
USART0_SendString("Enter LVD"); //上位机上打印"Enter LVD"
while(PCON & (1<<5)) //检测是否仍然低电压
{
PCON = PCON & ~(1<<5); //低压检测标志清0
for(i=0; i<100; i++) ; //延时一下
}
USART0_SendString("Quit LVD");
}
|