📄 i2c.c
字号:
#include "main.h"
#include "dip.h"
#include "Key.h"
#include "I2C.h"
void MI2CStart(void) {
pI2CSDA=1;
pI2CSCL=1;
NOP();
NOP();
pI2CSDA=0;
NOP();
NOP();
NOP();
NOP();
pI2CSCL=0;
return;
}
void MI2CStop(void) {
pI2CSCL=0;
pI2CSDA=0;
NOP();
NOP();
pI2CSCL=1;
NOP();
NOP();
NOP();
NOP();
pI2CSDA=1;
return;
}
void MI2CWrite(unsigned char Value) {
unsigned char idata i;
for(i=0; i<8; i++) {
if(Value&0x80)pI2CSDA=1;
else pI2CSDA =0;
pI2CSCL=1;
Value<<=1;
NOP();
NOP();
NOP();
pI2CSCL=0;
}
pI2CSDA=1;
pI2CSCL=1;
return;
}
/*==============================================================================
==============================================================================*/
unsigned char MI2CRead(void) {
unsigned char idata i, Value=0;
pI2CSDA=1;
for(i=0; i<8; i++) {
pI2CSCL=1;
Value<<=1;
NOP();
NOP();
if(pI2CSDA)Value |=0x01;
else Value &=0xfe;
pI2CSCL=0;
}
return Value;
}
/*==============================================================================
==============================================================================*/
void MI2C_Ack(bit ack) {
pI2CSDA=ack;
NOP();
NOP();
pI2CSCL=1;
NOP();
NOP();
NOP();
pI2CSCL=0;
return;
}
/*==============================================================================
==============================================================================*/
unsigned char MCU_Read(unsigned char address) {
unsigned char idata Value;
MI2CStart();
MI2CWrite(0xa0);
MI2C_Ack(0);
MI2CWrite(address);
MI2C_Ack(0);
MI2CStart();
MI2CWrite(0xa1);
MI2C_Ack(0);
Value=MI2CRead();
MI2C_Ack(1);
MI2CStop();
return Value;
}
/*==============================================================================
==============================================================================*/
void MCU_Write(unsigned char address, unsigned char bytedata){
MI2CStart();
MI2CWrite(0xa0);
MI2C_Ack(0);
MI2CWrite(address);
MI2C_Ack(0);
MI2CWrite(bytedata);
MI2C_Ack(0);
MI2CStop();
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -