为何只能发送一个字符?

[复制链接]
2515|8
 楼主| gaohq 发表于 2008-8-2 15:55 | 显示全部楼层 |阅读模式
在学MC51的串口通讯,编的个小程序,如下,但在串行窗口始终只有'a',为何啊?
#include<reg52.h>
unsigned char h[10]={'a','b','c','d','e','f','g','h','i','o'};
void senddate(unsigned char date)
{
  
  
  SBUF=date;
  while(TI==0)
  TI=0;
  
 }
void main()
{
  unsigned int i;
  unsigned char *p;
  p=&h[0];
  TMOD=0X20;
  TH1=0XFD;
  TL1=0XFD;
  PCON&=0X80;
  SCON=0X40;
  TR1=1;
  REN=1;
  EA=1;
 while(1) 
  {
    for(i=0;i<10;i++)
     {
   
        senddate(*p);
         p++;
     }         
         
           
    }
 
 }
xuzanlon 发表于 2008-8-2 16:42 | 显示全部楼层

WHILE(TI==0)后面加个{}

 楼主| gaohq 发表于 2008-8-2 17:01 | 显示全部楼层

谢谢楼上!!

试了,没用.
NE5532 发表于 2008-8-2 17:08 | 显示全部楼层

while(TI==0);

你的查询语句没起效果。

再不就用keil仿真看下程序是咋跑的。
 楼主| gaohq 发表于 2008-8-2 17:29 | 显示全部楼层

感谢NE5532

在你的提醒下我单步执行看了下,发觉运行到while(1)....时就老是在那两条语句间运行,我把它改为:
while(1)
{
  sbuf=date;
  if(TI)
   {
     TI=0;
     break;
    }
}
就好了.谢谢!!!
 楼主| gaohq 发表于 2008-8-3 16:41 | 显示全部楼层

奇怪了

我今天再试时发现有时可以一次全部输出,有时又只能输出一个字符,怎么啦?
 楼主| gaohq 发表于 2008-8-3 19:35 | 显示全部楼层

顶!!!!

否则沉底了.
zg_z 发表于 2008-8-4 00:23 | 显示全部楼层

while(TI==0)加个; p=&h[0];写到while里面

 楼主| gaohq 发表于 2008-8-4 14:43 | 显示全部楼层

谢谢zg_z!!!!!!!

有所悟
 while(TI==0); 是在原地等,等到TI等于零;
 
 TI=0;
 while(!TI)    
 TI=0;
               是先设置TI等于零,再等,等到TI不等于零(为1时)再把TI 设置为零。
  
  if(TI)
  TI=0;
               是等TI等于1再把TI设置为0,中途有可能被中断,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

378

主题

3767

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部