|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
I2C总线问题求救! |
作者:alike 栏目:单片机 |
功能:按下按键,执行e2prom-at24c02写入操作, 现象:mcu死机 死机有可能是进入死循环等待状态,i2c程序是网上下的,全部代码可见于:http://www.fjmcu.com/article_view.asp?id=1 程序好像死在红色标记处:while(F0==1);。 void wrnbyta(uchar slaw,uchar gg[],uchar n) { do{ sta( ); wrbyt(slaw); cack( ); }while(F0==1); wrbyt(gg[n]); cack( ); } F0在cack()函数中赋值,实际情况是在调用cack()函数过程中,实际上语句 F0=1 被执行;但按分析i2c在响应应答过程中,SDA 应该被赋 0,从而F0=1 应该不被执行才对。 而且,量SDA管脚电平为低电平(0.6V),也就是说,硬件SDA已经为低,但仍然执行了if(SDA==1) F0=1; 为什么?想不通! void cack( )/*应答位检查*/ { SDA=1; SCL=1; F0=0; if(SDA==1) F0=1; SCL=0; nop( ); } 另外,此段函数如果在单片机刚上电初始化时调用,不会有问题。 是什么原因造成的呢 ? 谢谢! |
2楼: | >>参与讨论 |
作者: 涤纶 于 2006/3/29 13:16:00 发布:
/- ISDA=1; I2CWAIT();/DELAY _nop_ _nop_ ISCL=1; I2CWAIT(); ACK=ISDA; ISCL=0; I2CWAIT(); RETURN ACK; 是不是时序不够安全。 * - 本贴最后修改时间:2006-3-29 13:19:26 修改者:涤纶 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |