本帖最后由 olive2003 于 2014-1-15 14:26 编辑
写了个程序,
其中一段为
...
P0=0xff;
dat=P0;
...
不过不管用keil调试或者实际
电路连接,显示的情况都是dat=0x00,不知为什么,各位大大求解(P0脚我给悬空了,不会被其他回路拉低)
补充:keil用的单步调试,到了dat=P0这步后一步,观察窗口中的P0仍是0xff,但dat就是0x00不变;
顺便把那个程序的子程序弄出来吧
uchar read_ds(uchar add) //读取DS12C887,时,分,秒,也要先写地址。
{
dsas=1;
dsds=1;
dsrw=1;
P0=add;
dsas=0;
dsds=0;
P0=0xff;
dat=P0;
dsas=1;
dsds=1;
return dat;
}
化简后程序如下,单步到 dat=P0后P0值为0xff,之后不变但返回值(dat)还是0x02;
#include<reg52.h>
uchar qw;
uchar read_ds(uchar z) //读取DS12C887,时,分,秒,也要先写地址。
{
uchar dat;
P0=z*2;
P0=0xff;
dat=P0;
return dat;
}
void main()
{
qw=read_ds(0x01);
}
把P0口没上拉电阻给忘了。换成P1口后keil显示的答案总算正确了。感谢解答。
一周热门 更多>