智能充电器的源程序- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit GATE = P2^0;
- sbit BP = P2^1;
- uint t_count,int0_count;
- /* 定时器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);
- }
复制代码
|