概述
51单片机I2C总线驱动,仅有.h文件,无.c文件。
适合EEPROM存储和PCF8591A/D-D/A转换等。。
/*************************************************************************************
**************
**************************************************************************************/
#ifndef __I2C_H__
#define __I2C_H__
#include "I2C.h"
#define uchar unsigned char
#define uint unsigned int
sbit SCL = P2^1;
sbit SDA = P2^0;
//void delay()
//{;;}
void I2C_start()
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
//
void I2C_stop()
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
//
void I2C_respons()
{
uchar i;
SCL=1;
delay();
while((SDA==1)&&(i<250))i++;
SCL=0;
delay();
}
//
void I2C_init()
{
SDA=1;
delay();
SCL=1;
delay();
}
uchar I2C_read_byte()
{
uchar i,k;
SCL=0;
delay();
SDA=1;
delay();
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;
SCL=0;
delay();
}
return k;
}
//
void I2C_write_byte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
SCL=0;
delay();
}
SDA=1;
delay();
}
//
void I2C_write_process(uchar addr,uchar cmd,uchar dat)
{
I2C_start();
I2C_write_byte(addr);
I2C_respons();
I2C_write_byte(cmd);
I2C_respons();
I2C_write_byte(dat);
I2C_respons();
I2C_stop();
}
//
uint I2C_read_process(uchar addr,uchar cmd)
{
uint date;
I2C_start();
I2C_write_byte(addr);
I2C_respons();
I2C_write_byte(cmd);
I2C_respons();
I2C_start();
I2C_write_byte(addr+1);
I2C_respons();
date = I2C_read_byte();
I2C_respons();
I2C_stop();
return date;
}
#endif
个人见解,感谢阅读。
最后
以上就是欣喜香氛为你收集整理的51单片机I2C总线驱动的全部内容,希望文章能够帮你解决51单片机I2C总线驱动所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复