rtc.c
来自「电能表源码」· C语言 代码 · 共 121 行
C
121 行
/*************************************************************************************
文件类型:底层驱动函数文件
文件作用:
修改权限:底层驱动维护人员
文件相关:
创 建 人:GeminiKQ
创建日期:2006.12.19
当前版本:Ver0.1
版本信息:Ver0.1 GeminiKQ
**************************************************************************************/
#include "Tiger.h"
#include "typemeter.h"
//===========================================================
//函数功能:初始化时钟寄存器
//备注:第一次上电时调用
//============================================================
void Init_RTC(void)
{ CfgRTC(1,0); //pll 1秒唤醒
/*
RTCTIME.rSecond=0;
RTCTIME.rMinute=0x28;
RTCTIME.rHour=0x17;
RTCTIME.rDate=0x10;
RTCTIME.rWeek=0x04;
RTCTIME.rMonth=0x01;
RTCTIME.rYear=0x08;
SetRTCTime(RTCTIME);
*/
AdjustRTC(0x0,0x1f,0xff-3); //时钟补偿
// CfgPort(4,1); //秒脉冲输出打开
// P1_0OE=0;
}
//=======================================================
//函数功能:初始化时钟功能模块,
//备注:每次从停电模式切换到正常上电时调用
//=======================================================
void init_RTCmode(void)
{ //Ctor_intrupt(1,21); //开秒中断
SetInterrupt(21); //开启秒中断
Flg_rtvrefresh=0; //清秒刷新标志位。
Init_RTC();
}
//===========================================
//函数功能:正常工作时时钟刷新,每秒刷新一次。
//
//==========================================
void Rtc_refreshmode(void)
{ //unsigned char i;
if(Flg_rtvrefresh==true)
{ ClearWDT(); //喂狗
Flg_rtvrefresh=false;
if(ReadRTCTime()==1)
{ if(addr_baseonIDandtype(RAM,ID_DATAMETER)!=0) //获取地址成功
{ wr_buff[0]=RTCTIME.rYear;
wr_buff[1]=RTCTIME.rMonth;
wr_buff[2]=RTCTIME.rDate;
wr_buff[3]=RTCTIME.rHour;
wr_buff[4]=RTCTIME.rMinute;
wr_buff[5]=RTCTIME.rSecond;
wr_buff[6]=RTCTIME.rWeek;
data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
Write_data((*ID_coretalbpoint[0]).stortype,7);
}
}
if(check_powertype()==0) //停电激活时间累加
if(time_jihuo<181)
time_jihuo++;
F_energeadd=1; // 电量运行标志
flag_startlcddisp=1; // 置位显示刷新标志位
flag_xuliangmode=1; // 需量刷新标志
// flag_zhuancun_run=1; // 转存历史电量运行标志
// flag_runswitchmode=1; // 拉合闸模块运行标志为
if (RTCTIME.rSecond==0x59) // 每一分钟
bat_test(); // 电池电压检测一次(电池电压不足,置缺电报警标志位)
if(count_opencftime>0) // CF打开延时
count_opencftime--;
// if(sta_keypag==key_dnstation) // 计算按键按下时间
// time_keypag_on++;
// if(sta_keyup==key_dnstation)
// time_keyup_on++;
if(sta_meterrun==run_prosta) // 编程状态下计时
time_runprosta++;
if(time_runprosta>600) // 10分钟退出编程状态
{ time_runprosta=0;
sta_meterrun=run_formal;
}
if(F_commudiv>0) //显示时间
F_commudiv--;
if(F_commudiv==0) // 不显示,则接收状态
{
CfgPort(13,2); // P2_4作为RXD2
P2IE|=0x10; // 输入使能
CfgPort(14,0); // P2_5初始化为GPIO口
P2OE&=0xdf; // 输出使能
P2OD&=0xdf; // 输出低电平
SetInterrupt(8); // 允许接收
ClrInterrupt(7); // 关闭发射中断
sta_infrcomm=standby_comm; // 重新开始接收
len_infrcommdata=0;
// init_infrcomm();
}
if(time_qiandong<qidong_time) //防潜时间
time_qiandong++;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?