您的位置 首页 分销

51单片机I2C总线协议的完成

———————–函数声明,变量定义——————————————————-includereg51h

//———————–函数声明,变量界说——————————————————-

#include

#include

sbit SDA=P1^0;// 将p1.0口模仿数据口

sbit SCL=P1^1;// 将p1.1口模仿时钟口

#define NUM 10 // 接纳和发送缓存区的深度

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

unsignedcharidata sendbuf[NUM];// 数据发送缓冲区

unsignedcharidata receivebuf[NUM];// 数据接纳缓冲区

bit bdata SystemError;// 从机过错标志位

//————————————————————————————————

// 函数称号: iic_start()

// 函数功用: 发动I2C总线子程序

//————————————————————————————————

voidiic_start(void)

{ EA=0;//时钟坚持高,数据线从高到低一次跳变,I2C通讯开端

SDA = 1;

SCL = 1;

delayNOP();// 延时5us

SDA = 0;

delayNOP();

SCL = 0;

}

//————————————————————————————————

// 函数称号: iic_stop()

// 函数功用: 中止I2C总线数据传送子程序

//————————————————————————————————

voidiic_stop(void)

{

SDA = 0;//时钟坚持高,数据线从低到高一次跳变,I2C通讯中止

SCL = 1;

delayNOP();

SDA = 1;

delayNOP();

SCL = 0;

}

//————————————————————————————————

// 函数称号: slave_ACK

// 函数功用: 从机发送应对位子程序

//————————————————————————————————

voidslave_ACK(void)

{

SDA = 0;

SCL = 1;

delayNOP();

SDA = 1;

SCL = 0;

}

//————————————————————————————————

// 函数称号: slave_NOACK

// 函数功用: 从机发送非应对位子程序,迫使数据传输进程完毕

//————————————————————————————————

voidslave_NOACK(void)

{

SDA = 1;

SCL = 1;

delayNOP();

SDA = 0;

SCL = 0;

}

//————————————————————————————————

// 函数称号: check_ACK

// 函数功用: 主机应对位查看子程序,迫使数据传输进程完毕

//————————————————————————————————

voidcheck_ACK(void)

{

SDA = 1;// 将p1.0设置成输入,有必要先向端口写1

SCL = 1;

F0 = 0;

if(SDA == 1)// 若SDA=1标明非应对,置位非应对标志F0

F0 = 1;

SCL = 0;

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/257788.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部