C51单片机第四次实验 -----串口通信

前言
       实验1:在开关S0~S7上设置好两位十进制(学号的低两位)的BCD码,开机后在两个数码管上显示两位十进制数。
        实验2:将甲机P1口接8个开关设置的两位十进制(学号的低两位)BCD码,能过串口传送给乙机,乙机将这两位十进制数在两个数码管上显示。

参考链接

常用编码类型之BCD编码 -CSDN博客

51单片机——串口通信(发送和接受数据) -CSDN博客

7SEG-BCD 七段数码管

实验一 

Keil

和书上实现差不多,就是把按钮换成闭合开关,流水灯换成数码管。当P1.0为0,即总开关S按下,表示允许并行读入开关K0~K7的状态数字量,通过P1.1把SH/~(LD)置零,则并行读入开关K0~K7的状态。再让P1.1=1,即SH/~(LD)置1,74LS165将刚才读到的开关数字量状态通过QH端串行发送到单片机的SBUF(串口缓冲寄存器)中,在中断服务子程序中把SBUF中的数据读到nRxByte单元,送到C51单片机的P2端口,也就是你学号最后两位的BCD码,在数码管上显示。

#include
#include
#include
#define uchar unsigned char
#define uint  unsigned int 
sbit P1_0=0x90;
sbit P1_1=0x91;

uchar nRxByte;

void delay(uint i)	 //延迟函数
	{  
	  uchar j;
	  for(i;i>0;i--)	   //变量i由实际参数传入一个值,因此i不能赋初值
		for(j=0;j<125;j++);
}
	  
void  main()
    {
     SCON=0x10;  //串口初始化为方式0
     ES=1;       //允许串口中断
     EA=1;	  //允许全局中断
     while(1);  //死循环等待中断	 
}
void  Serial_Port() interrupt 4 //口中断服务子程序
	{
	    if(P1_0==0)				//如果开关按下,读开关状态
			P1_1=0;			    //P1^1=0并行读入开关状态
			delay(1);		    
			P1_1=1;				//P1^1=1将开关的状态串行读入串口中
			RI=0;				//接收中断标志PI清零
			nRxByte=SBUF;		//接收的开关状态数据从SBUF读入到nRxByte单元中
			P2=nRxByte;			//开关状态数据送到P2口,在数码管上显示学号的最后两位
}

Proteus

原理图把按钮换成闭合开关,流水灯换成数码管(7SEG-BCD-GRN)。

实验所需的元器件

C51单片机第四次实验 -----串口通信_第1张图片

运行结果:

C51单片机第四次实验 -----串口通信_第2张图片

实验二

Keil

这个把第二个AT89C51的流水灯部分换成数码管(7SEG-BCD-GRN)。两个芯片要分别编译两个HEX可执行文件。

//甲机串行发送

//甲机串行发送
#include
#define uchar unsigned char
#define uint  unsigned int 
void main(){
   uchar temp=0;
   TMOD=0x20; //设置定时器T1工作在方式2
   TH1=0xfd;  //波特率9600
   TL1=0xfd;
   SCON=0x40; //串口初始化方式1发送,不接收
   PCON=0x00;  //SMOD=0
   TR1=1;      //启动T1
   P1=0xff;     //设置P1口为输入
while(1){
    temp=P1;
	SBUF=temp;
	while(TI==0);
	TI=0;
    }
}

//乙机串行接收

//乙机串行接收
#include
#define uchar unsigned char
#define uint  unsigned int
void main(){
     uchar temp=0;
	 TMOD=0x20;  //设置定时器1工作在方式2
	 TH1=0xfd;   //波特率9600
	 TL1=0xfd;    
	 SCON=0x50;	  //设置串口方式1接收,REN=1
	 PCON=0X00;   //SOMD=0
	 TR1=1;	     //启动T1
while(1){
	    while(RI==0); //若RI等于0,未接受到数据
		RI=0;       //接收到数据,将RI清零
		temp=SBUF;  //读取数据存入SBUF
		P1=temp;    //接受的数据送到P1口控制数码管显示学号的最后两位
	 
	 }  
}

Proteus

C51单片机第四次实验 -----串口通信_第3张图片

见实验(1)— 实验(3) 

单片机实验(一)--CSDN (封奚泽优)icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134429449?spm=1001.2014.3001.5502

单片机实验(二 ) --CSDN (封奚泽优)icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134479372?spm=1001.2014.3001.5502单片机实验(三)--CSDN(封奚泽优)icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134624276?spm=1001.2014.3001.5502

你可能感兴趣的:(51单片机,嵌入式硬件,单片机)