51单片机之232串口实现-任务要求Fosc为6MHz,定时器T1为工作模式2

Warning:写作不易,请勿转载,感谢。

51单片机之232串口实现-任务要求Fosc为6MHz,定时器T1为工作模式2

任务要求

Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。
1、通过波特率计算定时器T1时间常数初值。
2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。
3、编写乙机接收程序,接受十六字节数据放在40H——4FH中。

发送机(甲机)

/*****************************************************
*任务要求
*Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。
*1、通过波特率计算定时器T1时间常数初值。
*2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。
*3、编写乙机接收程序,接受十六字节数据放在40H——4FH中。
*
*项目名:甲机
*作者:刘子琰
*时间:2020年4月4日11:34:59
******************************************************/       
#include <REG52.H>
#include <stdio.h>
typedef unsigned char u8;

void delay(unsigned int i);    //函数声明

u8 i=0;
u8 *Tx_Buf= (u8*)0x30; 
void main (void) {
	SCON = 0x50;      	//REN=1允许串行接受状态,串口工作模式1    	   
	TMOD|= 0x20;      	//定时器1的工作方式2                       
	PCON|= 0x80;      	//波特率提高一倍                                                        
	TH1 = 0xFA;			//TH1=256-(6000000/12)*(2/(32*4800))	
	TL1 = 0xFA; 		//因为是定时器模式2,所以高8位和低八位要相同
	TR1  = 1;        	//开启定时器1                                                      
	ES   = 1;        	//开串口中断                  
	EA   = 1;        	// 开总中断 
	while(1)
	{  
		for(i=0;i<16;i++){
			SBUF = Tx_Buf[i];	    //SUBF作为发送缓冲器
			while(!TI);				// 等特数据传送	(TI发送中断标志)
			TI = 0;					// 清除数据传送标志
		} 
		delay(1000);  
	}
}

 /**************************************************
          										  
		  延时处理程序												 
												  
**************************************************/

 void delay(unsigned int i)
{
	unsigned char j;
	for(i; i > 0; i--)
		for(j = 200; j > 0; j--) ;

}

接受机(乙机)

/*****************************************************
*任务要求
*Fosc为6MHz,定时器T1为工作模式2,串口工作模式1,波特率为4800。
*1、通过波特率计算定时器T1时间常数初值。
*2、编写甲机发送程序,工作于查询或者中断方式,传送30H——3FH中的十六个字节。
*3、编写乙机接收程序,接受十六字节数据放在40H——4FH中。
*
*项目名:乙机
*作者:刘子琰
*时间:2020年4月4日11:34:59
******************************************************/       
#include <REG52.H>
#include <stdio.h>
typedef unsigned char u8;

void delay(unsigned int i);    //函数声明

u8 i=0;
u8 *Rx_Buf= (u8*)0x40; 
void main (void) {
	SCON = 0x50;      	//REN=1允许串行接受状态,串口工作模式1    	   
	TMOD|= 0x20;      	//定时器1的工作方式2                       
	PCON|= 0x80;      	//波特率提高一倍                                                        
	TH1 = 0xFA;			//TH1=256-(6000000/12)*(2/(32*4800))	
	TL1 = 0xFA; 		//因为是定时器模式2,所以高8位和低八位要相同
	TR1  = 1;        	//开启定时器1                                                      
	ES   = 1;        	//开串口中断                  
	EA   = 1;        	// 开总中断 
	while(1)
	{  
		for(i=0;i<16;i++){
			if(RI)       //RI接受中断标志
			{  
				RI=0; 	    //清除RI接受中断标志
				Rx_Buf[i]=SBUF ;	    //SUBF作为接受寄存器
			}
		} 
		delay(1000);  
	}
}

 /**************************************************
          										  
		  延时处理程序												 
												  
**************************************************/

 void delay(unsigned int i)
{
	unsigned char j;
	for(i; i > 0; i--)
		for(j = 200; j > 0; j--) ;

}
发布了19 篇原创文章 · 获赞 17 · 访问量 4074

猜你喜欢

转载自blog.csdn.net/qq_43605009/article/details/105308559