新闻中心

EEPW首页>嵌入式系统>设计应用> I2C总线在8051单片机系统中的应用

I2C总线在8051单片机系统中的应用

作者: 时间:2013-01-06 来源:网络 收藏


  4、虚拟软件结构

  对于虚拟来说要实现其功能主要是要软件要注意I2C器件的操作时序,总线的运行由主机控制。所谓主机即启动数据的传送即发出启动信号,发出时钟信号,传送结束时发出停止信号的设备,通常主机是微处理器。被主机寻访的设备都称为从机。为了进行通讯,每个接到的设备都有一个唯一的地址,以便于主机寻访。主机和从机的数据传送,可以由主机发送数据到从机,也可以是从机发到主机。凡是发送数据到总线的设备称为发送器,从总线上接收数据的设备被称为接受器。根据I2C的时序,软件分为开始、停止、应答、检查应答、不产生应答、读操作、写操作。以下为C程序清单调试成功。


  #include
  Sbit sda=P1^7;
  Sbit SCL=P1^6;


  启动函数,在SCL为高时,SDA的下降沿为启动信号。

void Start(void)

{ scl=0; //SCL处于低电平时,SDA才能改变
sda=1;// 一个"开始"状态,该状态必须在其他命令之前执行
scl=1; // 当scl为高电平时sda的下降沿表示开始状态
_nop_(); _nop_(); _nop_(); //给一个延时
sda=0; //给下降沿表示开始
_nop_(); _nop_(); _nop_(); _nop_();
scl=0; //恢复低电平以改变sda的值
sda=1; }


  停止函数,在SCL为高时,SDA的上升沿为停止信号。

void Stop(void)
{scl=0; //SCL处于低电平时,SDA改变数值 */
sda=0; //scl为高电平时,sda的上升沿表示停止,
scl=1; //scl为高电平时改变sda的状态表示启动,停止
_nop_(); _nop_(); _nop_(); // 延时
sda=1;
_nop_(); _nop_(); _nop_();
scl=0; }
/* * * * * 检查应答位 * * * * */
bit RecAck(void)
{ scl=0; //在scl为0的时候改变sda的值
sda=1;
scl=1; //在scl为1的时候等待sda值的变化,在器件接受到数据后会把sda拉低。
_nop_(); _nop_(); _nop_(); _nop_();
CY=sda; // 因为返回值总是放在CY中的
scl=0;
_nop_();
return(CY); //如果为CY为低则表示接受成功,如果为高,则表示接受失败。
}
/* * * * *对I2C总线产生应答(一般用在读操作中) * * * * */
void Ack(void)
{
sda=0;// EEPROM通过在收到每个地址或数据之后,
_nop_();_nop_();
scl=1;//置SDA低电平的方式确认表示收到读SDA口状态
_nop_(); _nop_(); _nop_(); _nop_();
scl=0;
_nop_();
sda=1;
}

/* * * * * * * * * 不对I2C总线产生应答 * * * * */
void NoAck(void)
{ sda=1;
scl=1;
_nop_(); _nop_(); _nop_(); _nop_();
scl=0;
}


  向I2C总线写数据,每次写8位数据。

void Send(uchar sendbyte)
{uchar j=8;
for(;j>0;j--)
{scl=0;//拉低scl准备给上升沿
delay(5);//延时
sendbyte = 1;// 使CY=sendbyte^7;
sda=CY; // CY 进位标志位
scl=1; //给上升沿,发出sda的状态值
}
scl=0;
}


  从I2C总线上读数据子程序 ,每次读8位数据。

uchar Receive(void)
{ register receivebyte,i=8;
scl=0;
while(i--)
{ scl=1; //拉高scl准备给下降沿
receivebyte=(receivebyte 1)|sda; //接受值左移一位把低位和sda相或得到sda的状态值
scl=0; //给下降沿发出sda的状态值
}
return(receivebyte);
}


  5、结论

  本文介绍了I2C总线的组成及时序,并以ATMEL公司的为例给出了用C语言模拟I2C总线的时序的起始、停止及CPU向I2C总线的发送和接收8位字节的程序。


  6、参考文献

  【1】马忠梅.籍顺心.张凯.马岩.单片机的C语言应用程序设计【M】.北京航空航天大学出版社.2003

  【2】杨将新.李华军.刘东骏.单片机程序设计及应用从基础到实践【M】.电子工业出版社.2006

  【3】边春远.王志强.MCS-51单片机应用开发实用子程序【M】.人民邮电出版社.2005

  【4】陈小忠.黄宁.赵小侠.单片机接口技术实用子程序【M】.人民邮电出版社.2006

  【5】陈柄和.C语言与C++语言程序设计【M】. 北京航空航天大学出版社.2004

c++相关文章:c++教程



上一页 1 2 下一页

关键词:I2C总线8051AT24C256

评论


相关推荐

技术专区

关闭