找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1933|回复: 7
收起左侧

如何实现51单片机双机串行双机通讯的两个数据交替发送

[复制链接]
ID:920083 发表于 2021-5-12 15:47 来自手机 | 显示全部楼层 |阅读模式
求解如何改写这段c语言的发送程序然后实现两个数据交替发送。
#include<reg51.h>
#define uchar unsigned char
void init();
void send();

void init()
{
PCON &=0x7F;
TMOD=0x20;
TH1=0xD0;
TL1=0xD0;
TR1=1;
SCON=0x50;
EA=1;
ES=1;
ET1=0;
}
void main()
{
init();
send();

while(1);

}
void send()
{

SBUF=55;
while(!TI);
TI=0;
}
回复

使用道具 举报

ID:889094 发表于 2021-5-12 16:38 | 显示全部楼层
发送函数没毛病,可以发送,只是你装的0xD0是什么波特率?然后就是没有接收处理函数
回复

使用道具 举报

ID:920083 发表于 2021-5-12 18:46 来自手机 | 显示全部楼层
birdzhyli 发表于 2021-5-12 16:38
发送函数没毛病,可以发送,只是你装的0xD0是什么波特率?然后就是没有接收处理函数

波特率是600   下面是接受程序
#include<reg51.h>
bit tt;
unsigned char rev;
unsigned char code dis[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void init()
{
PCON&=0x7F;
TMOD=0x20;
TH1=0xD0;
TL1=0xD0;
TR1=1;
SCON=0x50;
EA=1;
ES=1;
ET1=0;
}
void delay(unsigned int c)
{
   unsigned char i,j;
   for(i=0;i<c;i++)         ;
    for(j=0;j<110;j++);
}
void display(unsigned char x)
{
unsigned char shi,ge;
shi=x/10;
ge=x%10;
P0=dis[shi];
P2=0xbf;
delay(5);
P0=0;
P2=0xff;

P0=dis[ge];
P2=0x7f;
delay(5);
P0=0;
P2=0xff;

}

void main()
{
init();
while(1)
{
display(rev);
delay(5);
}

}

void receive() interrupt 4  //串口接收函数
{
rev=SBUF;
ES=0;
RI=0;
}
回复

使用道具 举报

ID:889094 发表于 2021-5-12 19:53 | 显示全部楼层
貌似没什么问题,只是函数结构实在不怎么样,看看手册上面的例程,串口收发函数不是这个样子的
void UsartInt() interrupt 4
{
unsigned char receiveData;
if(RI == 1)
{
  receiveData=SBUF; //出去接收到的数据
  RI = 0;           //清除接收中断标志位
  while(busy);
  busy=1;
  SBUF=receiveData; //将接收到的数据放入到发送寄存器
}  
if(TI)
{
   busy=0;
   TI=0;
}
}
这是我常用的根据手册弄的串口模板,发送之前检查busy,收到之后先取数据再RI=0
回复

使用道具 举报

ID:920083 发表于 2021-5-12 20:17 来自手机 | 显示全部楼层
birdzhyli 发表于 2021-5-12 19:53
貌似没什么问题,只是函数结构实在不怎么样,看看手册上面的例程,串口收发函数不是这个样子的
void Usart ...

如果发送两个数据  并且让他们交替显示的话 应该在么改?比如 55H  ccH
回复

使用道具 举报

ID:889094 发表于 2021-5-12 22:19 | 显示全部楼层
可以两个单片机程序大体相同,只是在其中一个main中初始完串口后就发送一个字符或数字0;然后每个单片机串口设置成收到一个字符后进行+1,判断到9就变成0,然后再通过串口送出这样就会在两个单片机之间形成一个循环,每个单片机都可以显示出来,当然发送过程要有个延时,不要太快,显示函数要保持24HZ以上的刷新
回复

使用道具 举报

ID:920083 发表于 2021-5-13 11:00 来自手机 | 显示全部楼层
birdzhyli 发表于 2021-5-12 22:19
可以两个单片机程序大体相同,只是在其中一个main中初始完串口后就发送一个字符或数字0;然后每个单片机串 ...

如果接收十六进制数的话   ,接收程序段需要咋改,我这个显示不了十六进制。
回复

使用道具 举报

ID:883031 发表于 2021-5-13 17:04 | 显示全部楼层
林册 发表于 2021-5-13 11:00
如果接收十六进制数的话   ,接收程序段需要咋改,我这个显示不了十六进制。

你的程序作了处理,肯定显示不了A-F
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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