单片机if语句格式

我想问一下,我想但P1.0输入低电平时P2.0输出高电平,P1.0输入高电平时,P2.0输出低电平,
我定义
#include<reg52.h>
sbit P2^0=A1;
sbit P1^0=A2;
void main()

{
while(1)

if(A1=0)

A2=1;

esle;

A2=0;

}
程序能正常刻录,但单片机没反应,外围电路没问题,请指导程序有什么错

第1个回答  2015-11-23
c语言提供了三种形式的if语句:
1、if(表达式)语句。
例如:

1

if(x>y)printf("%d",x);

2、if(表达式)语句1 else 语句2
例如:

1
2

if(x>y)printf("%d",x);
else printf("%d",y);

3、if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3)语句3
else if(表达式m)语句m
else 语句 n
在每个语句中,可以有多个语句,但需要加上大括号
例:

1

if(x>y){printf("%d",x);break;}

if-else 语句引入了一种二义性问题称为空悬else (dangling-else) 问题,这种问题出现在当if 子句多于else 子句时。问题是这些else 子句分别和哪一个if 子句匹配。例如

1
2
3
4
5
6
7
8

if(minVal<=ivec[i])
if(minVal==ivec[i])
++occurs;
else
{
minVal=ivec[i];
occurs=1;
}

程序的缩进形式表明程序员相信else 应该与最外面的if 子句匹配,然而在C++中空悬else 二义性由以下规定来解决:else 子句与最后出现的未被匹配的if 子句相匹配。
在本例中if-else 语句实际的计算过程如下

1
2
3
4
5
6
7
8
9
10
11

if(minVal<=ivec[i])
{
//空悬else的解释结果
if(minVal==ivec[i])
++occurs;
else
{
minVal=ivec[i];
occurs=1;
}
}

解决方式
要想改变这种缺省的空悬else 匹配效果一种方法是把后来出现的if 放在复合语句中

1
2
3
4
5
6
7
8
9
10

if(minVal<=ivec[i])
{
if(minVal==ivec[i])
++occurs;
}
else
{
minVal=ivec[i];
occurs=1;
}

编码风格建议
总是使用复合语句括号以避免在以后修改代码时可能出现的混淆或错误。
第2个回答  2013-09-30
如二楼回答,程序有错误 但是这里或许可以用 ~致反写一下 比较靠谱 否则只定义一个容易出现问题 自己想吧
相似回答