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

📄 contr.c

📁 EEPROM局部抄写软件,可以任意设置地址,抄写一段数据,数据由母片提供.
💻 C
字号:
#include"reg52.h"
#include "intrins.h"
#define TRUE  1
#define FLASE 0
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
#define _Nop() _nop_()
sbit SDA2=P1^3;
sbit SCL1=P1^0;
 bit ack1;
////////////////////////////////
void JIYI_StartI2c( )
{

        SDA2 = 1;
	_Nop();
	_Nop();
	_Nop();
	SCL1 = 1;
	_Nop();    //  after stop must wait > 4.7 can to new start
       _Nop();
       _Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	SDA2 = 0;
	_Nop();    //  the start signal keep up to > 4.0
	_Nop();
	_Nop();
	_Nop();
       _Nop();
	_Nop();
	_Nop();
        SCL1 = 0;
	_Nop();    // T_low > 4.7
	_Nop();
       _Nop();
	_Nop();
       _Nop();
	_Nop();
	_Nop();

}

void JIYI_StopI2c()
{
	SDA2 = 0;
	_Nop();
	_Nop();
    SCL1 = 1;
	_Nop();
	_Nop();
	_Nop();
	_Nop();
    	_Nop();
    	_Nop();
	_Nop();
	SDA2 = 1;
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
}

void JIYI_Send_byte( uchar c )
{
	uchar BitCnt;
	for( BitCnt = 0; BitCnt < 8; BitCnt ++ )
	{
		if((c << BitCnt) & 0x80) SDA2 = 1;
		else SDA2 = 0;
		_Nop();
		_Nop();
		_Nop();
		SCL1 = 1;
   	    	_Nop();
		_Nop();
		_Nop();
        	_Nop();
        	_Nop();
		_Nop();
		_Nop();
		SCL1 = 0;
		_Nop();
		_Nop();
               _Nop();
	}
	_Nop();
	_Nop();
	_Nop();
   	SDA2 = 1;
	_Nop();
       _Nop();
	_Nop();
	SCL1 = 1;
	_Nop();
	_Nop();
       _Nop();
	_Nop();
	_Nop();
       _Nop();
	if (SDA2 == 1) ack1 =0;
	else ack1 = 1;
	SCL1 = 0;
	_Nop();
	_Nop();
	_Nop();
    	_Nop();
}

uchar JIYI_Rcv_byte()
{
	uchar retc;
	uchar BitCnt;

	retc = 0;
	SDA2 = 1;
	for( BitCnt = 0 ; BitCnt < 8; BitCnt ++)
	{
		_Nop();
		_Nop();
		_Nop();
		SCL1 = 0;
		_Nop();
		_Nop();
		_Nop();
		_Nop();
        	_Nop();
		_Nop();
		_Nop();
        	SCL1 = 1;
		_Nop();
		_Nop();
		_Nop();
		_Nop();
		_Nop();
		_Nop();
		_Nop();
		retc = retc << 1;
		if (SDA2 == 1) retc= retc +1;
		_Nop();
		_Nop();
		_Nop();
		_Nop();
    }
	SCL1 = 0;
	_Nop();
	_Nop();
	_Nop();
	_Nop();
   return(retc);
}

void JIYI_AckI2c( bit a )
{
	if ( a == 0) SDA2 = 0;
	else SDA2 = 1;
	_Nop();
	_Nop();
	_Nop();
	_Nop();
	_Nop();
    SCL1 = 1;
	_Nop();
	_Nop();
	_Nop();
    	_Nop();
    	_Nop();
	_Nop();
	SCL1 = 0;
	_Nop();
	_Nop();
	_Nop();
}
///////////////////////
bit JIYI_RS16K ( uchar sla, uchar suba, uchar *s, uchar no )
{
	uchar i;
	JIYI_StartI2c ();
	JIYI_Send_byte (sla);
    	if( ack1 == 0 ) return (0);
	JIYI_Send_byte (suba);
		if (ack1 == 0 ) return (0);
        JIYI_StartI2c();
	JIYI_Send_byte(sla + 1);
		if ( ack1 == 0) return ( 0 );
	for(i =0;i< no -1; i++)
		{
		*s = JIYI_Rcv_byte();
		JIYI_AckI2c(0);
		s++;
		}
	*s = JIYI_Rcv_byte();
	JIYI_AckI2c(1);
	JIYI_StopI2c();
	return(1);
}
/////////////////////////////////////////////
  bit JIYI_SendStr16K( uchar sla, uchar suba, uchar *s, uchar no )
{
        uchar i;
        JIYI_StartI2c();
        JIYI_Send_byte(sla);
        if(ack1 == 0)return (0);
        JIYI_Send_byte(suba);
           if(ack1 == 0)return (0);
        for( i = 0; i < no ;i ++)
        {
                JIYI_Send_byte(*s);
                if(ack1 == 0)return (0);
                s++;
         }
         JIYI_StopI2c();
         return (1);
}
	

⌨️ 快捷键说明

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