这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】双机串行通信--from森

共1条 1/1 1 跳转至

【转载】双机串行通信--from森

工程师
2024-12-19 18:41:47     打赏

一、实验目的与要求

1、熟悉proteus仿真软件,掌握单片机原理图的绘图方法;

2、掌握串口通信工作原理及程序开发方法。

实验要求:

能够正确绘制proteus原理图;

用串行口功能实现双机通信;

使用两种编程方式得到预期功能:(1)中断控制方式;(2)查询方式;

二、实验原理

        实验电路原理图如图所示,其中左机的RXD,TXD端口分别与右机的 TXD,RXD端口相连,两机按共地考虑。该电路实现串行功能,使发送的数据传入接受的单片机中,

使两个晶体显示管显示相同的数据。甲机循环发送数字 0~ F,乙机接收后返回接收值。若发送值与返回值相等,继续发送下一数字,否则重复发送当前数字。采用查询法检查收发是否完成

1734604677147514.png

三、实验内容

        点击仿真软件开始时,将左侧单片机的数据内容传输给右侧单片机,成功实现双机串行通信。并且将数据在带译码电路的数码管(7SEG-BCD)中显示,依次显示0~F,以此循环。 

四、实验代码

实验发送代码:

#include<reg51.h>

#define uchar unsigned char

void delay (unsigned int time){

unsigned int j=0;

for(;time>0;time--)

for(j=0;j<125;j++);

}

void main(void){

uchar counter=0;

P2=0x3f;

TMOD=0x20;//定时器0,工作方式2

TH1=0xf4;

TL1=0xf4;

PCON=0x00;//寄存器设置

TR1=1;//定时控制开关(出现的原因:因为串行控制寄存器SCON的工作方式为1,其波特率的产生用到定时器)(教材126)

SCON=0x50;//串行口工作方式1

while(1){

SBUF=counter;//显示数据

while(TI==0);//判断数据是否发送成功

TI=0;

while(RI==0);//是否成功接收

RI=0;

if(SBUF==counter){//接收的数据与发送的数据是否相等

P2=counter;

if(++counter>15) counter=0;

delay(500);

}

}

}

实验接收代码:

#include<reg51.h>

#define uchar unsigned char

void main(void){

uchar receiv;

P2=0x3f;

TMOD=0x20;

TH1=0xf4;

TL1=0xf4;

PCON=0x00;

TR1=1;

SCON=0x50;

while(1){

while(RI==1){//判断数据是否接收成功

RI=0;

receiv=SBUF;//将接收SBUF的数据传给变量receive

SBUF=receiv;//将receive的数据传送给SBUF,作为回送信号

while(TI==0);//判断数据是否发送成功

TI=0;

P2=receiv;

}

}

}

来源: 整理文章为传播相关技术,网络版权归原作者所有,如有侵权,请联系删除。

                            

                        




共1条 1/1 1 跳转至

回复

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