本帖最后由 whlove1314 于 2016-5-27 16:13 编辑
我的读程序为什么隔一秒显示一次,这一秒显示正常,下一秒就读到8个一(就是0x80),再下一秒就正常,然后又是8个一,搞了一早上了,现在都怀疑芯片坏了如果说程序有问题,那什么还能读到数据,若说没问题,为什么隔一秒无效一次
我现在观察到的现象是,正常显示时,数据输出稳定(每次读IO口数据一致,比如说,0s-1s期间程序多次读IO,每次数据都是0s)不正常时(8个一..)程序每读一次IO得到的数据都会从8个一跳变到8个0,非常奇怪
后来我在主函数只写了一个读取函数,去掉其他干扰项,用8个LED连接到P0口显示读到的BCD码,在读取程序后加了10ms循环延迟,发现不正常显示时,IO口读到数据会在8个1和8个0之间循环跳变,读一次变一次就是(0000 0001{此为正常显示,值为1}然后{1111 1111,0000 0000,1111 1111,0000 0000.....}一直这样循环,循环时间为1s)到了下一秒显示正常0000 0011(此值为3)但是中间丢失了一秒,那一秒刚才在那里乱蹦
我自己的理解是在:程序每个机器周期都会去读取ds1302的IO口,IO口的值在1s内应该是不变的,虽然多次读取,但是每次的值一样,机器周期非常短暂,人是无法察觉到的,给人的感觉就是数据是连续输出的(其实实在一遍一遍扫描的),每次写入的地址都是一样的,读到的值只跟ds1302有关,出现这个问题我实在找不到跟程序有关的地方,
所以,现在懵逼了......
刚才有点新发现,每次在乱蹦时,上一秒的数值不动,刚才延迟太短没看清,现在加大延迟,就看见了,比如说上秒显示(0000 0011)这一秒就是
(0000 0011,1111 1111,0000 0011,1111 1111.......)一直这样蹦,直到下一秒恢复正常,来位大神救命啊.....
|