微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机之间串口通信问题,主要为SBUF内的值无法改变。

51单片机之间串口通信问题,主要为SBUF内的值无法改变。

时间:10-02 整理:3721RD 点击:
用发送单片机去控制接收单片机P2口的LED灯
发送单片机的程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar);
void initial();//初始化定时器1,使其工作在方式2,波特率设定9600
void delay(uchar Z)
{uchar x;
  for(x=Z;x>0;x--)
  {
   _nop_();
   }
}
void initial()
{
TMOD=0x20;
TH1=0xfd; //波特率设定值
TL1=0xfd;
TR1=1;//定时器1开始工作
REN=1;//允许串口接收数据
SM0=0;
SM1=1;
TI=0;
RI=0;
EA=1;
ES=1;
delay(2);
}
void main()
{ uchar x,y;
  initial();
  for(x=0;x<=16;x++)
{y=(16-x);
  SBUF=y;  //此处给发送缓冲器输入值时,经过调试SBUF的值为0x7f;保持不变
  while(TI==0);
  TI=0;
  delay(100);
  }
  P0=0x00;
  while(1);//程序停在此处
}

接收单片机的接受程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar);
void initial();//初始化定时器1,使其工作在方式2,波特率设定9600
void delay(uchar Z)
{uchar x;
  for(x=Z;x>0;x--)
  {
   _nop_();
   }
}
void initial()
{
TMOD=0x20;
TH1=0xfd; //波特率设定值
TL1=0xfd;
TR1=1;//定时器1开始工作
REN=1;//允许串口接收数据
SM0=0;
SM1=1;
TI=0;
RI=0;
EA=1;
ES=1;
delay(2);
}
void main()
{
  initial();
  while(1)
  {
   ES=1;
   }
}
void series () interrupt 4
{
RI=0;
P2=SBUF;
ES=0;
}
Proteus仿真图如下所示:
[img]file://C:\Documents and Settings\Administrator\桌面\%5B@IK4ZQY@V4`%5D[S1((0KIU5.jpg[/img]

给SBUF寄存器赋值都不成功吗,不可能吧,你用硬件仿真器看一下呢

发送端的程序有问题

我觉得你 发送端一直发送的是-1

下来下,看下。

看看先.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top