📄 battcharger.c
字号:
#include <reg52.h> //头文件
#include <stdio.h>
#define uint unsigned int
sbit HCPL = P2^2; //光耦模块HCPL-2601输出控制
sbit BP = P1^3; //蜂鸣器报警控制
uint CountT0; //定时器T0中断次数
uint CountINT0; //外部中断0次数
void timer0() interrupt 1 //定时器/计数器T0中断服务例程
{
TR0 = 0; //停止计数
TH0 = 19; //重置初值
TL0 = 136;
CountT0++; //定时器T0中断次数加1
if (CountT0>620)
{
if (CountINT0==1) //如果外部中断0次数为1,则认为充电完毕
{
HCPL = 0; //关闭MAX1898输入电源
BP = 0; //触发蜂鸣器报警
printf("Bettery is charged over.");
}
else //否则,表示充电过程出错
{
HCPL = 1; //保持MAX1898输入电源
BP = 1; //蜂鸣器不报警
printf("There is something error.");
}
ET0 = 0; //关闭定时器T0中断
EX0 = 0; //关闭外部中断0
CountINT0 = 0; //计数器归0
CountT0 = 0; //计数器归0
}
else
{
TR0 = 1; //启动定时器T0计数
}
}
void int0() interrupt 0 //外部中断0服务例程
{
if (CountINT0==0) //定时器T0未中断
{
TH0 = 19; //设置定时初值
TL0 = 136;
CountT0 = 0; //计数器归0
TR0 = 1; //启动定时器/计数器0
}
CountINT0++; //计数器归0
}
void main()
{
TMOD = 0x01; //定时器模式1,T0为16位定时/计数器
PT0 = 1; //设置T0中断为高优先级
IT0 = 1; //设置外部中断0为边沿触发
ET0 = 1; //打开T0中断
EX0 = 1; //打开外部中断0
EA = 1; //打开CPU中断
HCPL = 1; //MAX1898输入电源,开始充电
BP = 1; //关闭蜂鸣器
CountINT0 = 0; //计数器归0
CountT0 = 0; //计数器归0
printf("Begin battery charge.");
while(1) //主循环,充电过程
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -