126838|4

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

为什么串口发送不能停止? [复制链接]

个位大侠,我用89s52利用其串口发送一个字符串,为什么不能够停止?很简单的程序,就是不知道问题在那里,盼望得到指导,程序如下:
#include                        /*串口收发程序*/
#define uchar unsigned char
main()
{   unsigned int i,j;
  unsigned char temp[10]={"bei jing"};
  IE=0x90;
  TMOD=0x20;                             /*设置9600波特率的定时器1工作方式和初始值*/
  TL1=0xfd;
  TH1=0xfd;
  SCON=0x50;
  PCON=0x00;
  TR1=1;
  i=0;      
      for(i=0;i<10;i++)
       {
         SBUF=temp;
            while(TI==0);
            TI=0;
         }
}
程序的本意,是利用串口发送一次字符串“bei jing”到计算机,结果发现并不是发送一次就停止,而是会一直发送下去,原因在哪里?计算机上是用“ComTools”来接收的。
此帖出自单片机论坛

最新回复

呵呵 必须进入死循环 否则程序将跑飞  详情 回复 发表于 2008-7-2 20:13
点赞 关注
 

回复
举报

228

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

TI是什么?

main()函数该是个死循环,现在i控制次数,10次执行完后程序飞到哪儿去了?
此帖出自单片机论坛
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

TI是串口发送的标志位,

当串口发送数据时被硬件置1,需要软件清零。
“main()函数该是个死循环,现在i控制次数,10次执行完后程序飞到哪儿去了?”
应该是这个原因,我在for循环结束后,加了while(1);重复发送的问题解决了。但是现在有一个新问题,就是串口输出为“bbei jing”就是多了一个字母b,我单步执行看了一下,找到多一个b的原因:在第一次执行while(TI==0);时i又跳回了0.所以temp[0]被发送了两次,为什么会第一次执行while(TI==0);时i又跳回0?
另外请问:
main()必须是死循环吗?为什么这么重要的问题,没见教科书里有明确的说明?能解释一下原因吗?
此帖出自单片机论坛
 
 
 

回复

228

帖子

0

TA的资源

一粒金砂(中级)

4
 
原帖由 青菜虫子 于 2008-7-1 15:35 发表
main()必须是死循环吗?为什么这么重要的问题,没见教科书里有明确的说明?能解释一下原因吗?

计算鸡只要上着电,它不知累,总得做点什么。
做完指定的程序之后若没好好导向,它就可能乱跑。如果跑到没程序的地方,碰到好多坏人(乱码),会出不可预测的结果……更多的可能是掉进哪个陷阱里导致复位,结果就是周而复始地执行那几句程序。
此帖出自单片机论坛
 
 
 

回复

229

帖子

0

TA的资源

纯净的硅(初级)

5
 
呵呵 必须进入死循环 否则程序将跑飞
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表