📄 charge.c
字号:
/****************************************************************/
/*功能:
/*版本:v1.0
/*设计人:wangjin
/*编写日期:07-07-22
/*最后修改日期:
/*状态:Are debugging
/****************************************************************/
#include "define.h"
/*中断服务函数*/
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void T0_ISR() interrupt 1
{
TH0 = 0x80; //
TL0 = 0x00; //
if(enPWM)
{
charge_output = ~charge_output;
}
L2Delay++;
L3Delay++;
if(L2Delay>=50)
{
L2Delay = 0;
if(enL2)
LEDB = ~LEDB;
}
if(L3Delay>=50)
{
L3Delay = 0;
if(enL3)
LEDA = ~LEDA;
}
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void T1_ISR() interrupt 3
{
TH1 = 0x80; //
TL1 = 0x00; //
if(enDelay1)
Delay4min1++;
if(enDelay2)
Delay4min2++;
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void RTC_ISR() interrupt 10
{
EA = 0;
if((RTCCON&0x80)==0x80)
{
RTCCON &= 0x63;
if(Minutes == 59)
{
if(Seconds == 59)
{
Seconds = 0;
Minutes = 0;
Hours ++;
}
else
{
Seconds ++;
}
}
else
{
if(Seconds == 59)
{
Seconds = 0;
Minutes ++;
}
else
{
Seconds ++;
}
}
EA = 1;
}
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void AD_ISR() interrupt 14
{
ADCON1 &= 0xF7;
AdValue.BatAd[AdValue.index] = AD1DAT0;
AdValue.SunAd[AdValue.index] = AD1DAT1;
AdValue.index ++;
if(AdValue.index >= 8)
AdValue.index = 0;
}
/*其他函数定义部分*/
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Clr_Dog()
{
EA = 0; //关闭中断
WFEED1 = 0xA5; //执行清零第一部分
WFEED2 = 0x5A; //执行清零第二部分
EA = 1; //开中断
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:port=1--L3,port=0--L2;mode=0常灭--mode=1--常亮mode=2--闪烁
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Led_Ctrl(bit port,uchar mode)
{
if(mode == 2)
{
if(port)
enL3 = 1;
else
enL2 = 1;
}
else if(mode == 1)
{
if(port)
{
enL3 = 0;
LEDA = 0;
}
else
{
enL2 = 0;
LEDB = 0;
}
}
else
{
if(port)
{
enL3 = 0;
LEDA = 1;
}
else
{
enL2 = 0;
LEDB = 1;
}
}
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
bit Delay_4min(bit enDelay)
{
Clr_Dog();
if(enDelay)
{
enDelay1 = 1;
if(Delay4min1>=DELAY_MIN)
{
enDelay1 = 0;
Delay4min1 = 0;
return(1);
}
}
else
{
enDelay2 = 1;
if(Delay4min2>=DELAY_MIN)
{
enDelay2 = 0;
Delay4min2 = 0;
return(1);
}
}
return(0);
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Init_Var()
{
Seconds = 0;
Minutes = 0;
Hours = 0;
ClrFlag = 1; //允许时间清0
PowerFlag = 1; //允许放电
CtrlFlag = 1; //允许控制器打开负荷
L2Delay = 0;
L3Delay = 0;
Delay4min1 = 0;
Delay4min2 = 0;
enL2 = 0;
enL3 = 0;
enPWM = 0;
enDelay1 = 0;
enDelay2 = 0;
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Init_IO()
{
P0M1 = 0x0c; //B00001100
P0M2 = 0x33; //B00110011
ADINS = 0x60; //B01100000
P1M1 = 0x2F; //B00101111
P1M2 = 0x04; //B00010000
PT0AD = 0x0C; //禁止P02、P03的数字输入功能
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Init_AD()
{
ADINS = 0x60; //选择CH1、CH2
ADCON1 = 0x45; //允许中断,使能ADC1,立即启动方式
ADMODA = 0x20; //双通道连续转换
ADMODB = 0x80; //分频 = 5
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Init_Timer()
{
TRIM |= 0x80; //选择内部RC振荡器的输出作为CPU时钟
TMOD = 0x11; //定时器0工作在模式1
TAMOD = 0x00; //定时器0工作在模式1
TH0 = 0x80; //
TL0 = 0x00; //
TH1 = 0x80;
TL1 = 0x00;
TR0 = 1; //打开定时器0
TR1 = 1;
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Init_RTC()
{
RTCH = 0xE0;
RTCL = 0xFF; //一个周期1s
RTCCON = 0x63; //内部RC振荡器输出时钟,中断使能,RTC启动
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Init_WDT()
{
ACC = WDCON; //读取WDT控制寄存器
ACC = ACC|0x04; //置位ACC.2准备启动WDT
WDL = 0x80; //设置8位倒计时器初值
WDCON = ACC; //启动WDT
WFEED1 = 0xA5; //清零第一部分
WFEED2 = 0x5A; //清零第二部分
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
void Init_Interrupt()
{
EWDRT = 1; //实时时钟中断使能
EAD = 1; //AD中断使能
ET0 = 1; //
ET1 = 1;
EA = 1; //总中断使能
}
/*********************************************************************/
/*函数名:
/*功能:
/*输入参数:
/*返回值:
/*调用函数:
/*被调用函数:
/*编写日期:
/*最后修改日期:
/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -