永发信息网

关于I2C总线模拟程序

答案:1  悬赏:0  手机版
解决时间 2021-11-12 06:04
关于I2C总线模拟程序
最佳答案
1、接收从机的ACK信号,把SDA置高是为了读取ACK信号,你必须要再送一个SCK时钟信号,从机才会发送低电平的ACK信号给主机。IIC是主从式同步通信,主机必须要发送时钟来同步数据位。
2、读取ACK位,只要在ACK的SCK时钟内读SDA,为低就是从机发送了ACK,为高从机没有应答,这时要重新发送一遍数据。
3、通过停止IIC总线结束传输。
4、建议到网上搜点关于iic的pdf资料。
实例代码如下:
//IIC存储器函数
void iic_wait(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}

void iic_stop(void)
{
SDA=0;
SCL=0;
iic_wait();
SCL=1;
iic_wait();
SDA=1;
}

void iic_start(void)
{
SDA = 1;
SCL = 1;
iic_wait();
SDA = 0;
iic_wait();
SCL = 0;
}

void iic_ack(void)
{
SDA=0;
iic_wait();
SCL=1;
iic_wait();
SCL=0;
}

void iic_no_ack(void)
{
SDA=1;
iic_wait();
SCL=1;
iic_wait();
SCL=0;
}

bit iic_wait_ack(void)
{
uchar errtime;
errtime=255;
//uint errtime = 1000;
SDA=1;
iic_wait();
SCL=1;
iic_wait();
while(SDA);
SCL=0;
return 1;
}

void iic_send_byte(uchar idata sbyte)
{
uchar i = 8;
while(i--)
{
SCL = 0;
_nop_();
_nop_();
_nop_();
SDA = (bit)(sbyte&0x80);
sbyte <<= 1;
iic_wait();
SCL = 1;
iic_wait();
}
SCL=0;
}

uchar iic_receive_byte(void)
{
uchar i=8;
uchar ddata=0;
SDA=1;
while(i--)
{
ddata <<= 1;
SCL=0;
iic_wait();
SCL=1;
iic_wait();
ddata |= SDA;
}
SCL=0;
return ddata;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
初三呃!怎么样才能让自己不要在感情里里陷下
从西安市高铁站到马呼坨坐哪路公交
请问:事故调查组事故调查所说的时间是工作日
求练气之法和人体经脉图
妹子们,你们订婚买的什么首饰?
请你说出伊索寓言其中一项深刻的五则寓言名字
墙上很多小虫子 扁平身体 如图 求名字
出马仙家立堂口非得登仙榜吗
"荆" 字在字典里的解释意是什么?
昨晚和父亲走广场散步看见年轻一男一女在一起
我鼻子好象有什么东西堵住了,好长时间了
阿城区哈尔滨春妮馅饼(阿城店)在什么地方啊,
狼族日韩专业烫染地址有知道的么?有点事想过
临沂市罗庄区二十三中、二十八中、四十中,哪
g2904在深圳北是b区还是a区
推荐资讯
泗阳现在结婚彩礼这些大概是多少
为什么汇知考轻松计算机职称电脑软件一个授权
辐射岛攻略所有塔全降下来以后接下来怎么玩
湖北省黄冈市武穴市红旗中学2010届毕业的九(
有张家口做mbi的吗,是不是传销
8x减7x=2分之1解方程
3Dmax8提示缺少mtlgen.dlt是怎么回事
show-off是什么意思
装点是什么意思?
苹果6电信版和联通版有什么区别?区别在哪?
宅男宅女影视软件哪个好
孙杨老家是哪的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?