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

📄 i2c.c

📁 电源控制,NEC遥控IR接受,和IR模拟发送代码,
💻 C
字号:

#include    <reg52.h>
#include    <intrins.h>
#include    "common.h"
#include    "define.h"
#include    "delay.h"
#include    "I2C.h"

#ifdef USE_STCMCU_EEPROM
/* 打开 ISP,IAP 功能 */
void ISP_IAP_enable(void)
{
     EA	=	0;	/* 关中断 */
     ISP_CONTR=ISP_CONTR & 0x18;       /* 0001,1000 */
     ISP_CONTR=ISP_CONTR | WAIT_TIME;
     ISP_CONTR=ISP_CONTR | 0x80;       /* 1000,0000 */
}

/* 关闭 ISP,IAP 功能 */
void ISP_IAP_disable(void)
{
     ISP_CONTR=ISP_CONTR & 0x7f;	/* 0111,1111 */
     ISP_TRIG	  =0x00;
     EA		  =1;                	/* 开中断 */
}

void ISP_IAP_Start(void)
{
     ISP_TRIG	=0x46;
     ISP_TRIG	=0xb9;
     _nop_();

}
/* 字节读 */

uchar Stc89x_byte_read(uint byte_addr)
{
       uchar idata TmpData,TryCnt;
	ISP_ADDRH	=	(uchar)(byte_addr >> 8);
	ISP_ADDRL	=	(uchar)(byte_addr & 0x00ff);
	ISP_IAP_enable();
	TryCnt=5;
	while(TryCnt--)
	{
	   ISP_CMD	=	ISP_CMD&0xf8;        /* 1111,1000 */
	   ISP_CMD	=	ISP_CMD|ISP_IAP_BYTE_READ;        /* 0000,0001 */
	   ISP_IAP_Start();
	   TmpData=ISP_DATA;
	   Delay100us();	   
	   ISP_CMD	=	ISP_CMD&0xf8;        /* 1111,1000 */
	   ISP_CMD	=	ISP_CMD|ISP_IAP_BYTE_READ;        /* 0000,0001 */
	   ISP_IAP_Start();
	   if(TmpData==ISP_DATA)break;	   
	}
	ISP_IAP_disable();
	return (TmpData);
}

/* 字节编程 */
void Stc89x_byte_write(uint byte_addr, uchar original_data)
{
       uchar idata TryCnt;
	ISP_ADDRH	=	(uchar)(byte_addr >> 8);
	ISP_ADDRL	=	(uchar)(byte_addr & 0x00ff);
	ISP_IAP_enable();
	TryCnt=5;
	while(TryCnt--)
	{
	   ISP_CMD	=	ISP_CMD&0xf8;        /* 1111,1000 */
	   ISP_CMD	=	ISP_CMD|ISP_IAP_BYTE_PROGRAM;/* 0000,0010 */
	   ISP_DATA	=	original_data;	  
	   ISP_IAP_Start();
	   Delay100us();  
	   ISP_DATA	=	0x00;
	   ISP_CMD	=	ISP_CMD&0xf8;        /* 1111,1000 */
	   ISP_CMD	=	ISP_CMD|ISP_IAP_BYTE_READ;        /* 0000,0001 */
	   ISP_IAP_Start();
	   if(original_data==ISP_DATA)break;	  
	}
//	if(!TryCnt)okflg=1;
//	else
//	  okflg=0 ;	
	ISP_IAP_disable();	
}

/* 扇区擦除 */
void Stc89x_sector_erase(uint sector_addr)
{
	uint get_sector_addr	=0;
	get_sector_addr            =(sector_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */
	ISP_ADDRH        		=(uchar)(get_sector_addr >> 8);
	ISP_ADDRL		       =0x00;
	ISP_CMD	              =ISP_CMD&0xf8;	/* 1111,1000 */
	ISP_CMD	              =ISP_CMD|ISP_IAP_SECTOR_ERASE;/* 0000,0011 */
	ISP_IAP_enable();
	ISP_IAP_Start();	
	ISP_IAP_disable();
}
#endif

⌨️ 快捷键说明

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