一、实验目的
1.理解串行通信的特点及分类
2.掌握单片机内部串口的3种工作方式的特点及应用
3.掌握双机通信的编程以及单工传输的特点
4.理解全双工通信的特点
5.理解主从式多机通信的工作过程,掌握串口的工作方式2和3的特点
二、知识要点
(1)8051内部有一个可编程的全双工的串行接口,可同时进行数据的串行发送和接收;串口有4种工作方式,但只有方式1,2,3能够实现串行异步通信,其不同在于波特率及数据帧格式。
(2)与串口相关的控制字主要有SCON,PCON。
(3)串口的工作方式2和3可以实现主从式多机通信,即一台主机,多台从机,从机接受主机的传输控制。
三、实验内容
(1)利用8051内部串口实现自发自收的数据通信,波特率及帧格式自定,要求所传输的数据能够控制LED的亮灭。
#include<reg51.h>
void main(){
int led[]={
1,2,4,8,16,32,64,128};
int i,j;
TMOD=0X20;
TH1=0XF8;
TL1=0XF8;
TR1=1;
SCON=0X50;
PCON=0;
while(1){
for(i=0;i<8;i++){
RI=0;
SBUF=~led[i];
while(TI==0);
TI=0;
while(RI==0);
P1=SBUF;
for(j=0;j<20000;j++);
}
}
}
(2)利用8051内部串口实现双机通信,波特率及帧格式自定。要求发送方采用查询控制方式,接收方采用中断控制方式。
a.发送端:
#include<reg51.h>
void delay(){
int j;
for(j=0;j<20000;j++);
}
void main(){
int led[]={
1,4,16,64,2,8,32,128};
TMOD=0x20;
TH1=0xf8;
TL1=0xf8;
SCON=0X50;
PCON=0;
TR1=1;
while(1){
int i;
for(i=0;i<8;i++){
SBUF=~led[i];
while(TI==0);
TI=0;
delay();
}
}
}
b.接收端:
#include<reg51.h>
void delay(){
unsigned int j;
for(j=0;j<20000;j++);
}
void main(){
TMOD=0x20;
TH1=TL1=0xf8;
SCON=0X50;
PCON=0X00;
TR1=1;
EA=1;
ES=1;
while(1){
while(RI==0);
delay();
}
}
void ppp() interrupt 4{
P1=SBUF;
RI=0;
}
以上两题电路图相同