打印

为何只能发送一个字符?

[复制链接]
1320|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仿真看下程序是咋跑的。

使用特权

评论回复
5
gaohq|  楼主 | 2008-8-2 17:29 | 只看该作者

感谢NE5532

在你的提醒下我单步执行看了下,发觉运行到while(1)....时就老是在那两条语句间运行,我把它改为:
while(1)
{
  sbuf=date;
  if(TI)
   {
     TI=0;
     break;
    }
}
就好了.谢谢!!!

使用特权

评论回复
6
gaohq|  楼主 | 2008-8-3 16:41 | 只看该作者

奇怪了

我今天再试时发现有时可以一次全部输出,有时又只能输出一个字符,怎么啦?

使用特权

评论回复
7
gaohq|  楼主 | 2008-8-3 19:35 | 只看该作者

顶!!!!

否则沉底了.

使用特权

评论回复
8
zg_z| | 2008-8-4 00:23 | 只看该作者

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

使用特权

评论回复
9
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

主题

3762

帖子

5

粉丝