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

📄 time.c

📁 用于GPRS远程电力抄表系统中采集器端的程序
💻 C
字号:
#include "SM89516A.h"
#include "process.h"
#include "io.h"
#include "time.h"
#include "datasvr.h"
#include "ioport.h"
#include "recframe.h"
#include "common.h"

//uchar idata delay_1ms;
uchar idata delay_10ms;
uchar idata delay_20ms;
uchar idata delay_25ms;
uchar idata delay_30ms;
//uchar idata delay_100ms;
uint  idata delay_1s;
uint  idata delay_10s;
unsigned long idata delay_10min;


uchar bdata alarm0;
sbit cut=alarm0^6;
sbit open=alarm0^7;
uchar bdata alarm1;
uchar bdata alarm2;
uchar bdata alarm3;


uchar xdata Curtime[6];	//校时

/************************************************************/
/*函数名:time_svr2
/*描述:定时2中断,25ms为一个时隙
/*输入:
/*输出:无
/************************************************************/
void time_svr2(void) interrupt 5
{
    static uchar i;
  	TF2=0;							// 溢出标志必须由软件清零
	EXF2=0;							// 捕获标志必须由软件清零
	i++;	
    if(i==h_value)
	{
		i=0;
		TR2=0;
		TI=1;
	}
	
}


/************************************************************/
/*函数名:time_svr0
/*描述:定时0中断,定时1ms
/*输入:
/*输出:无
/************************************************************/
void time_svr0(void) interrupt 1
{
	static uchar i=0; 
	static unsigned int j=0;


  	TH0=0xfc;
  	TL0=0x18;
	if(TimeStart)
		delay_30ms++;    
//  delay_1ms++;
    delay_10ms++;
  	delay_20ms++;
	delay_25ms++;
  	delay_1s++;
  	delay_10s++;
  	delay_10min++;
	j++;


	if(j>500)
	{
		j=0;
		P3_3=!P3_3; 
	}
  	switch(i)
    {
           case 0: 
				   sccode=0xFE;
				   port1=sccode; 
				   i++;
                   break;
		   case 1:
		   		   io_Scan1();
                   io_process(0); 
                   i++;				   
                   break;
		   case 2:
				   sccode=0xFd;
				   port1=sccode; 
				   i++;
                   break;
           case 3: 
                   io_Scan2();
                   io_process(4);
                   i++;				   
                   break;
           case 4:
				   sccode=0xFb;
				   port1=sccode; 	
				   i++;
                   break;
           case 5: 
                   io_Scan3();
                   io_process(8);
                   i++;
                   break;
           case 6:
				   sccode=0xF7;
				   port1=sccode; 
				   i++;
                   break;
		   case 7: 
                   io_Scan4();
                   io_process(12);
                   i=0;
                   break;   	    
	}
   	 
}

/************************************************************/
/*函数名:extern_in0
/*描述:外部中断0
/*输入:
/*输出:无
/************************************************************/
void extern_in0() interrupt 0
{
	uchar radd_end;
	cut=1;
    //data_sav();
	R_block(WPAGE0,RPAGE0,i2c_addr_addflag,&radd_end,1);            

	switch(radd_end)
	{
		case 0: 
			W_block(WPAGE0,i2c_addr_data,&sum[0][0],96);		
			break;
		case 1: 
			W_block(WPAGE1,i2c_addr_data,&sum[0][0],96);		 
			break;
	}
}

/************************************************************/
/*函数名:time_svr
/*描述:定时进行数据处理
/*输入:
/*输出:无
/************************************************************/
void time_svr()
{
	uchar time_end;

	if(delay_20ms>=24) 
    {
		delay_20ms=0;	

		WDTKEY=0x1E;
		WDTKEY=0xE1;
		WDTC|=0x20;
      	WDTKEY=0xE1;
      	WDTKEY=0x1E;

    } 
/*   
	if(delay_100ms>=105) 
    {		
		delay_100ms=0;

		brary07=P0_0;
		brary06=P0_1;
		brary05=P0_2;
		brary04=P0_3;
		brary03=P0_4;
		brary02=P0_5;
		brary01=P0_6;
		brary00=P0_7;

		brary17=P2_0;
		brary16=P2_1;
		brary15=P2_2;
		brary14=P2_3;
		brary13=P2_4;
		brary12=P2_5;
		brary11=P2_6;
		brary10=P2_7;

       //ioscan();
 	
     } 
*/ 
    
	if(delay_1s>=1007)   
    {
		delay_1s=0;	

        ds1302read();
	    R_block(WPAGE0,RPAGE0,i2c_addr_timeflag,&time_end,1); 
		
        if(time_end)
			R_block(WPAGE0,RPAGE0,i2c_addr_time,Curtime,6); 
        else
            R_block(WPAGE1,RPAGE1,i2c_addr_time,Curtime,6); 
/*
       	if(rdtime[0]<Curtime[0]||rdtime[1]<Curtime[1]||rdtime[2]<Curtime[2])
       	   open=1;
		else
		   open=0;
*/      
		if(rdtime[0]>Curtime[0])
		{
			open=0;
			alarm_ac=0;
		}
		else if(rdtime[0]<Curtime[0])
			open=1;
		else
		{
			if(rdtime[1]>Curtime[1])
			{
				open=0;
				alarm_ac=0;
			}
			else if(rdtime[1]<Curtime[1])
				open=1;
			else
			{
				if(rdtime[2]>Curtime[2])
				{
					open=0;
					alarm_ac=0;
				}
				else if(rdtime[2]<Curtime[2])
					open=1;
				else
				{
					open=0;
					alarm_ac=0;
				}
			}
		}
				  
	}

    
	if(delay_10s>=10009)   
    {
		delay_10s=0;

      	data_sav();

    }



}

⌨️ 快捷键说明

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