📄 i2c.c
字号:
//#include <i2c.h>
// SMBus 字节写函数-----------------------------------------------------
// 向给定存储器地址写一个字节
//
// out_byte = 待写数据
// byte_address = 待写存储器地址2字节
// chip_select = 待写EEPROM芯片的器件地址
void SM_Send (char chip_select, unsigned int byte_address, char out_byte)
{
while (SM_BUSY); // 等待SMBus空闲
SM_BUSY = 1; // 占用SMBus设置为忙
SMB0CN = 0x44; // SMBus允许应答周期发ACK
BYTE_NUMBER = 2; // 2地址字节
RBYTE_NUMBER=2;
STEP=0;
COMMAND = (chip_select | WRITE); // 片选 + WRITE
LOW_ADD = (byte_address & 0x00FF); // 低8位地址
WORD = out_byte; // 待写数据
STA = 1; // 启动传输过程
while (SM_BUSY); // 等待SMBus空闲
}
// SMBus随机读函数-----------------------------------------------------
// 从给定存储器地址读一个字节
//
// byte_address = 要读取的存储器地址
// chip_select = 待读EEPROM的器件地址
void SM_Receive (char chip_select, unsigned char byte_address,unsigned char byte_length)
{
while (SM_BUSY); // 等待总线空闲
SM_BUSY = 1; //占用SMBus设置为忙
SMB0CN = 0x44; // 允许SMBus应答周期发ACK
BYTE_NUMBER = 1; // 2地址字节
COMMAND = (chip_select | READ); // 片选 + READ
LOW_ADD = byte_address; // 低8位地址
RECVLEN = byte_length;
STA = 1; // 启动传输过程
//while (SM_BUSY); // 等待传输结束
}
void delay(int time)
{
int i;
for(i=0;i<time;i++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -