📄 public.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 + -