一、实验目的与要求
1、熟悉proteus仿真软件,掌握单片机原理图的绘图方法;
2、掌握串口通信工作原理及程序开发方法。
实验要求:
能够正确绘制proteus原理图;
用串行口功能实现双机通信;
使用两种编程方式得到预期功能:(1)中断控制方式;(2)查询方式;
二、实验原理
实验电路原理图如图所示,其中左机的RXD,TXD端口分别与右机的 TXD,RXD端口相连,两机按共地考虑。该电路实现串行功能,使发送的数据传入接受的单片机中,
使两个晶体显示管显示相同的数据。甲机循环发送数字 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;
}
}
}
来源: 整理文章为传播相关技术,网络版权归原作者所有,如有侵权,请联系删除。