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