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

📄 function.c

📁 本代码以AVR单片机为主控制器
💻 C
📖 第 1 页 / 共 2 页
字号:
        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 + -