打印

请教51 串口通信问题

[复制链接]
1828|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
杨立业yly|  楼主 | 2012-2-28 23:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define UINT unsigned int
#define UCHAR unsigned char
UINT flag,i,a;
UCHAR code table[]="I get";

void delay(UINT x)

{


unsigned int i,j;



for(i=x;i>0;i--)



for(j=110;j>0;j--);


}

void init(void)

{


TMOD=0x20;//
定时器18位自动重装


TH1=0xfd;//
波特率9600


TL1=0xfd;


TR1=1;


IE=0x90;//
开中断



SM0=0;//
设置寄存器SCON为方式1


SM1=1;


REN=1;


}


void send( UINT B )//发送

{


ES=0;


SBUF=B;


while(!TI);


TI=0;


ES=1;


}

void main(void)

{


init();


while(1)



{


if( flag == 1 )



{
ES=0;



for (i=0;i<6;i++)



{



SBUF=table;



while(!TI);



TI=0;


}


delay(2);



send( a );


flag=0;


}



}


}


void ser() interrupt 4

{


RI=0;


a=SBUF;


flag=1;




}

为什么只能接收到一个字符呢?请求高人指教!

相关帖子

沙发
dengm| | 2012-2-29 00:32 | 只看该作者
void ser() interrupt 4  {
   if(RI==1) {
      RI=0;
      a=SBUF;
      flag=1;
   }
}

使用特权

评论回复
板凳
chenczy| | 2012-2-29 09:28 | 只看该作者
void UartISR(void) interrupt 4   //接收数据
{

if(RI)    //收到数据
  {          
     data1[Num]=SBUF;
     if(data1[0]==头) Num++;  
    else Num=0;
    if(Num==接收个数)
    {
        较验
      }                                           
     RI=0;   //清中断请求
  }
}

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
杨立业yly + 1
地板
杨立业yly|  楼主 | 2012-2-29 12:25 | 只看该作者
2# dengm
这样和上边的没区别吧

使用特权

评论回复
5
杨立业yly|  楼主 | 2012-2-29 12:47 | 只看该作者
3# chenczy
头指的是发送的第一个字符吗?Num是个常数吧,只能接收固定个数的字符吗?

使用特权

评论回复
6
yesful| | 2012-3-3 21:59 | 只看该作者
你这程序的意思是串口调试软件向单片机发送一个字母,如a,然后单片机返回“i get a”???
for (i=0;i<6;i++)


{


SBUF=table;


while(!TI);


TI=0;

}
这段的SBUF=table;应该是
SBUF=table[i];吧

使用特权

评论回复
7
杨立业yly|  楼主 | 2012-3-4 17:36 | 只看该作者
6# yesful
谢谢您,我已经找到了错误的原因。table那是笔误,依然谢谢你热心的解答。

使用特权

评论回复
8
yesful| | 2012-3-5 09:55 | 只看该作者
楼主,说一下什么原因哈~~~我还没看出哪里问题~~~:lol

使用特权

评论回复
9
杨立业yly|  楼主 | 2012-3-5 12:22 | 只看该作者
8# yesful
while(1)
   {
       if ( flag==1)
         {
            ES=0;
             for(i=0;i<Num;Num++)
                 {
                    SBUF=table;
                     while(!TI);
                      TI=0;
                 }
              flag=0;
              Num=0;
              ES=1;
         }
    }     
     :lol 这样就对了










   }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

125

帖子

0

粉丝