碰到一个问题,求解答

2019-07-15 21:02发布

本帖最后由 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;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
ntmusic
1楼-- · 2019-07-15 23:59
 精彩回答 2  元偷偷看……
olive2003
2楼-- · 2019-07-16 05:35
试着把整个程序多余的部分去掉,发现P0的值取决于形参,想不明白。

化简后程序如下,单步到 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);
}   
olive2003
3楼-- · 2019-07-16 08:17
ntmusic 发表于 2014-1-15 16:13
89C51系列单片机的话,P0口是没有上拉电阻的,因此你P0口悬空的话,读P0口一般是没有意义的。Keil仿真无法 ...

把P0口没上拉电阻给忘了。换成P1口后keil显示的答案总算正确了。感谢解答。
馨雨
4楼-- · 2019-07-16 09:43

一周热门 更多>