一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2413|回复: 3
收起左侧

[avr] 单片机C语言求助 ICC AVR

[复制链接]
发表于 2010-12-26 11:38 | 显示全部楼层 |阅读模式
刚接触单片机,atmega8/16,学习中碰到个奇怪的问题,如下面的程序片断中,while(key&01==0) 这样的写法,在实际仿真运用中明明条件满足,却不行,非要写成另二种写法,但同样
if (key&01==0)  却能按实际运行。按我以前学的C,应该是可以这样写的啊,求真相。谢谢。附上完整的程序和proteus仿真文件。

02_m16_keyscanf.rar (17.02 KB, 下载次数: 754)


  void scan_key(void)
    {
    unsigned char key;
    key=PIND;
    if (key&01==1)
        return;
    delay_ms(10);
    key=PIND;
    if (key&01==1)
        return;
    count++;


    //while(key&01==0)  //奇怪,这样写就不行,一定要按下面二种的写,有鬼了。
    //while(0==key&01)
    while((key&01)==0)  
    {
      key=PIND;

    }
发表于 2010-12-26 18:06 | 显示全部楼层
==运算的优先级比&高
 楼主| 发表于 2010-12-26 18:25 | 显示全部楼层
谢谢楼上朋友。仔细想了下,确实是这样的,看来以后要真的注意优先级了。没有冤枉电脑。呵呵.

当key==0    语句   if (key&01==1) 恰好也不满足条件。(这里因为01==1始终为真,所以key ==0 是为假,key==1时为真。  但while(key&01==0)   由于01==0始终为假,所以这个条件不管key是什么,始终为假,造成即使按键按下,但count始终在相加而出错。
发表于 2010-12-26 20:04 | 显示全部楼层
多加个括号不可以?

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-11-1 08:29 , Processed in 0.064209 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表