⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 80c51F020的开发程序 包括ADC DDS DAC
💻 C
字号:
/*------------------------------------------------------------
	File Name: 		i2c.c
	Auther:			Samuel
	Revision:		R1
	History:		R1			Jul.05, 2007		Creation
------------------------------------------------------------*/


#include "i2c.h"

// SMBus byte write function-----------------------------------------------------
// Writes a single byte at the specified memory location.
//
// out_byte = data byte to be written
// byte_address = memory location to be written into (2 bytes)
// chip_select = device address of EEPROM chip to be written to
void EEPROM_Send (char chip_select, unsigned int byte_address, char out_byte)
{
   
   I2C_Device=EEPROM; // To tell the interrupt service routine what the I2C device is!

   while (SM_BUSY);                          // Wait for SMBus to be free.
   SM_BUSY = 1;                              // Occupy SMBus (set to busy)
   SMB0CN = 0x44;                            // SMBus enabled,
                                             // ACK on acknowledge cycle

   BYTE_NUMBER = 2;                          // 2 address bytes.
   COMMAND = (chip_select | WRITE);          // Chip select + WRITE

   HIGH_ADD = ((byte_address >> 8) & 0x00FF);// Upper 8 address bits
   LOW_ADD = (byte_address & 0x00FF);        // Lower 8 address bits

   WORD = out_byte;                          // Data to be writen
   
   STO = 0;
   STA = 1;                                  // Start transfer

}

// SMBus random read function------------------------------------------------------
// Reads 1 byte from the specified memory location.
//
// byte_address = memory address of byte to read
// chip_select = device address of EEPROM to be read from
char EEPROM_Receive (char chip_select, unsigned int byte_address)
{
   
   I2C_Device=EEPROM; 	// To tell the interrupt service routine what the I2C device is!	   

   while (SM_BUSY);                          // Wait for bus to be free.
   SM_BUSY = 1;                              // Occupy SMBus (set to busy)
   SMB0CN = 0x44;                            // SMBus enabled, ACK on acknowledge cycle

   BYTE_NUMBER = 2;                          // 2 address bytes
   COMMAND = (chip_select | READ);           // Chip select + READ

   HIGH_ADD = ((byte_address >> 8) & 0x00FF);// Upper 8 address bits
   LOW_ADD = (byte_address & 0x00FF);        // Lower 8 address bits
   
   STO = 0;
   STA = 1;                                  // Start transfer
   while (SM_BUSY);                          // Wait for transfer to finish
   return WORD;
}


///////////////////////////////////////////////
void TEA5777_Send (void)
{
   	I2C_Device=TEA5777; 	// To tell the interrupt service routine what the I2C device is!	   
   	while (SM_BUSY);                          // Wait for bus to be free.
   	SM_BUSY = 1;                              // Occupy SMBus (set to busy)
   	SMB0CN = 0x44;                            // SMBus enabled, ACK on acknowledge cycle

   	COMMAND = 0xC0;           // TEA5777 address + WRITE
    BYTE_NUMBER=6;
   	STO = 0;
   	STA = 1; 
   	while (SM_BUSY);	                                 // 发起始条件
   		
}

///////////////////////////////////////////////
void TEA5777_Receive (void)
{
   	I2C_Device=TEA5777; 	// To tell the interrupt service routine what the I2C device is!	   
   	while (SM_BUSY);                          // Wait for bus to be free.
   	SM_BUSY = 1;                              // Occupy SMBus (set to busy)
   	SMB0CN = 0x44;                            // SMBus enabled, ACK on acknowledge cycle

   	COMMAND = 0xC1;           // TEA5777 address + READ

   	STO = 0;
   	STA = 1;                                  // 发起始条件
   	
	while (SM_BUSY);                          // Wait for transfer to finish
	TEA5777_receive_buffer[0]= WORD;
	SM_BUSY = 1;

	while (SM_BUSY);                          // Wait for transfer to finish
	TEA5777_receive_buffer[1]= WORD;
	SM_BUSY = 1;

    	AA=0;
	while (SM_BUSY);                          // Wait for transfer to finish
	TEA5777_receive_buffer[2]= WORD;

    //STO=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -