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 + -
显示快捷键?