找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2833|回复: 3
收起左侧

两个51单片机串口通信程序问题

[复制链接]
ID:606493 发表于 2020-3-24 16:10 | 显示全部楼层 |阅读模式
我再进行两个51单片机串口通信的时候遇到了一些问题,我不知道是我的程序的问题还是仿真的问题,求大神可以解答一下!!!!!!拜托了!!!!

这是我的输出数据的单片机的程序U1
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

void send(uchar state)
{
SBUF=state;
while(T1==0);
TI=0;
}
void SCON_Init()
{
TMOD=0x20; //定时器T1工作于方式2(可自动重装的8位定时器)
SCON=0x40; //串口工作方式1,不允许接收
PCON=0x00; //波特率不倍增
TH1=0xfd; //波特率为9600b/s
TL1=0xfd;
TR1=1; //启动定时器T1(T1作波特率的发生器)
}
void main()
{
P1=0xff;
SCON_Init();
while(1)
{
  send(P1);
}
}

/***************分割线************************************************/

这是我接收数据的程序U2
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

uchar state;
void receive()
{
while(RI==0);
  state=SBUF;
RI=0;
}
void SCON_Init()
{
TMOD=0x20; //设置定时器T1工作于方式2
SCON=0x50; //串口工作方式1,允许接收数据
PCON=0x00; //波特率不倍增
TH1=0xfd; //波特率为9600b/s
TL1=0xfd;
TR1=1; //启动定时器T1
REN=1; //允许接收数据
}
void main()
{
P1=0xff;
SCON_Init();
while(1)
{
  receive();
  P1=state;
}
}


这个是我仿真出来的样子
51hei图片20200324160804.png

回复

使用道具 举报

ID:235200 发表于 2020-3-24 23:46 | 显示全部楼层
是程序问题
while(T1==0);   //TI打错了  改为 while(!TI);
TI=0;
回复

使用道具 举报

ID:286327 发表于 2020-3-26 13:08 | 显示全部楼层
程序发送函数哪儿void send(uchar state) { SBUF=state; while(T1==0); TI=0; }这里是TI哦
回复

使用道具 举报

ID:851716 发表于 2020-12-24 11:23 | 显示全部楼层
这两个P1=oxff删去之后也不影响仿真效果,这个P1=oxff赋初值有什么用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表