9220|18

27

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

串口发数据的一个问题,发数据用了break怎么还是跳不出来? [复制链接]

/*******************************************************************************
*  标题: 串口通信             *
*  作者:麒麟刀
*  功能:发送两个数,发完结束。                                              
********************************************************************************/
#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 编辑 ]
此帖出自51单片机论坛

最新回复

运行完了再从头开始运行了呗,它跳不出三界外啊  详情 回复 发表于 2011-7-23 15:59
点赞 关注
 

回复
举报

2751

帖子

0

TA的资源

裸片初长成(初级)

沙发
 
单片机的程序结构是需要一个死循环的,break你要它跑去哪里呢?
此帖出自51单片机论坛
 
 
 

回复

324

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
哥们儿,它跳了啊,只不过又进去了!建议在while(1){}去掉,然后加在程序最后面~
此帖出自51单片机论坛
 
 
 

回复

473

帖子

0

TA的资源

纯净的硅(高级)

4
 
对啊,最外面有个 while(1) 大循环,你让它跳哪去
此帖出自51单片机论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

5
 

原帖由 David_Lee 于 2011-5-21 07:48 发表 单片机的程序结构是需要一个死循环的,break你要它跑去哪里呢?

 

 

“单片机的程序结构是需要一个死循环的”,我想我就是这点没搞清楚,谢谢指出!但是我还是没明白这点,能不能说得详细点,我的理解是用了break后,程序就跳到while(1){}的后面了,而while(1){}后面没有语句了,我就认为它应该是结束程序了,不应该再循环了

此帖出自51单片机论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

6
 

原帖由 zheng522 于 2011-5-21 08:28 发表 哥们儿,它跳了啊,只不过又进去了!建议在while(1){}去掉,然后加在程序最后面~

 

我还是没明白,能不能说得详细点,我的理解是用了break后,程序就跳到while(1){}的后面了,而while(1){}后面没有语句了,我就认为它应该是结束程序了,不应该再循环了。 你说的方法是可行的,而且我直接在while(1){}后面再加一个while(1);语句,它的break语句就跳到加的这个while(1);语句的前面了。单片机里的程序是不是本身就是死循环?我如果去掉原程序里的while(1){}和break语句它也是在不停的发那两个数据

此帖出自51单片机论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 4楼 zjjone1023 的帖子

它不是跳出大循环吗?我的理解是它应该跳出大循环,然后程序直接结束
此帖出自51单片机论坛
 
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

8
 

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

 

必须要一个死循环滴

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

此帖出自51单片机论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼 David_Lee 的帖子

谢谢,是的,你说的方法我运行过,是对的,只发一次。单片机里的程序是不是本身就是死循环?我不加循环直接发那两个数它也是不停的循环发那两个数据?

[ 本帖最后由 麒麟刀 于 2011-5-23 00:21 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 9楼 麒麟刀 的帖子

不能简单的理解为“不停的循环那两个数据”。而是单片机会根据编译器对没有使用到的程序空间的默认值所对应的指令,一直运行下去,直到产生异常(PC地址溢出,或者堆栈溢出等错误)复位,其表面结果就是不停地发送那两个数据了。
此帖出自51单片机论坛
 
 
 

回复

44

帖子

0

TA的资源

一粒金砂(中级)

11
 
while(1)里面是一只执行的
一次break后,马上又跳到while(1)里面执行去了,然后又break,一直这样循环下去
此帖出自51单片机论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 10楼 wshwan 的帖子

“单片机会根据编译器对没有使用到的程序空间的默认值所对应的指令,一直运行下去”这句话指出了我犯错误的原因,谢谢大侠!
此帖出自51单片机论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

13
 

回复 沙发 David_Lee 的帖子

正解
它跳了,只是单片机整个ROM跑完了几十次你都没发现
此帖出自51单片机论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

14
 

回复 12楼 麒麟刀 的帖子

哥们,我来给你说说吧
是这样的。
单片机的程序空间是有限的。比如51,最大去到64K。
单片机跑程序的时候,它实质上是在程序空间里一条一条地跑。
这里简单解释一下,程序空间是按照1B1B,8个位地分条,就像很多很多的盒子,里面装了一个一个的数值,单片机跑程序就是CPU一个一个读这些数,然后根据一定的原则解释和执行。。这个你暂时别想太多。

你只要知道,这最大64K的程序空间,总有一刻会跑完,而且实质上是一瞬间的事情——以12M晶振为例,一个字节算你一跳指令时间吧,那就是1us,假设全速跑完,最多64Kus,这个,也就几十毫秒的时间,一秒钟就有十几个几十毫秒啊。

LS的各位老大说的在程序的最后加个while(1);。就是要让它执行完你写的程序,老老实实呆在原地,如果你不写这个,它就顺着往下跑,最多几十毫秒,跑完了,它不会老老实实自己停下来,于是它又从头开始执行了。

所以,,,嗯嗯,我已经够罗嗦了。
此帖出自51单片机论坛

赞赏

1

查看全部赞赏

 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

134

帖子

0

TA的资源

一粒金砂(中级)

15
 

原帖由 麒麟刀 于 2011-5-23 00:20 发表 谢谢,是的,你说的方法我运行过,是对的,只发一次。单片机里的程序是不是本身就是死循环?我不加循环直接发那两个数它也是不停的循环发那两个数据?

 

这个理解有问题,确切说,死循环是为了防止单片机执行到错误的地方。也就是PC指针指向错误的地方。那个地方因为没有你的代码,是个很危险的地方。你不知道那里会发生什么。

此帖出自51单片机论坛
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(中级)

16
 
for(j=1000;j>0;j--);   //延时
         break;  //跳出循环语句,但是没起到作用,为什么???????



晕死 这个 吗  你得好好地看看书了 ,明显 c语言不过关
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

17
 
在最后一个}之前加上一句  while(1);  应该就行了。
此帖出自51单片机论坛
 
 
 

回复

37

帖子

0

TA的资源

一粒金砂(中级)

18
 

楼上的都说得很好,单片机的程序运行结果需要的就是一个无限循环。

此帖出自51单片机论坛
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

19
 
运行完了再从头开始运行了呗,它跳不出三界外啊
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表