i2c.c

来自「采用CYGNAL F015单片机」· C语言 代码 · 共 50 行

C
50
字号
//#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 + =
减小字号Ctrl + -
显示快捷键?