📄 i2c.c
字号:
//i2c.c
#include "i2c.h"
#include <reg52.h>
#include <intrins.h>
#include "global.h"
/*
unsigned char i2c_EP_ok(void)
{
unsigned char tmp;
i2c_EP_start();
i2c_EP_send(EEPROM_rd);
tmp = i2c_EP_receive_Ack();
i2c_EP_end();
return tmp;
}
*/
void i2c_EP_start(void)
{
i2c_EP_SCL_1;
delay_us(10);
i2c_EP_DA_1;
delay_us(10);
i2c_EP_DA_0;
delay_us(10);
i2c_EP_SCL_0;
delay_us(10);
}
unsigned char i2c_EP_receive_Ack(void)
{
unsigned char tmp;
i2c_EP_SCL_1;
tmp = 0;
_nop_();
while ((i2c_EP_DA_receive)&&(tmp<255))
{
tmp++;
}
i2c_EP_SCL_0;
if (tmp == 255)
return FALSE;
else return TRUE;
}
/*
void i2c_EP_send_Ack(void)
{
i2c_EP_SCL_0;
i2c_EP_DA_0;
i2c_EP_SCL_1;
_nop_();
_nop_();
i2c_EP_SCL_0;
}
*/
void i2c_EP_send(unsigned char ddd)
{
unsigned char tmp,i,da;
tmp = 0x80;
da = ddd;
for (i = 0; i < 8; i++)
{
i2c_EP_SCL_0;
delay_us(10);
if ( da & tmp )
i2c_EP_DA_1;
else i2c_EP_DA_0;
delay_us(10);
i2c_EP_SCL_1;
delay_us(10);
i2c_EP_SCL_0;
da =(da<<1);
}
delay_us(10);
i2c_EP_DA_1;
delay_us(10);
}
unsigned char i2c_EP_receive(void)
{
unsigned char tmp,i;
tmp = 0;
for (i = 0; i < 8; i++)
{
i2c_EP_SCL_0;
delay_us(10);
i2c_EP_DA_1;
delay_us(10);
i2c_EP_SCL_1;
delay_us(10);
if ( i2c_EP_DA_receive )
tmp++;
delay_us(10);
i2c_EP_SCL_0;
if (i != 7)
tmp <<= 1;
}
return tmp;
}
void i2c_EP_end()
{
i2c_EP_SCL_0;
i2c_EP_DA_0;
delay_us(10);
i2c_EP_SCL_1;
delay_us(10);
i2c_EP_DA_1;
}
unsigned char EEPROM_write(unsigned char uiAddress, unsigned char ucData)
{
stopInterupt();
i2c_EP_start();
i2c_EP_send(EEPROM_wr);
if (!i2c_EP_receive_Ack())
return FALSE;
i2c_EP_send(uiAddress);
if (!i2c_EP_receive_Ack())
return FALSE;
i2c_EP_send(ucData);
if (!i2c_EP_receive_Ack())
return FALSE;
i2c_EP_end();
delay_us(50);
startInterupt();
}
unsigned char EEPROM_read(unsigned char uiAddress)
{
unsigned char tmp;
stopInterupt();
i2c_EP_start();
i2c_EP_send(EEPROM_wr);
if (!i2c_EP_receive_Ack())
return FALSE;
i2c_EP_send(uiAddress);
if (!i2c_EP_receive_Ack())
return FALSE;
i2c_EP_start();
i2c_EP_send(EEPROM_rd);
if (!i2c_EP_receive_Ack())
return FALSE;
tmp = i2c_EP_receive();
i2c_EP_end();
delay_us(50);
startInterupt();
return tmp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -