AVR小段程序不解

2019-03-24 21:03发布

void main()
{
  port_init();
   while(1)
  {
    if( ((PINC & SET ) == 0x00) & ((PINC & SET)== 0x00))
  {
   flag_set = 1;
  }
  if( flag_set == 1 )
  {
   PORTD = 0xff;
  }
}
}   我在按下键设置了个全局变量的标志位   为什么只有在按下键时候PD才为高电平呢 设置了标志位 应该按一次 不按也为高啊 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
ydw621
1楼-- · 2019-03-24 22:23
主函数里对flag_set赋值1后没有对其有清零的操作,会一直保持为1。而且主函数中对于PORTD只有置高没有清零操作。小弟觉得在只执行主函数的情况下不会出现LZ这样的状况。
tiankai001
2楼-- · 2019-03-24 22:58
if( ((PINC & SET ) == 0x00) & ((PINC & SET)== 0x00))

这里,你的运算关系不对,位运算符和逻辑运算符混乱,
应改为if( ((PINC & SET ) == 0x00) & &((PINC & SET)== 0x00))
并且你这里连用两个与操作,操作对象都一致,是什么意思?



别的暂时没看出什么问题
常见泽1
3楼-- · 2019-03-25 02:23
用了M16的 同样程序是可以的
难道M8的这段程序怎么也不行  proteus仿真是可以的
常见泽1
4楼-- · 2019-03-25 04:38
 精彩回答 2  元偷偷看……

一周热门 更多>