单片机C语言程序的解释???

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //申明U1锁存器的锁存端
sbit wela=P2^7; //申明U2锁存器的锁存端
sbit dawr=P3^6; //定义DA的WR端口
sbit dacs=P3^2; //定义DA的CS端口
sbit beep=P2^3; //定义蜂鸣器端口
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void main()
{
uchar val,flag;
dula=0;
wela=0;
dacs=0;
dawr=0;
P0=0;
while(1)
{
if(flag==0) //此句flag之前没有赋初值,这句程序怎么执行??????
{
val+=5; //val也没有赋初值,又是怎么执行的?????
P0=val; //通过P0口给DA数据口赋值
if(val==255)
{
flag=1;
beep=0;
delayms(100);
beep=1;
}
delayms(50);
}
else
{
val-=5;
P0=val; //通过P0口给DA数据口赋值
if(val==0)
{
flag=0;
beep=0;
delayms(100);
beep=1;
}
delayms(50);
}
}
}

程序不是单纯的计流水账的写法的 IF ELSE 就是条件判断语句 也就是说当其中条件满足的情况下会执行相应的操作
理论上 设备上电的时候该FLAG值是会被默认为0的 就算FLAG不为0 也会执行
else
{
val-=5;
P0=val; //通过P0口给DA数据口赋值
if(val==0)
{
flag=0;
beep=0;
delayms(100);
beep=1;
}

这一段 当val值等于0的时候 就会清楚FLAG标志 然后又会执行 FLAG == 0那段

不过说实话 这段程序确实写的不咋样 怎么也得付个初值吧 呵呵
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-02
程序运行时应该会先执行这一句:在这里赋值。
else
{
val-=5;
P0=val; //通过P0口给DA数据口赋值
if(val==0)
{
flag=0;
beep=0;
delayms(100);
beep=1;
}
delayms(50);
}本回答被网友采纳
第2个回答  2012-10-28
默认初值为0
这是个程序里 的 dula=0,wela=0 是做什么的 有什么作用?????
第3个回答  2012-07-03
flag默认为0
相似回答