Advertencia: La escritura no es fácil, no puede ser reproducido, gracias.
El puerto serie 232 del microcontrolador 51 - requisitos de la misión Fosc es 6 MHz, el temporizador T1 es el modo 2 trabajando
requisitos de la misión
Fosc es 6 MHz, el temporizador T1 para el modo de trabajo 2, el modo de funcionamiento en serie 1, a 4800 baudios.
1, la velocidad de transmisión es calculado por el valor inicial constante de tiempo del temporizador T1.
2, los transmite un procedimiento de preparación, que operan en consulta o de interrupción, que transmiten 30H - 3FH dieciséis bytes.
3, el procedimiento de preparación B recibe, acepta datos en dieciséis byte 40H - 4FH en.
Transmisor (máquina A)
/*****************************************************
*任务要求
*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--) ;
}
máquina de recepción (máquina B)
/*****************************************************
*任务要求
*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--) ;
}