目录
一、实验目的
熟悉串行口通信工作原理,掌握多机项目创建和双机串行编程方法。
二、实验内容
【参照图表】
(1)创建一个包含2个80C51固件,且都采用Keil for 8051编译器的新项目;
(2)编写C51源程序,要求实现如下功能:U1机循环向U2机发送整数00~9*(*为学号最后一位),再根据从U2机发来的返回值决定是继续发送新数(若返回值与发送值相同时)还是重复发送当前数(若返回值与发送值不同时);U2机则是将从U1机上接收到的值作为返回值再发送给U1机。两机都将当前值以十进制数形式显示在各机的2位共阴极数码管上。
(4)完成源程序编译和动态调试,实现实验6的控制功能要求;
(6)完成实验6报告的撰写。
三、实验步骤
(1)创建一个包含2个80C51固件,且都采用Keil for 8051编译器的新项目;
(2)编写C51源程序,要求实现如下功能:U1机循环向U2机发送整数00~94(4为我的学号最后一位),再根据从U2机发来的返回值决定是继续发送新数(若返回值与发送值相同时)还是重复发送当前数(若返回值与发送值不同时);U2机则是将从U1机上接收到的值作为返回值再发送给U1机。两机都将当前值以十进制数形式显示在各机的2位共阴极数码管上。
U1代码:
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;
TMOD=0x20;
TH1 = TL1 = 0xf4;
PCON=0;
SCON = 0x50;
TR1=1;
while(1){
SBUF = counter;
while(TI==0);
TI = 0;
while(RI==0);
RI = 0;
if(SBUF ==counter){
P0 = map[counter/10];
P2 = map[counter%10];
if(++counter>94) counter=0;
delay(500);
}}}
U2代码:
MacB_resp() interrupt 4{
RI = 0;
receiv = SBUF;
SBUF = receiv;
while(TI==0);
TI = 0;
P0 = map[receiv/10];
P2 = map[receiv%10];
}
void main(void){
TMOD=0x20;
TH1=TL1=0xf4;
PCON=0;
SCON=0x50;
EA=ES=1;
TR1=1;
while(1);
}
(4)完成源程序编译和动态调试,实现实验6的控制功能要求;U1机循环向U2机发送整数00~94(4为我的学号最后一位),再根据从U2机发来的返回值决定是继续发送新数(若返回值与发送值相同时)还是重复发送当前数(若返回值与发送值不同时);U2机则是将从U1机上接收到的值作为返回值再发送给U1机。两机都将当前值以十进制数形式显示在各机的2位共阴极数码管上。
启动开始:
一直到94之后清零。
四、记录与处理
完成源程序编译和动态调试,实现实验6的控制功能要求;U1机循环向U2机发送整数00~94(4为我的学号最后一位),再根据从U2机发来的返回值决定是继续发送新数(若返回值与发送值相同时)还是重复发送当前数(若返回值与发送值不同时);U2机则是将从U1机上接收到的值作为返回值再发送给U1机。两机都将当前值以十进制数形式显示在各机的2位共阴极数码管上。
启动开始:
一直到94之后清零。
五、思考
1.双机串行通信原理:串行通信是一种数据传输方式,数据在一条传输线上按位(bit)顺序逐位传输。在双机串行通信中,通常有两台计算机或微控制器通过串行接口进行数据的发送和接收。
2.在本次实验中,我们使用了两个80C51微控制器进行双机串行通信。80C51内部集成了串行通信接口,可以方便地进行串行数据的发送和接收。发送方将数据按照一定的格式(如起始位、数据位、停止位等)通过串行接口发送出去,接收方则通过串行接口接收这些数据,并进行相应的处理。本次实验中U1机作为发送方,循环发送整数00到94,而U2机作为接收方,接收U1机发送的数据,并将其作为返回值再发送给U1机,形成了一个简单的双机串行通信系统。
3.本次实验我成功实现了双机串行通信的功能,不仅加深了对串行通信原理的理解,还提高了编程和调试能,还培养了我的实践能力和创新思维。此外,我也认识到在实验过程中要细心、耐心,并善于利用书本资源来解决问题。
六、成果文件提取链接
链接:https://pan.baidu.com/s/1vih-osSS5LE-I0vk-Imugg?pwd=ugmx
提取码:ugmx