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

📄 public.c

📁 ATmega128和ads7864实现ATP闭环控制
💻 C
字号:

//#include "public.h"
#include <iom128v.h>
#include <macros.h>
#include <string.h>
#include <math.h>
#include "DC_Defines.h"


#define u8 unsigned char
#define s8 char
#define u16 unsigned short
#define s16 short
#define u32 unsigned long
#define s32 long
#define pu16 (unsigned short *)
#define ps16 (short *)
#define pu32 (unsigned long *)
#define ps32 (long *)

//全局变量定义
unsigned char ucUpDownTime[12];
unsigned char ucNowTime[6];
unsigned char ucLastFlashTime[6];
unsigned char ucDTTime[6];
unsigned char ucNowValuePer[8];
unsigned char ucNowValuePerCOM[8];
unsigned char FTREC[4];
unsigned char TREC[4];
unsigned char ucSystemConfig[80];
unsigned char ucChannelConfig[80];
unsigned char RECORD[1048];



//计算该时间与2000-01-01 00:00:00 的间隔秒数
unsigned long count_seconds(unsigned char * nyrsfm)
{
	unsigned char ucN,ucY,ucR,ucS,ucF,ucM;//年月日时分秒
	unsigned char i,j,k;
	unsigned long ulSeconds;
	ucN=nyrsfm[0];
	ucY=nyrsfm[1];
	ucR=nyrsfm[2];
	ucS=nyrsfm[3];
	ucF=nyrsfm[4];
	ucM=nyrsfm[5];

	ulSeconds=0;
	
	for(i=0;i<ucN;i++)
	{
		if((i%4)==0)	ulSeconds+=((unsigned long)366)*((unsigned long)24)*((unsigned long)3600);	//如果是闰年,加上366的秒数
		else		ulSeconds+=((unsigned long)365)*((unsigned long)24)*((unsigned long)3600);	//如果是平年,加上365的秒数
	}
	for(i=1;i<ucY;i++)
	{
		switch(i)
		{
			case 1:
				ulSeconds+=((unsigned long)31)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 2:
				if((ucN%4)==0)	ulSeconds+=((unsigned long)29)*((unsigned long)24)*((unsigned long)3600);
				else		ulSeconds+=((unsigned long)28)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 3:
				ulSeconds+=((unsigned long)31)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 4:
				ulSeconds+=((unsigned long)30)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 5:
				ulSeconds+=((unsigned long)31)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 6:
				ulSeconds+=((unsigned long)30)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 7:
				ulSeconds+=((unsigned long)31)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 8:
				ulSeconds+=((unsigned long)31)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 9:
				ulSeconds+=((unsigned long)30)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 10:
				ulSeconds+=((unsigned long)31)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 11:
				ulSeconds+=((unsigned long)30)*((unsigned long)24)*((unsigned long)3600);
				break;
			case 12:
				ulSeconds+=((unsigned long)31)*((unsigned long)24)*((unsigned long)3600);
				break;
			default:
				break;
		}
	}

	ulSeconds+=((unsigned long)(ucR-1))*((unsigned long)24)*((unsigned long)3600);
	ulSeconds+=((unsigned long)ucS)*((unsigned long)3600);
	ulSeconds+=((unsigned long)ucF)*((unsigned long)60);
	ulSeconds+=((unsigned long)ucM);

	return ulSeconds;
}

//计算time1-time2的时间差,返回差值,单位s
unsigned long SpanSecond(unsigned char * nyrsfm1,unsigned char * nyrsfm2)
{
	unsigned long ultemp1,ultemp2;
	
	ultemp1=count_seconds(nyrsfm1);
	ultemp2=count_seconds(nyrsfm2);

	if(ultemp1>ultemp2)	return (ultemp1-ultemp2);
	else		return 0;
}

unsigned long SpanDay1(unsigned char * nyr1,unsigned char * nyr2)		//每月按31天算
{
	unsigned long ulDays1,ulDays2;
	ulDays1=((unsigned long)nyr1[0])*((unsigned long)12)*((unsigned long)31)+((unsigned long)(nyr1[1]-1))*((unsigned long)31)+((unsigned long)(nyr1[2]-1));
	ulDays2=((unsigned long)nyr2[0])*((unsigned long)12)*((unsigned long)31)+((unsigned long)(nyr2[1]-1))*((unsigned long)31)+((unsigned long)(nyr2[2]-1));
	if(ulDays1>ulDays2)	return (ulDays1-ulDays2);
	else		return 0;
}

unsigned long SpanMonth(unsigned char * ny1,unsigned char * ny2)		
{
	unsigned long ulMonth1,ulMonth2;
	ulMonth1=((unsigned long)ny1[0])*((unsigned long)12)+ny1[1]-1;
	ulMonth2=((unsigned long)ny2[0])*((unsigned long)12)+ny2[1]-1;
	if(ulMonth1>ulMonth2)	return (ulMonth1-ulMonth2);
	else 	return 0;
}

unsigned long SpanYear(unsigned char * n1,unsigned char * n2)		
{
	if(*n1>*n2)	return (*n1-*n2);
	else 	return 0;
}


// delay time=ticks * 6 +15 clock time tosc
// the fosc=11.0592MHz in this application,
// when ticks=0x00:	1.356us
// when ticks=0xFF:	139.7us

 void delay(unsigned char ticks)
  {
  	while(ticks--);
  }

//
 void delayus(unsigned char ticks)
  {
  	while(ticks--);
  }

  void delayms(unsigned char ticks)
  {
  	unsigned char i,j,k;
	for(i=0;i<ticks;i++)
	{
  		for(j=0;j<10;j++)
		{	
			k=182;
			while(k--);	//about 100us
  		}
	}
  }


void c_wd(void)
{
	SETBIT(PORTC, BIT1);
	NOP();
	NOP();
	CLEARBIT(PORTC, BIT1);
}

⌨️ 快捷键说明

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