微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 碰到一个问题,求解答

碰到一个问题,求解答

时间:10-02 整理:3721RD 点击:

写了个程序,
其中一段为
...
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;
}

89C51系列单片机的话,P0口是没有上拉电阻的,因此你P0口悬空的话,读P0口一般是没有意义的。Keil仿真无法准确反映真实情况的

试着把整个程序多余的部分去掉,发现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);
}   

把P0口没上拉电阻给忘了。换成P1口后keil显示的答案总算正确了。感谢解答。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top