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

📄 public.c

📁 电力载波抄表系统里的电力载波采集器,采集数据再通过RS485向主站发送.
💻 C
字号:
//安全检测
void safeCheck(void)
{
	//if(v_IntRunFlag != v_ExtRunFlag)
	{
	//	Reset();				//死循环
	}
}
//缓冲区清零
void lowmemset(unsigned char *buff, unsigned char data, unsigned char n)
{
	while(n--)
	{
		*buff++ = data;
	}
}

void highmemset(bank2 unsigned char *buff, unsigned char data, unsigned char n)
{
	while(n--)
	{
		*buff++	= data;
	}
}

//内存拷贝
void lowmemcpy(unsigned char *dec, unsigned char *src, unsigned char n)
{
	while(n--)
	{
		*dec++ = *src++;
	}
}

void highmemcpy(bank2 uc *dec, bank2 uc *src, uc n)
{
	while(n--)
	{
		*dec++ = *src++;
	}
}

void memcpyl2h(bank2 unsigned char *dec, unsigned char *src, unsigned char n)
{
	while(n--)
	{
		*dec++	= *src++;
	}
}

void memcpyh2l(unsigned char *dec, bank2 unsigned char *src, unsigned char n)
{
	while(n--)
	{
		*dec++	= *src++;
	}
}

//查表
void highmemcpypgm2ram(bank2 uc *ramptr, const uc *romptr, uc n)
{
	while(n--)
	{
		*ramptr++ = *romptr++;
	}
}

//比较内存数据和程序空间常量是否一致
unsigned char lowmemcmppgm2ram(uc *ramptr, const uc *romptr, uc n)
{
	while(n--)
	{
		if((*ramptr) != (*romptr))
		{
			return	0x55;
		}
		ramptr++;
		romptr++;
	}
	return	(0);
}
unsigned char highmemcmppgm2ram(bank2 uc *ramptr, const uc *romptr, uc n)
{
	while(n--)
	{
		if((*ramptr) != (*romptr))
		{
			return	0x55;
		}
		ramptr++;
		romptr++;
	}
	return	(0);
}
//内存比较
unsigned char highmemcmp(bank2 uc *dec, bank2 uc *src, uc n)
{
	while(n--)
	{
		if((*dec) != (*src))
		{
			return	0x55;
		}
		dec++;
		src++;
	}
	return	0;
}
unsigned char lowmemcmp(uc *dec, uc *src, uc n)
{
	while(n--)
	{
		if((*dec) != (*src))
		{
			return	0x55;
		}
		dec++;
		src++;
	}
	return	0;
}
unsigned char memcmph2l(uc *dec, bank2 uc *src, uc n)
{
	while(n--)
	{
		if((*dec) != (*src))
		{
			return	0x55;
		}
		dec++;
		src++;
	}
	return	0;
}
//偶校验
bit EvenParity(unsigned char data)
{
	unsigned char even,loop;
	loop	= 0x08;
	even	= 0;

	while(loop--)
	{
		if (data&0x01)
		{
			even++;
		}
		data	>>= 1;
	}
	
	if(even & 0x01)	 return(1);
	else return(0);
}
/**************************************
* BCD to HEX
**************************************/
unsigned char bytebcdtohex(unsigned char bcd)
{	
	return(((bcd>>4)*10) + (bcd&0b00001111)); 
}

/**************************************
*	bcd adjust
**************************************/
void bcdAdj(unsigned char *bcd)
{
	unsigned char temp;

	temp	= *bcd;
	if((temp&0x0f) == 0x0f)
	{
		temp	&= 0xF9;
	}
	
	*bcd	= temp;
}

/**************************************
*	日期-1,输入指针,指向日
*	格式: 日 月 年
**************************************/
void DateDec(bank2 unsigned char *p_day)
{
	unsigned char 	date_day;					//日
	unsigned char 	date_mm;					//月
	unsigned char	date_yy;					//年

	date_yy		= *(p_day+2);
	date_mm		= *(p_day+1);
	date_day	= *(p_day);

	date_day--;									//日减一
	bcdAdj(&date_day);
	*p_day		= date_day;
	if(date_day != 0)	return;

	date_mm--;									//月减一
	bcdAdj(&date_mm);
	if(date_mm == 0)
	{
		*(p_day+1)	= 0x12;
		date_mm		= 0x12;
		date_yy--;								//年减一
		bcdAdj(&date_yy);						//不考虑00年了:)
	}
	
	*(p_day+2)	= date_yy;						//保存年
	
	switch(date_mm){
	case	1:
	case	3:
	case	5:
	case	7:
	case	8:
	case	0x10:
	case	0x12:
		date_day	= 0x31;
		break;
	case	4:
	case	6:
	case	9:
	case	0x11:
		date_day	= 0x30;
		break;
	case	2:
		date_yy	= bytebcdtohex(date_yy);		//BCD to hex
		if((date_yy%4) == 0)
		{
			date_day	= 0x29;
		}
		else
		{
			date_day	= 0x28;
		}
	}
	
	*p_day		= date_day;
	*(p_day+1)	= date_mm;
}

//******** delay 1*x ms *********/
//	11.59200MHz
//	1ms	= 11059200/4*1000 = 2764.8cycles
//*************************************
void Delay1msx(unsigned int x)
{
	unsigned char loop;
	
	while(x--)
	{
		ClrWdt();
		loop	= 251;
		while(--loop)
		{
			Nop();
			Nop();
			Nop();
			Nop();
			Nop();
			Nop();
			Nop();
			Nop();
		}
	}
}

//******** delay 1bit *********/
//	11.59200MHz
//	1200bit	= (1/1200)/(4/1105920) = 2304cycles
//*************************************
void Delay1200bit(void)
{
	unsigned char loop;
	loop	= 0xE4;
	#asm
Delay820usLoop:
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	decfsz		?a_Delay1200bit
	goto		Delay820usLoop
	nop
	#endasm
}

⌨️ 快捷键说明

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