单片机在操控方面不只能够在工业操控方面大展神通,假如用在操控一些很有意思的芯片方面也能够完成有用的功用。比如用单片机操控冲电芯片完成手机的智能充电器规划,根据次参阅有关材料学习了根据MAX1898的智能充电器规划。
首要器材:
1、AT89C52单片机芯片,用于操控充电器芯片。
2、可供给准确的恒流/恒压充电,可对一切化学类型的Li+电池进行安全充电的MAX1898。
3、LM7805供给安稳的+5v电压。
实验流程图:
实验电路图:
实验程序代码:
//BattCharger.h程序
#ifndef_BATTCHARGER_H//避免BattCharger.h被重复引证
#define_BATTCHARGER_H
#include
#define uchar unsigned char
#define uint unsigned int
sbit GATE = P2^0;
sbit BP = P2^1;
uint t_count,int0_count;
#endif
//BattCharger.c程序
#include “BattCharger.h”
/*守时器0中止服务子程序*/
void timer0() interrupt 1 using 1
{
TR0 = 0;//中止计数
TH0 = -5000/256;//重规划数初值
TL0 = -5000%256;
t_count++;
if (t_count>600)//第一次外部中止0发生后3s
{
if (int0_count==1)//还没有呈现第2次外部中止0,则以为充电结束
{
GATE = 0;//封闭充电电源
BP = 0;//翻开蜂鸣器报警
}
else//不然便是充电犯错
{
GATE = 1;
BP = 1;
}
ET0 = 0;//封闭T0中止
EX0 = 0;//封闭外部中止0
int0_count = 0;
t_count = 0;
}
else
TR0 = 1;//发动T0计数
}
/*外部中止0服务子程序*/
void int0() interrupt 0 using 1
{
if (int0_count==0)
{
TH0 = -5000/256;// 5ms守时
TL0 = -5000%256;
TR0 = 1;//发动守时/计数器0计数
t_count = 0;//发生守时器0中止的计数器清零
}
int0_count++;
}
/*初始化*/
void init()
{
EA = 1;//翻开CPU中止
PT0 = 1;// T0中止设为高优先级
TMOD = 0x01;//形式1,T0为16位守时/计数器
ET0 = 1;//翻开T0中止
IT0 = 1;//外部中止0设为边缘触发
EX0 = 1;//翻开外部中止0
GATE = 1;//光耦正常输出电压
BP = 1;//封闭蜂鸣器
int0_count = 0;//发生外部中止0的计数器清零
}
void main()
{
/*调用初始化函数*/
init();
/*无限循环*/
while(1);
}