楼主提供的开发板程序 我 的和你一样。我认为 读数据时是这样的:
1.刚开始的SDA会被8次移位移出去,对结果无影响。
2.第一次产生的下降沿所释放的数据被下一次for循环给捕捉,共进行了7次有效捕捉。
3.在for循环结束后应该加上语句:if(SDA)
temp|=0x80; 对1302的最高位进行捕获。
4.程序不修改能正常运行 我认为是:每次移位最高位被0代替,1302的各时间寄存器最高位内部永远达不到1,因为59对应01011001(BCD)。阴差阳错。
以上是我的见解。请指正。
改正的程序:
for (i=0;i>=1;
SCK=1;
_nop_();
_nop_(); //此处才开始产生下降沿,产生的数据会在下一次循环中被接受
SCK=0;
_nop_();
_nop_(); //右移一位
}
if(SDA)temp|=0x80; // 对最后释放的数据 进行采集
[ 本帖最后由 bvcbvc 于 2012-8-14 20:40 编辑 ]