• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

请教:"&"的问题

我刚开始学习单片机,在书上看到这样一个程序:P1.7为输入端,接开关,用P1.0,P1.1,P1.2和P1.3表示的16进制数,来记下开关被按下的次数.
  可我去做了一遍,结果不对,P1口没反应
#include
sbit INPUT=P1^7;
sbit DIGI0=P1^0;
sbit DIGI1=P1^1;
sbit DIGI2=P1^2;
sbit DIGI3=P1^3;
main()
{
char cnt=0;
  while(1){
      INPUT=1;
  DIGI0=DIGI1=DIGI2=DIGI3=1;
  while(INPUT==1);
  INPUT=1;
  while(INPUT==0);
  cnt=(cnt+1)%16;

  DIGI0=!(cnt&0x08);        
  DIGI1=!(cnt&0x04);
  DIGI2=!(cnt&0x02);
  DIGI3=!(cnt&0x01);
}
}
感觉好像是&有点问题,可又找不出来,请哪位知道的老师告诉一下,非常感谢   



          }
}
全部回复(6)
正序查看
倒序查看
sgbmasm
LV.4
2
2008-03-25 09:06
while(INPUT)=1;
INPUT=1;
这里有问题,如果一开始是高电平,将在这里死循环
0
回复
2008-03-25 13:34
@sgbmasm
while(INPUT)=1;INPUT=1;这里有问题,如果一开始是高电平,将在这里死循环
没有吧?输入是个开关量.while(INPUT==1); 的意思是直到INPUT==0时执行下一步,电平由高到低再到高才是一个完整的吧?
0
回复
2008-03-25 13:38
@sgbmasm
while(INPUT)=1;INPUT=1;这里有问题,如果一开始是高电平,将在这里死循环
我在KEIL里运行时cnt的计数是对的,就是取出四个位时不对, DIGI0 DIGI1 DIGI2 DIGI3电平一直没变化
0
回复
sgbmasm
LV.4
5
2008-03-27 18:05
@竹林清风
我在KEIL里运行时cnt的计数是对的,就是取出四个位时不对,DIGI0DIGI1DIGI2DIGI3电平一直没变化
我仿真过了,不知你加没加#include
应该没什么问题!
0
回复
sgbmasm
LV.4
6
2008-03-27 18:07
@竹林清风
我在KEIL里运行时cnt的计数是对的,就是取出四个位时不对,DIGI0DIGI1DIGI2DIGI3电平一直没变化
你用什么观查的?
0
回复
2008-04-01 00:08
软件看起来是没有问题的,不过你是仿真还是用电路测试啊?如果是做电路用轻触开关应该加上防抖动才行.DELAY 10MS检测多一次低电平.
0
回复