标题: 单片机C51编程遇到了一个问题 [打印本页]

作者: Magatop    时间: 2017-5-8 11:47
标题: 单片机C51编程遇到了一个问题
....
while(1)
{
  ADresult[0]=getdata(0);
  if( X<=100 || X>=200)
  {
   BUZZER=1;
  }
  else
  {
   BUZZER=0;
  }
.....
当X=150,这个时候蜂鸣器不响;然而:
...
unsigned int  X;
BUZZER=0;
while(1)
{
  
ADresult[0]=getdata(0);
  if( X<=100 || X>=200)
  {
   BUZZER=1;
  }
  //else
  //{
  //BUZZER=0;
  //}
.....
else去掉,当X=150时,蜂鸣器还是响,很费解为什么当if条件不满足(X=150)时,仍然执行了“ BUZZER=1”?


作者: Magatop    时间: 2017-5-8 12:09
解决了。并非是单片机执行了if{},而是条件不满足时自动跳过,执行了P2^7=1 (BUZZER的定义式:BUZZER=P2^7)。else注释掉后,在加一句BUZZER=0即可。那么单片机在默认的时候P2^7口是输出高电平喽?
作者: lyf898    时间: 2017-5-8 22:10
Magatop 发表于 2017-5-8 12:09
解决了。并非是单片机执行了if{},而是条件不满足时自动跳过,执行了P2^7=1 (BUZZER的定义式:BUZZER=P2^7) ...

除P0口未上拉时外,其他端口在空闲时都是高电平
作者: Magatop    时间: 2017-5-9 02:16
1楼的解决方案是强制fengming=0,超出这个范围也不会响,并没有解决问题。。
作者: 依然是你    时间: 2017-5-9 09:14
while(1)
{
  
ADresult[0]=getdata(0);
  if( X<=100 || X>=200)
  {
   BUZZER=1;
  }
主程序只要满足一次 BUZZER=1就一直存在了
作者: 文龙    时间: 2017-5-9 10:45
好像看懂了
作者: 我的51黑论坛    时间: 2017-5-9 12:43
看看语法有没有错误
作者: Magatop    时间: 2017-5-9 13:54
依然是你 发表于 2017-5-9 09:14
while(1)
{
  

主程序只送了一次150,没有满足BUZZER=1的条件啊。。
作者: Magatop    时间: 2017-5-9 13:57
文龙 发表于 2017-5-9 10:45
好像看懂了

求指教
作者: lgjdqm    时间: 2017-5-10 15:51
else去掉,默认 BUZZER高电平




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1