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

📄 battcharger.c

📁 再单片机的控制下
💻 C
字号:
#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);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -