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

📄 i2c.c

📁 AVR系列单片机与PS2口通讯子程序
💻 C
字号:
#include <iom8.h>
#include "board.h"
////////////////////////////////////////
void i2c_star(void);
void i2c_stop(void);
uchar i2c_read(void);
void i2c_write(uchar data);
//***I2C开始信号****//
void i2c_star(void)
{
sda_1;
scl_1;
NOP();NOP();NOP();NOP();
sda_0;
NOP();NOP();NOP();NOP();
}
//****I2C停止信号****//
void i2c_stop(void)
{
sda_0;
scl_1;
NOP();NOP();NOP();NOP();
sda_1;
NOP();NOP();NOP();NOP();
}
//***i2C写入一字节信号****//
void i2c_write(uchar data)
{
uchar i;
scl_1;
for(i=8;i>0;i--)
  { 
    if(data&=0x80)  sda_1; else sda_0;
      data>>=1;
    NOP();NOP();NOP();NOP();
    scl_0;
    NOP();NOP();NOP();NOP();
    scl_1;    
  }
}
//*****2303接收八位数据后发低电平表示已经接收****//
uchar i2c_ack(void)
{
  uchar i;
ddr_sda_0;  
    scl_0;
   NOP(); NOP();
   if(sda) i=0; else i=1;
ddr_sda_1; 
return(i);
}
//***CPU每接收八位数据则发ASK***//
void i2c_nack(uchar i)
{   //参数: 为0 则继续接收  为1 则表示结束
  ddr_sda_1;
  scl_1;
  NOP();NOP();
if(i==1) sda_1; else sda_0;
 NOP();NOP();
 scl_0;
 NOP();NOP();
}
//****从i2c读一字节信号*****//
uchar i2c_read(void)
{
uchar i;
uchar data=0;
scl_0;
for(i=8;i>0;i--)
{
scl_1;
 NOP();NOP();NOP();NOP();
 if(sda) data++;
 data<<=1;
 scl_0;
  NOP();NOP();NOP();NOP();
}
return(data);
}

//*****向I2C写入数据****//
void i2c_write_data(uchar *data,uchar no)
{      //参数: 数据头地址 ,  数量
i2c_star();
i2c_write(0x64);
}





⌨️ 快捷键说明

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