这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 串口调试出现了问题,请大侠来指导

共5条 1/1 1 跳转至

串口调试出现了问题,请大侠来指导

工程师
2012-09-17 17:36:36     打赏
/*SBUF:接受器具有双缓冲结构,即在从接收器寄存器中读出前一个已经收到的字节之前
 ,便能接受到第二个字节,如果第二个字节已经接收完毕之前,第一个字节还没有读出来,
 则将丢失其中一个字节,对于发送器,因为数据时由CPU控制和发送的,所以不需要考虑*/
 #include <reg51.h>
 #define uchar unsigned char
 #define uint unsigne int
 uchar flag,a,i;
 void main()
 {
     TMOD=0x20;
  TH1=0xfd;
  TL1=0xfd;
  TR1=1;
  SM0=0;
  SM1=1;
  REN=1;
  EA=1;
  ES=1;
  while(1)
  {
  if(flag==1)
   {
      ES=0;
   SBUF=a;
      while(!TI);
   TI=0;
   ES=1;
   }
  }
}
 void ser() interrupt 4
 {
     RI=0;
  P1=SBUF;
  a=SBUF;
  flag=1;
 }
很简单的一个串口通信程序     为什么单个的字母不能显示啊,两个或者三个就会出现一个 错误的乱码    51单片机   实在解决不了了 
 



关键词: 串口     调试     出现     问题     大侠     指导    

工程师
2012-09-17 18:19:46     打赏
2楼
发送55,没有出现理想中的高低电平,但是P1检测出来的数据是对的,接收的也是55,但是发送fe的话就会出现fe3f循环着来

专家
2012-09-17 21:38:39     打赏
3楼
搬用你的程序用keil仿真了下,寄存器没变化,不知道是怎么回事

工程师
2012-09-17 23:00:37     打赏
4楼
#include <reg51.h>
 #define uchar unsigned char
 #define uint unsigne int
 uchar flag,a,i;
 void main()
 {
     TMOD=0x20;
  TH1=0xfd;
  TL1=0xfd;
  TR1=1;
  SM0=0;
  SM1=1;
  REN=1;
  EA=1;
  ES=1;
  while(1)
  {
  if(flag==1)
   {
     flag=0;
      ES=0;
   SBUF=a;
      while(!TI);
   TI=0;
   ES=1;
   }
  }
}
 void ser() interrupt 4
 {
     RI=0;
  P1=SBUF;
  a=SBUF;
  flag=1;
}
中间加上flag=0,再换上11.0592M的晶振就可以了

工程师
2012-09-17 23:07:52     打赏
5楼
你按照楼上的那个程序加上那个flag=0试试

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]