找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3545|回复: 27
收起左侧

为什么这个单片机程序不能使用if判断

  [复制链接]
ID:613771 发表于 2019-9-19 20:27 | 显示全部楼层 |阅读模式
#include <reg52.h>

sbit led = P2^0;
sbit led2 = P2^1;
typedef unsigned int u16;        
typedef unsigned char u8;

void main(){

        u16 a = 1;
        if(a = 2){
                while(1){
                        led = 0 ;
                }

        }else{
                while(1){
                        led2 = 0 ;
                }
        }



}
回复

使用道具 举报

ID:613771 发表于 2019-9-19 20:28 | 显示全部楼层
单片机无论如何都会运行if里面的第一个循环,而不会判断条件是真是假,不知道怎么回事
回复

使用道具 举报

ID:613798 发表于 2019-9-19 21:21 | 显示全部楼层
a = 2是赋值表达式,其值为2,是非零值,i所以if语句"()"内的表达式执行结果永远为真。
回复

使用道具 举报

ID:613798 发表于 2019-9-19 21:24 | 显示全部楼层
a=2是赋值表达式,其值为2,是非零值,所以if中"()"内的表达式运行结果为真。所以执行第一个while语句。
回复

使用道具 举报

ID:526314 发表于 2019-9-19 22:11 | 显示全部楼层
改成if(a==2)
回复

使用道具 举报

ID:235200 发表于 2019-9-20 00:21 | 显示全部楼层
应该把if(a = 2)改为if(a == 2) 但根据程序a不可能会等于2,那么就只好执行else{
                while(1){
                        led2 = 0 ;
                }
这里是是个无限循环,一直使led2=0;不知道这样的程序编了后要实现什么样的功能?
回复

使用道具 举报

ID:386381 发表于 2019-9-20 01:00 来自手机 | 显示全部楼层
判断应该用a==2,两个等号,a=2一个等号是赋值
回复

使用道具 举报

ID:110895 发表于 2019-9-20 01:19 | 显示全部楼层
if(a==2) 就对了。
回复

使用道具 举报

ID:213173 发表于 2019-9-20 07:15 | 显示全部楼层
hellomcp 发表于 2019-9-19 20:28
单片机无论如何都会运行if里面的第一个循环,而不会判断条件是真是假,不知道怎么回事

  if(a = 2)???难道编译时没有警告?
回复

使用道具 举报

ID:613425 发表于 2019-9-20 08:39 | 显示全部楼层
判断应该用a==2,两个等号,a=2一个等号是赋值
回复

使用道具 举报

ID:456927 发表于 2019-9-20 09:00 | 显示全部楼层
语法错啦,改一下应该就好了
回复

使用道具 举报

ID:601639 发表于 2019-9-20 09:36 | 显示全部楼层
改成a==2,但是这个程序没啥用啊,死循环出不来。
回复

使用道具 举报

ID:470497 发表于 2019-9-20 10:02 | 显示全部楼层
a = 2是赋值语句,则a值为2,是非零值,所以if语句表达式为真而运行第一个循环,判断条件应该改为:if(a==2)
回复

使用道具 举报

ID:452974 发表于 2019-9-20 13:20 | 显示全部楼层
a = 2 是赋值语句,在一些编译器中默认为真,如果希望程序运行,更改为a == 2 判断语句即可。

和楼上们一样,这个程序是干什么的,个人感觉像是学校试题,,

如果希望实现什么功能,要改的地方就稍稍多了
回复

使用道具 举报

ID:71883 发表于 2019-9-20 14:41 | 显示全部楼层
书写格式错误
回复

使用道具 举报

ID:149144 发表于 2019-9-20 15:32 | 显示全部楼层
u16 a;
......

void main()
{
  while(1)
         {
           if(a == 2)
                {
                    led = 0 ;
                }   
          else
               {
                   led2 = 0 ;
               }
        }
}


回复

使用道具 举报

ID:272119 发表于 2019-9-20 18:47 | 显示全部楼层
wulin 发表于 2019-9-20 07:15
if(a = 2)???难道编译时没有警告?

会出警告,但不是报错.
回复

使用道具 举报

ID:613771 发表于 2019-9-22 18:37 | 显示全部楼层
谢谢大家了,赋值用等于,对比用直等于
回复

使用道具 举报

ID:254046 发表于 2019-10-9 10:36 | 显示全部楼层
把if(a = 2)改为if(a == 2) 不知道还有其他程序吗,a没有自加 a++; a永远不会=2吧
回复

使用道具 举报

ID:621123 发表于 2019-10-9 15:38 | 显示全部楼层
if是条件判断语句,if(a=2),中的a=2是赋值表达式,不是判断语句的“==”
回复

使用道具 举报

ID:515970 发表于 2019-10-9 17:55 | 显示全部楼层
a=2不是比较语句是赋值  在c语言中 = 为赋值。if(a==2)
回复

使用道具 举报

ID:620731 发表于 2019-10-10 09:41 | 显示全部楼层
赋值表达式a=2结果永远为真,改为a==2就好了
回复

使用道具 举报

ID:621564 发表于 2019-10-10 10:22 | 显示全部楼层
if判断里 a=2是赋值语句,需要改成 if(a==2)
回复

使用道具 举报

ID:616759 发表于 2019-10-10 15:02 | 显示全部楼层
wulin 发表于 2019-9-20 07:15
if(a = 2)???难道编译时没有警告?

有的编译器不给警告,帮你当做一条语句执行了,我最近就遇到了,找了很长时间才找到这个错误(C++,比这个程序复杂很多)
回复

使用道具 举报

ID:600929 发表于 2019-10-10 17:57 来自手机 | 显示全部楼层
我刚开始也犯过这种错
回复

使用道具 举报

ID:621334 发表于 2019-10-10 22:14 | 显示全部楼层
if(a= 2) 改为if(a == 2)   c语言中的=是赋值 ,==是判断
回复

使用道具 举报

ID:222006 发表于 2019-10-11 10:31 | 显示全部楼层
你是打算赋值2给a变量吗? a=2?a==2吧
回复

使用道具 举报

ID:115743 发表于 2019-10-11 15:53 | 显示全部楼层
if(a==2),你缺少了一个等号
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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