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

📄 iic.c

📁 两个文件夹:circuit and code ! code 源码包包括3个文件夹: 脚本文件boot ---- 下载down----- 主函数main-----
💻 C
字号:
/**************************************************************************************************
 * FILENAME
 *     timer.c
 *
 * VERSION
 *     1.0
 *
 * DESCRIPTION
 *     This file contains the timer initial routine and timer ISR.
 *
 * DATA STRUCTURES
 *     None
 *
 * FUNCTIONS
 *     1. Fun_TimerX_ISR()
 *     2. Fun_TimerInitialize()
 *
 * HISTORY
 *     10/28/2003		 Ver 1.0 Created by Hank Ji
 *
 * REMARK
 *     None
 *     
 *************************************************************************************************/
#include <stdio.h>
#include "740defs.h"

#define C_iic
#include "ist.h"

//uint8 xre;

/******************I2C 接口基本函数********************/
void delay(void)
{
  nops;
  nops;
  nops;
}

void I_start(void)
{
  SCL_DIR_OUT;
  SDA_DIR_OUT;

  SCL_HI;
  delay();
  SDA_LO;
  delay();
  SCL_LO;
  delay();  
}

void I_stop(void)
{
  SDA_LO;
  delay();
  SCL_HI;
  delay();
  SDA_HI;
  delay();
  SCL_LO;
  delay();
}

void I_init(void)
{
  SCL_LO;
  I_stop();
}

bool I_clock(void)
{
  uint32 x;
  SCL_HI;
  delay();
  
  x = SDA_INPUT; 
//  xre = x;
  
  SCL_LO;
  delay();
   
  if(x == 0 )
  {
    return 0;
  }
  
  return 1;  
}


bool I_send(uint8 I_data)
{
  uint8 i,x;
  for(i=0;i<8;i++)
  {
     x = I_data & 0x80;
     if(x == 0)
     {
        SDA_LO;
     }
     else
     {
        SDA_HI;
     }
     
     I_data =I_data <<1;

     SCL_HI;
	 delay();
     SCL_LO;
     delay();
  }
  
  delay();
  SDA_DIR_IN;
  delay();
  if(I_clock() == 0)
  {
     if(SDA_INPUT == 1)
     {  SDA_HI;  }
     else
     {  SDA_LO;  }

     SDA_DIR_OUT; 
     return 1;
  }
  
  if(SDA_INPUT == 1)
  {   SDA_HI;  }
  else
  {   SDA_LO;  }

  SDA_DIR_OUT;
  return 0;  
}

uint8 I_receive(void)
{
  uint8 i;
  uint8 I_data = 0;
  uint8 x;
  
  SDA_DIR_IN;
  
  for(i=0;i<8;i++)
  {
    I_data *= 2;
    if(I_clock() == 1)
    {
       I_data++;
       x = 1;
    } 
	else
	{
       x = 0;
    } 
  }
  
  if(x==1)
  {
	SDA_HI;  
  }
  else
  {
  	SDA_LO;
  }
  
  SDA_DIR_OUT;

  return I_data;
}

void I_Ack(void)
{
  SDA_LO;
  I_clock();
  SDA_HI;
}

/******************I2C 接口应用函数********************/

bool E_address(uint8 Address)
{
   I_start();
   if(I_send(I2C_WRITE))
       return (I_send(Address));
   else    
       return 0;
}


bool E_read_byte(uint8 Address)
{
   if(E_address(Address))
   {
      I_start();
      if(I_send(I2C_READ))
      {
         I2C_byte = (I_receive());
         SCL_HI;
		 delay();
    	 SCL_LO;
	     delay();
         I_stop();
         return 1;      
      }
      else
      {
         I_stop();
         return 0;
      }
   }
   else
   {
      I_stop();
      return 0;
   }
}

bool E_write_byte(uint8 Address,uint8 data)
{
   if((E_address(Address))&&(I_send(data)))
   {
     I_stop();
     Fun_delay_1ms(20);
     return 1;
   }
   else
   {
     return 0;
   }
   
}


uint8 Fun_read_status(uint8 Address)
{
  if(E_address(Address))
  {
    return I2C_byte;  
  }
  
  return 0xff;
}



⌨️ 快捷键说明

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