打印

小白请教串口问题

[复制链接]
1855|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szmc|  楼主 | 2011-7-17 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
只是想在接收到发送的字符后在其前面加上一个字符串,但是每次串口助手接收到的只显示发送的字符,找不到原因,为什么,请高手指点,谢谢
#include <reg51.h>
#define uchar  unsigned char
#define uint   unsigned int  
uchar codetab[]="I got ";
uchar flag=0;
uchar aa=0;
uint i;
void initT1()   
{
PCON=0x00;   
TMOD=0x20;         
TH1=0xFD;
TL1=0xFD;     
REN=1;         
SM0=0;
SM1=1;            
EA=1;      
TR1=1;      
ES=1;      }
void main()
{
  initT1();
  while(1)
  {
if(flag==1)
{
   ES=0;
   for(i=0;i<6;i++)
  {
   SBUF=codetab[i];
         while(!TI);
         TI=0;
  }
   SBUF=aa;
   while(!TI);
      TI=0;
   ES=1;
   flag=0;
}
  }
}
void ser()interrupt 4  
{
      RI=0;
      aa=SBUF;
   flag=1;
}

相关帖子

沙发
szmc|  楼主 | 2011-7-17 16:54 | 只看该作者
太弱了,让高手见笑了,但是还是很想把问题找出来,请帮忙看看

使用特权

评论回复
板凳
lixiaoxu2meng| | 2011-7-18 11:56 | 只看该作者
#include <reg51.h>          //包含头文件
//毫秒级延时函数
void delay(unsigned int x)
{
  unsigned char i;
while(x--)
{
   for(i = 0;i < 120;i++);
}
}
//字符发送函数
void putchar(unsigned char data1)  
{
  SBUF = data1;               //将待发送的字符送入发送缓冲器
while(TI == 0);            //等待发送完成
TI = 0;                     //发送中断标志请0
}
//字符串发送函数
void putstring(unsigned char *dat)
{
  while(*dat != '\0')           //判断字符串是否发送完毕
{
   putchar(*dat);        //发送单个字符
  dat++;                 //字符地址加1,指向先下一个字符
  delay(5);
}
}
//主函数
void main(void)
{
  unsigned char c = 0;
SCON = 0x50;           //串口方式1 ,允许接收
TMOD = 0x20;           //T1工作于方式2
PCON = 0x00;           //波特率不倍增
TL1 = 0xfd;              //波特率设置
TH1 = 0xfd;            //
EA = 1;                    //开总中断
ES = 1;               //开串口接收中断
//TI = 0;
TR1 = 1;             //定时器开启
delay(200);
putstring("Receiving from 8051...\r\n");         //串口向终端发送字符串,结尾处回车换行
putstring("----------------------\r\n");
delay(50);
while(1)
{
   
}
}

//
void revdata(void) interrupt 4
{
  unsigned char temp;
if(RI == 0) return;         //如果没有接收中断标志,返回
ES = 0;            //关闭串口中断
RI = 0;            //清串行中断标志位
temp = SBUF;        //接收缓冲器中的字符
putchar(temp);        //将接收的字符发送出去
ES = 1;                 //开启串口中断
}


参考一下这个

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
szmc + 1
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

38

帖子

1

粉丝