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

📄 zixi3.c.c

📁 此程序在IAR Embedded Workbench 中
💻 C
字号:
#include<io8515.h>
#define I2C_TIMER 100
#define SDA PD4
#define SCL PD5
#define SET_SDA   PORTD|=(1<<SDA)
#define CLS_SDA   PORTD&=~(1<<SDA)
#define SET_SCL   PORTD|=(1<<SCL)
#define CLS_SCL   PORTD&=~(1<<SCL)
#define ACK_FALL  PIND&(1<<SDA)
#define SDA_HIGH  PIND&(1<<SDA)
void delay(unsigned int dt)
{
  while(dt)
  {
   asm("nop");
   dt--;
   asm("nop");
  };
}
void clock_high(void)
{
 delay(I2C_TIMER/2);
 SET_SCL;
 delay(I2C_TIMER/2);
}
void clock_low(void)
{
 delay(I2C_TIMER/2);
 CLS_SCL;
 delay(I2C_TIMER/2);
}
void I2C_start(void)
{
 clock_low();
 SET_SDA;
 delay(I2C_TIMER*2);
 clock_high();
 delay(I2C_TIMER*2);
 CLS_SDA;
 delay(I2C_TIMER*4);
 clock_low();
 delay(I2C_TIMER*4);
}
void i2c_stop(void)
{
 clock_low();
 CLS_SDA;
 delay(I2C_TIMER*2);
 clock_high();
 delay(I2C_TIMER*4); 
 SET_SDA;
 delay(I2C_TIMER*2);
}
unsigned char I2C_Rite(unsigned char wb)
{
 unsigned char i;
 for(i=0; i<8; i++)
  {
   clock_low();
   if(wb&0x80) SET_SDA;
    else CLS_SDA;
    clock_high();
    wb=wb<<1;  
   }
  clock_low();
  delay(I2C_TIMER*4);
  clock_high();
  while(i>1)
     {
      delay(I2C_TIMER);
      if(ACK_FALL) i--;
      else i=0;
     }
   clock_low();
   return i;
}
void I2C_Ack(void)
{
 clock_low();
 CLS_SDA;
 delay(I2C_TIMER); 
 clock_high();
 delay(I2C_TIMER*4);
 clock_low();
 SET_SDA;
}
unsigned char I2C_Read(void)
{
 unsigned char i;
 unsigned char rByte=0;
 for(i=0;i<8;i++)
  {
   clock_low();
   clock_high();
   if(SDA_HIGH) rByte|=1<<(7-i);
   clock_low();
  }
 return rByte;
}


⌨️ 快捷键说明

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