C51管脚拉高问题

evildoor   2008-7-29 20:02 楼主
sbit BEEP = P1^3;

BEEP=1; //蜂鸣
for(beep_delay=10;beep_delay>0;beep_delay--);
BEEP=0;

将蜂鸣器蜂鸣然后关闭,但是BEEP管脚一直是低电平,为什么?

回复评论 (24)

没看懂你的意思!
你设BEEP=0后再没对它负值,它就应该一直是低吧!
点赞  2008-7-29 20:28
不是,我是定义了BEEP管脚为P1.3后将其拉高,但实际上P1.3还是低电平,BEEP一直是低电平就没变高过,BEEP=1没起作用。
点赞  2008-7-29 20:39
在51单片机里面,P0口是无驱动能力的,要输出高电平必须有外部上拉电阻,

上拉电阻 就是外面加一个5V电压 和一个电阻,电阻一端连在5V上;另一端连P0口;就好了;

好好把上拉态和高阻态搞懂;

点赞  2008-7-29 21:10
不好意思 刚才看错了

  你用单步调试,当调试到BEEP=1; //蜂鸣时,你去看看端口的数值是不是高电平;

还有蜂鸣器叫吗?如果叫的话说明他是有高电平的啊!!!!
  还有你的延时程序时间太短,让你看上去就像一直是低电平!!

  要么单步执行;要么加大延时时间;到几秒钟的时间!!!
点赞  2008-7-29 21:15
我就是用单步调试的,到BEEP=1;后还是低电平。我单步调试的时候就停在BEEP=1后不运行了,我看了BEEP管脚还是低电平。
点赞  2008-7-29 21:22
引用: 引用 5 楼 gengjia8512 的回复:
我就是用单步调试的,到BEEP=1;后还是低电平。我单步调试的时候就停在BEEP=1后不运行了,我看了BEEP管脚还是低电平。

单步调试,应该是运行到下一行语句,才是上一行语句被执行结束。
你停在BEEP=1说明这行还没执行。

其实你为了确认,完全可以
while(1)
{
    BEEP=1;
}

这样就知道能不能置高了。

还有,for(beep_delay=10;beep_delay>0;beep_delay--);  会非常短,短到不用示波器都看不出来,如果不是单步而是直接运行的话,根本听不到蜂鸣器响的。
点赞  2008-7-29 21:49
没听懂你的问题。。。
点赞  2008-7-29 21:51
while(1)
{
    BEEP=1;
}
类似的调试我都试过了,BEEP总是低电平。
点赞  2008-7-29 22:11
我是想问为什么BEEP管脚一直是低电平就是拉高不了,至于软件方面我把这段程序放到实验板上是可以拉高的,放到我做的的板子上就拉高不了,但是其他管脚都是正常的可以拉高降低。
点赞  2008-7-29 22:19
上面那段程序蜂鸣器由于管脚一直是低电平,所以并没有蜂鸣,我就是想问为什么管脚一直是低电平拉不高的原因。
点赞  2008-7-29 22:21
P1口的驱动能力足够。
换过芯片吗?试过P1的其他口吗?
点赞  2008-7-30 09:04
其他口接设备都正常,所以很困惑。
点赞  2008-7-30 10:37
芯片没问题,放到实验板上是正常的。
点赞  2008-7-30 10:38
P1^3挂空后运行程序看看是不是能拉高,

另外这个口上有拉高电阻吗?

最好加一个9012去驱蜂鸣器
点赞  2008-7-30 12:13
用软件模拟仿真,单步执行,观看P1.3输出状态。是软件还是你的硬件电路出问题就有明确的方向了。
或者将蜂鸣器定义到其它脚,试试看。
点赞  2008-7-30 13:17
???
点赞  2008-7-30 13:25
拿原理图来看看先
不看图说不清楚
点赞  2008-7-30 13:36
不接蜂鸣器,能正常拉高吗?芯片没问题,那造成问题的肯定就是实验板和你做的板子之间的差别了。P1.3脚在实验板上接了什么?
点赞  2008-7-30 13:58
用软件仿真是可以置一的,那是不是意味着硬件方面的问题?
点赞  2008-7-30 14:38
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复