打印

单片机中while与if语句的不同

[复制链接]
5484|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
takina|  楼主 | 2010-7-11 10:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各们大侠,我写了一段单片机与PC机相联的串口通信协议,先PC机向单片机发一个数据,然后单片机再把这个数据发给PC机,一开始我是这样写的:
#include <reg52.h>
unsigned char a,flag;
void main()
{
SM0=0;
SM1=1;
REN=1;
TMOD=0X20;  //8位自动重装
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
flag=0;
while(1)
{
  if(flag==1)
  {
   ES=0;
   flag=0;
   SBUF=a;
    if(TI==1)
   {
    TI=0;
    ES=1;
    }
   
  }
}
}

void serial()interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}

这个程序的结果PC机只能发一次,也只能收到一次,再发就收不到了,然后我改了一下程序:
#include <reg52.h>
unsigned char a,flag;
void main()
{
SM0=0;
SM1=1;
REN=1;
TMOD=0X20;  //8位自动重装
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
flag=0;
while(1)
{
  if(flag==1)
  {
   ES=0;
   flag=0;
   SBUF=a;
   while(!TI);
    TI=0;
    ES=1;
   
  }
}
}

void serial()interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}


这个程序的结果是PC机与单片机收发正常。两个程序唯一的不同就是在字体比较大的那个地方不同,可是第一个程序好像也没错呀,可为什么只能收发一次呢??
请各位大侠支招,

相关帖子

沙发
NE5532| | 2010-7-11 11:10 | 只看该作者
while是死等,if是死等么?

使用特权

评论回复
板凳
szshawn2010| | 2010-7-11 13:38 | 只看该作者
:)

努力努力!

使用特权

评论回复
地板
jack.king| | 2010-7-11 14:59 | 只看该作者
用中断处理比较好

使用特权

评论回复
5
原野之狼| | 2010-7-11 15:21 | 只看该作者
要是while和if一样 何苦搞两个关键字呢

使用特权

评论回复
6
zoudejile| | 2010-7-11 16:20 | 只看该作者
学习

使用特权

评论回复
7
linqing171| | 2010-7-11 18:04 | 只看该作者
ES=0;
   flag=0;
   SBUF=a;
执行的次数不一样。

使用特权

评论回复
8
踢球老越位| | 2010-7-11 20:51 | 只看该作者
SBUF=a;//这里已经把数据发送出去
    if(TI==1)//接下来马上执行这条判断,结果TI是为0,那么中断没打开,重新循环,结果flag永远为0
   {            
    TI=0;
    ES=1;
    }

使用特权

评论回复
9
BitFu| | 2010-7-12 07:59 | 只看该作者
一个是循环语句,一个是条件判断语句。完全两个概念

使用特权

评论回复
10
kumosheng| | 2010-7-15 15:32 | 只看该作者
while和if区别还是不小的。循环语句和条件判断能一样么?呵呵。学习了。

使用特权

评论回复
11
开始的梦想| | 2010-7-15 20:02 | 只看该作者
学习学习!

使用特权

评论回复
12
zbj521| | 2010-7-16 09:32 | 只看该作者
学习!

使用特权

评论回复
13
takina|  楼主 | 2010-7-18 22:26 | 只看该作者
哦,我懂了,if语句是因为循环了一次就不能再循环了,因为flag=0了,不能再执行叛断了,而用while,程序就一直停在那里检测,这个就是不同了,我这样说对吧

使用特权

评论回复
14
51soho| | 2010-7-19 19:16 | 只看该作者
while(!TI); //叹号是不是写错了,否则2段程序逻辑不一样阿
    TI=0;
    ES=1;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

61

帖子

1

粉丝