📄 function.c
字号:
for(j=0;j<250;j++)
{
_NOP();
}
}
}
//*****************************************************************************
// 函数 : ShortDelay(INT8U Cnt) *
// *
// 功能 : 精确定时程序 *
// 注释 : Delay = 2+cnt*4 cycles *
//*****************************************************************************
void ShortDelay(void)
{
INT8U cnt;
for(cnt=0;cnt<_SHORT_DELAY ;cnt++)//_DELAY_50US_CONST
{
_NOP();
}
}
//*****************************************************************************
// 函数原型: HEXToBCD32(INT32U data,INT8U *taget) *
// *
// 功 能: LONG型十六进制到bcd转换,转换为4字节压缩BCD码,为有损转换 *
// 注 释: ULONG data *taget : 目标地址 *
//*****************************************************************************
void HEXToBCD32(INT32U data,INT8U *taget)
{
unsigned char low;
low=0;
while( data>=10000000 )
{
data=data-10000000;
low=low+0x10;
}
while( data>=1000000 )
{
data=data-1000000;
low++;
}
*taget=low;
taget++;
low=0;
while( data>=100000 )
{
data=data-100000;
low=low+0x10;
}
while( data>=10000 )
{
data=data-10000;
low++;
}
*taget=low;
taget++;
low=0;
while( data>=1000 )
{
data=data-1000;
low=low+0x10;
}
while( data>=100 )
{
data=data-100;
low++;
}
*taget=low;
taget++;
low=0;
while( data>=10 )
{
data=data-10;
low=low+0x10;
}
low=low+data;
*taget=low;
}
//*****************************************************************************
// 函数原型: INT8U HEXToBCD(INT8U *s,INT8U cnt) *
// *
// 功 能: 单字节HEX到BCD转换,结果位1字节,转换0~99的数 *
// 注 释: *S 为输入数据地址 cnt 转换数据个数 *
//*****************************************************************************
void HEXToBCD8(INT8U *s,INT8U cnt)
{
for(;cnt>0;cnt--)
{
*s = ((*s/10)<<4)+(*s%10);
s++;
}
}
/*
*******************************************************************************
函数原型: BCDToHEX8(INT8U *datap,INT8U cnt)
功 能: 压缩BCD码转为HEX
注 释: 直接在数据所在位置操作
*******************************************************************************
*/
void BCDToHEX8(INT8U *datap,INT8U cnt)
{
for(;cnt>0;cnt--)
{
*datap = (*datap>>4)*10+(*datap&0x0f);
datap++;
}
}
/*
*******************************************************************************
函数 : void CopyRam(INT8U *sourse ,INT8U *target,INT8U cnt)
功能 : RAM 拷贝程序
*******************************************************************************
*/
void CopyRam(INT8U *sourse ,INT8U *target,INT8U cnt)
{
for(;cnt>0;cnt--)
{
*target = *sourse;
target++;
sourse++;
}
}
/*
*******************************************************************************
函 数 : INT8U CheckPin(INT8U Level,INT8U Pin)
功 能 : 检查管脚电平子函数
输 入 : PORT:输入端口 Level:检查电平高或低 Pin:检测管脚
输 出 : 1:检测条件正确 0:检测错误 *
*******************************************************************************
*/
INT8U CheckPin(INT8U pinx,INT8U level,INT8U pin)
{
INT8U i;
for(i=0;i<8;i++)
{
ShortDelay();
if(level>0)
{
if(CHKBIT(pinx,pin)==0)
{
return(0);
}
}
else
{
if(CHKBIT(pinx,pin))
{
return(0);
}
}
}
return(1);
}
/*
*******************************************************************************
函数 : HEX100Add(INT8U *preg,INT8U cnt)
功能 : 16进制BCD码累加子程序
注释: *preg:起始地址 cnt:累加位数
*******************************************************************************
*/
void HEX100Add(INT8U *preg,INT8U cnt)
{
for(;cnt>0;cnt--) // 指向累加整数位
{
if(++*preg >=100)
{
*preg -= 100;
preg++;
}
else return;
}
}
/*/------------------------------------------------------------------------------
void mIICDelay5us(void){
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
__asm("NOP");
}
void mIICDelay10ms(void){
int Delay10ms;
for(Delay10ms=0;Delay10ms<1300;Delay10ms++){
WDTCR2=0x4e;
}
}
void mIICStart(void){
SCLOUT(0);
__asm("NOP");
SDAOUT(1); ;
mIICDelay5us();
SCLOUT(1);
mIICDelay5us();
SDAOUT(0);
mIICDelay5us();
}
void mIICStop(void){
SDAOUT(0);
__asm("NOP");
SCLOUT(0);
mIICDelay5us();
SCLOUT(1);
mIICDelay5us();
SDAOUT(1);
mIICDelay5us();
}
unsigned char mIICReadSingle(unsigned char LastByte){
char BitCounter;
unsigned char DataBuf;
unsigned char SDATemp;
SDAOUT(1);
SDAC=0; //
for(BitCounter=0,DataBuf=0;BitCounter<8;BitCounter++){
SCLOUT(0);
mIICDelay5us();
SCLOUT(1);
mIICDelay5us();
DataBuf*=2;
SDAIN(SDATemp);
DataBuf+=SDATemp;
}
SCLOUT(0);
if (LastByte==cTrue)
SDAOUT(1);
else
SDAOUT(0);
mIICDelay5us();
SCLOUT(1);
mIICDelay5us();
SCLOUT(0);
SDAOUT(0);
mIICDelay5us();
return(DataBuf);
}
unsigned char mIICWriteSingle(unsigned char DataBuf){
char BitCounter;
for(BitCounter=0;BitCounter<8;BitCounter++){
SCLOUT(0);
if (DataBuf>127)
SDAOUT(1);
else
SDAOUT(0);
DataBuf*=2;
mIICDelay5us();
SCLOUT(1);
mIICDelay5us();
}
SCLOUT(0);
__asm("NOP");
SDAOUT(1);
mIICDelay5us();
SCLOUT(1);
mIICDelay5us();
SDAIN(BitCounter);
SCLOUT(0);
SDAOUT(0);
mIICDelay5us();
if (BitCounter==1) {
return(cFalse);
}
else {
return(cTrue);
}
}
unsigned char mIICReadPage(unsigned char * DataPointer,unsigned char DataLength, unsigned char SlaveAddress, unsigned char SubAddress){
unsigned char BusStatus;
pWPC=0;
pWP=0;
mDelay1ms();
mIICInit();
mIICStart();
BusStatus=mIICWriteSingle(SlaveAddress);
mIICStop();
if (BusStatus==cFalse)
mIICDelay10ms();
mIICStart();
BusStatus=mIICWriteSingle(SlaveAddress);
if (BusStatus==cFalse){
mIICStop();
return(cFalse);
}
BusStatus=mIICWriteSingle(SubAddress);
if (BusStatus==cFalse){
mIICStop();
return(cFalse);
}
mIICStart();
BusStatus=mIICWriteSingle(++SlaveAddress);
if (BusStatus==cFalse){
mIICStop();
return(cFalse);
}
if ((--DataLength)!=0){
for(;DataLength>0;DataLength--){
*DataPointer++=mIICReadSingle(cFalse);
}
}
*DataPointer=mIICReadSingle(cTrue);
mIICStop();
//pWPC=1;
//pWP=1;
return(cTrue);
}
unsigned char mIICWritePage(unsigned char * DataPointer, unsigned char DataLength, unsigned char SlaveAddress, unsigned char SubAddress){
char BusStatus;
pWPC=0;
pWP=0;
mDelay1ms();
mIICStart();
BusStatus=mIICWriteSingle(SlaveAddress);
mIICStop();
if (BusStatus==cFalse)
mIICDelay10ms();
mIICStart();
BusStatus=mIICWriteSingle(SlaveAddress);
if (BusStatus==cFalse){
mIICStop();
return(cFalse);
}
BusStatus=mIICWriteSingle(SubAddress);
if (BusStatus==cFalse){
mIICStop();
return(cFalse);
}
for(;DataLength>0;--DataLength){
BusStatus=mIICWriteSingle(* DataPointer++);
if (BusStatus==cFalse){
mIICStop();
return(cFalse);
}
}
mIICStop();
//pWPC=1;
//pWP=1;
return(cTrue);
}
*/
/*************************** END OF SUB **************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -