打印

高手帮忙看一下我的c51串口通信程序吧!

[复制链接]
1772|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yel_bit|  楼主 | 2009-7-30 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,flag,readflag,i;
uchar serial_data[]={0x13,0x87,0x94};
void serial_send(uchar temp);
void main()
{
 TMOD=0x20; //定时器T1工作在方式1;
 TH1=0xfd;  //设置波特率为:9600;
 TL1=0xfd;
 TR1=1;     //开定时器T1;
 SM0=0;
 SM1=1;
 REN=1;     //设置串口工作方式1;
 EA=1;      //开总中断;
 ES=1;      //开串口中断;
 ES=0;
 SBUF=0xaa;  //发送aa;
 while(!TI);
 TI=0;
 ES=1;
 while(1)
 {
  
  if (flag==1) //如果取数标志已置位,就将读到的数从串口发出 
  { 
   flag=0 ; //取数标志清0 
   serial_send(temp);  //发送接收到的字符;
   readflag=1;
  } 
  if(readflag==1&temp=='b')   //发送b的时候返回数组中的数值;
  {
   ES=0;
   readflag=0;
   for(i=0;i<3;i++)
   {
    SBUF=serial_data;
    while(!TI);
    TI=0;
    i++;
   }
   ES=1;
  }
 }
}

void serial_send(uchar temp)  //发送字符子程序;
{
 ES=0;
 SBUF=temp; 
 while(!TI); 
 TI=0;
 ES=1;
}

void serial_receive() interrupt 4  //中断接收子程序;
{
 RI=0;
 temp=SBUF;
 flag=1;
}
我要实现的功能是:刚开始单片机给Pc发送一个aa,然后Pc给单片机发送除b之外的字符时原样返回单片机,发送b的时候返回b和数组中的三个数字,但是为什么程序没有错,就是发送b的时候返回来的就是没有数组三个数中中间的那个数呢??求高手指教!! 

相关帖子

沙发
wjy1107| | 2009-7-30 11:10 | 只看该作者

写那么多i++干啥?

for(i=0;i<3;i++)
   {
    SBUF=serial_data;
    while(!TI);
    TI=0;
    i++;  //把这行去了
   }

使用特权

评论回复
板凳
lyxq| | 2009-7-30 11:24 | 只看该作者

用中断

中断是不要钱的帮工,查询那就是自己做了。有人干活不要钱何必要自己做?

使用特权

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

本版积分规则

4

主题

5

帖子

0

粉丝