⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 battcharger.c

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 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 + -