串口发数据的一个问题,发数据用了break怎么还是跳不出来?

2019-03-24 19:51发布

/*******************************************************************************
*  标题: 串口通信             *
*  作者:麒麟刀
*  功能:发送两个数,发完结束。                                              
********************************************************************************/
#include<reg52.h>
unsigned int i=1000,j,a,n;
void main()
{  TMOD=0x20;//设置定时器1为工作方式2
 TH1=0xf4;     //设置波特率为2400
 TL1=0xf4;
 TR1=1;//启动定时器1  SM0=0;//串口工作方式为方式1
 SM1=1;
 while(1)   
  {
         while(i--);     //延时
         SBUF=0x55;
         while(!TI);
               TI=0;     //清除发送中断标志
         for(j=1000;j>0;j--);  //延时
         SBUF=0x56;
         while(!TI);
               TI=0;      //清除发送中断标志
         for(j=1000;j>0;j--);   //延时
         break;  //跳出循环语句,但是没起到作用,为什么??????? 
  }
}
出现的问题:我本意是让它发两个数,发完结束,就在最后用了一个break语句,但是实际上它是不停的在发我设定的两个数0x55和0x56,为什么用了break语句程序还没跳出循环呢?
[ 本帖最后由 麒麟刀 于 2011-5-20 23:52 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
David_Lee
1楼-- · 2019-03-26 03:27

原帖由 麒麟刀 于 2011-5-22 23:31 发表   我还是没明白,能不能说得详细点,我的理解是用了break后,程序就跳到while(1){}的后面了,而while(1){}后面没有语句了,我就认为它应该是结束程序了,不应该再循环了。 你说的方法是可行的,而且我直接在 ...

 

必须要一个死循环滴

把代码放while(1)之前就只运行了一次

麒麟刀
2楼-- · 2019-03-26 08:20
谢谢,是的,你说的方法我运行过,是对的,只发一次。单片机里的程序是不是本身就是死循环?我不加循环直接发那两个数它也是不停的循环发那两个数据?

[ 本帖最后由 麒麟刀 于 2011-5-23 00:21 编辑 ]
wshwan
3楼-- · 2019-03-26 08:57
不能简单的理解为“不停的循环那两个数据”。而是单片机会根据编译器对没有使用到的程序空间的默认值所对应的指令,一直运行下去,直到产生异常(PC地址溢出,或者堆栈溢出等错误)复位,其表面结果就是不停地发送那两个数据了。
jckimi
4楼-- · 2019-03-26 10:58
while(1)里面是一只执行的
一次break后,马上又跳到while(1)里面执行去了,然后又break,一直这样循环下去
麒麟刀
5楼-- · 2019-03-26 14:10
 精彩回答 2  元偷偷看……
辛昕
6楼-- · 2019-03-26 17:36
正解
它跳了,只是单片机整个ROM跑完了几十次你都没发现

一周热门 更多>