write_num_1602(second); //秒更新 second_re = 59- second; //计算秒剩余 gotoxy_1602(1,13); write_num_1602(second_re); //显示秒剩余 } } }
/* 定时器1中断服务子程序 */ void Timer1Interrupt(void) interrupt 3 {
TH1 = 0x4C; //定时器T1初值 50ms定时 晶振11.0592MHz TL1 = 0x00; t1_count20++; //20进制计数器加1 }
/* 外部中断0服务子程序 */ void int0() interrupt 0 using 1 { if (int0_count==0) //外部控制信号 { TH0 = 0x0EE; // 5ms定时 11.0592MHz TL0 = 0x00; TR0 = 1; // 启动定时/计数器0计数 t0_count = 0; // 产生定时器0中断的计数器清零 } int0_count++; }
/* 定时器0中断服务子程序 */ void timer0() interrupt 1 using 1 { t0_count++; // 定时器0中断的计数器加1 TR0 = 0; // 停止计数 TH0 = 0x0EE; //定时器T0初值 5ms定时 晶振11.0592MHz TL0 = 0x00;
if ((t0_count>550)&&(t0_count<1000)) // 外部中断0产生3s~5s的信号 {
if (int0_count==1){ // 标志,则认为充电完毕 EN_OK = 0; //关闭MAX1898 GATE = 1; // 关闭充电电源 BEEP = 0; // 打开蜂鸣器报警 } else { // 否则即是充电出错 GATE = 0; BEEP = 1; } ET0 = 0; // 关闭T0中断 EX0 = 0; // 关闭外部中断0 int0_count = 0; t0_count = 0; } else
TR0 = 1; // T0计数 }
4 总结
本系统采用MAX1898作为系统的充电控制器件,STC89C52根据检测到的MAX1898的输出信息,完成对充电过程的控制和报警。但是由于我们的水平有限,所以该设计还有许多不尽如人意的地方,比如在充电性能方面,还有待改善。
在本例设计过程中,需着重把握以下几点。
(1)预充、快充、满充等充电方式的工作原理。
(2)MAX1898的充电状态指示输出信号/CHG在本例中的应用。
(3)MAX1898外围电路的设计, 其中包括设置充电电流的电阻和充电时间的电容数值的选取。
(4)如何在单片机程序中判断出充电完成还是充电出错,并做出相应的处理。
经过努力,我们基本完成了智能充电器的设计和制作,检验了平时学习的成果,不但实践能力增强许多而且在理论上也有了更深的认识,同时也提高了我们的团结协作能力。同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以,在此,我向各位老师及同学们表示我最衷心的感谢!