×
嵌入式 > 嵌入式开发 > 详情

基于MAX1898的智能充电器设计

发布时间:2020-09-03 发布时间:
|
单片机在控制方面不仅可以在工业控制方面大展神通,如果用在控制一些很有意思的芯片方面也可以实现实用的功能。比如用单片机控制冲电芯片实现手机的智能充电器设计,基于次参考有关资料学习了基于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)//还没有出现第二次外部中断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);

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
寻找半导体产业未来10年的驱动力