• 大小: 6KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: 其他
  • 标签: STM8S_I2C  

资源简介

STM8S 模拟I2C程序 源码 使用IO口驱动I2C,绝对可用,没有问题,请放心下载!

资源截图

代码片段和文件信息

STM8S 模拟I2C程序
xu52rd Post at 2012-7-13 23:38:00

STM8S的硬件I2C还是存在问题不敢贸然使用.

于是决定用模拟I2C.

写于 2011-03-27 11:

 

#define SCL              PE_ODR_ODR1
#define SDA              PE_ODR_ODR2
#define SDAM             PE_IDR_IDR2
#define SET_SCL_OUT()    {PE_DDR_DDR1=1; PE_CR1_C11 = 1; PE_CR2_C21 = 0;}
#define SET_SDA_OUT()    {PE_DDR_DDR2=1; PE_CR1_C12 = 1; PE_CR2_C22 = 0;}
#define SET_SDA_IN()     {PE_DDR_DDR2=0; PE_CR1_C12 = 0; PE_CR2_C22 = 0;}
//--------------------------------------------------------------
// Prototype      : void I2C_Start(void)
// Calls          : Delay_5us()
// Description    : Start Singnal
//--------------------------------------------------------------
void I2C_Init(void)
{
   I2C_CR1 &= 0xFE;      //  PE=0 disable I2C module  
   SET_SCL_OUT();
   SET_SDA_OUT();   
}


//--------------------------------------------------------------
// Prototype      : void Delay_5us(void)
// Description    : 大约延时5us
//--------------------------------------------------------------
void Delay_5us(void)
{
   uchar i;                   //fcpu 8MHz 时
   for (i=50; i>0; i--);
}

 

//--------------------------------------------------------------
// Prototype      : void I2C_Start(void)
// Calls          : Delay_5us()
// Description    : Start Singnal
//--------------------------------------------------------------
void I2C_Start(void)
{
    // SDA 1->0 while SCL High
    SDA = 1;                    
    SCL = 1;                    
    Delay_5us();                
    SDA = 0;                   
    Delay_5us();                
    SCL = 0;                    
}


//--------------------------------------------------------------
// Prototype      : void I2C_Stop(void)
// Calls          : Delay_5us()
// Description    : Stop Singnal
//-------------------------------------------------------------- 
void I2C_Stop(void)
{
    // SDA 0->1 while SCL High
    SDA = 0;                   
    SCL = 1;                   
    Delay_5us();                
    SDA = 1;                   
    Delay_5us();               
}

//--------------------------------------------------------------
// Prototype      : void I2C_SendACK(uchar ack);
// Calls          : Delay_5us()
// Parameters     : bit ack:1-noack 0-ack
// Description    : Master device send ACK to slave device.
//--------------------------------------------------------------
void I2C_SendACK(uchar ack)
{
    if(ack == 0)
    {
      SDA = 0; 
    }  
    else
    {
      SDA = 1; 
    }
            
    SCL = 1;                   
    Delay_5us();  
    
    SCL = 0;                    
    Delay_5us();     
}

//--------------------------------------------------------------
// Prototype      : uchar I2C_SendByte(uchar sendDAT)
// Cal

评论

共有 条评论

相关资源