?? battcharger.c
字號(hào):
#include <reg52.h> //頭文件
#include <stdio.h>
#define uint unsigned int
sbit HCPL = P2^2; //光耦模塊HCPL-2601輸出控制
sbit BP = P1^3; //蜂鳴器報(bào)警控制
uint CountT0; //定時(shí)器T0中斷次數(shù)
uint CountINT0; //外部中斷0次數(shù)
void timer0() interrupt 1 //定時(shí)器/計(jì)數(shù)器T0中斷服務(wù)例程
{
TR0 = 0; //停止計(jì)數(shù)
TH0 = 19; //重置初值
TL0 = 136;
CountT0++; //定時(shí)器T0中斷次數(shù)加1
if (CountT0>620)
{
if (CountINT0==1) //如果外部中斷0次數(shù)為1,則認(rèn)為充電完畢
{
HCPL = 0; //關(guān)閉MAX1898輸入電源
BP = 0; //觸發(fā)蜂鳴器報(bào)警
printf("Bettery is charged over.");
}
else //否則,表示充電過(guò)程出錯(cuò)
{
HCPL = 1; //保持MAX1898輸入電源
BP = 1; //蜂鳴器不報(bào)警
printf("There is something error.");
}
ET0 = 0; //關(guān)閉定時(shí)器T0中斷
EX0 = 0; //關(guān)閉外部中斷0
CountINT0 = 0; //計(jì)數(shù)器歸0
CountT0 = 0; //計(jì)數(shù)器歸0
}
else
{
TR0 = 1; //啟動(dòng)定時(shí)器T0計(jì)數(shù)
}
}
void int0() interrupt 0 //外部中斷0服務(wù)例程
{
if (CountINT0==0) //定時(shí)器T0未中斷
{
TH0 = 19; //設(shè)置定時(shí)初值
TL0 = 136;
CountT0 = 0; //計(jì)數(shù)器歸0
TR0 = 1; //啟動(dòng)定時(shí)器/計(jì)數(shù)器0
}
CountINT0++; //計(jì)數(shù)器歸0
}
void main()
{
TMOD = 0x01; //定時(shí)器模式1,T0為16位定時(shí)/計(jì)數(shù)器
PT0 = 1; //設(shè)置T0中斷為高優(yōu)先級(jí)
IT0 = 1; //設(shè)置外部中斷0為邊沿觸發(fā)
ET0 = 1; //打開(kāi)T0中斷
EX0 = 1; //打開(kāi)外部中斷0
EA = 1; //打開(kāi)CPU中斷
HCPL = 1; //MAX1898輸入電源,開(kāi)始充電
BP = 1; //關(guān)閉蜂鳴器
CountINT0 = 0; //計(jì)數(shù)器歸0
CountT0 = 0; //計(jì)數(shù)器歸0
printf("Begin battery charge.");
while(1) //主循環(huán),充電過(guò)程
{
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -