警告:書き込みは容易ではない、おかげで転載しないでください。
ミッションの要件
FOSCは4800ボーで6MHzの、作業モード2、シリアル動作モード1用のタイマT1です。
図1に示すように、ボーレートは、タイマT1の時定数初期値によって計算されます。
2、準備手順Aに送信し、クエリまたは割り込みで動作30Hを送信する- 3FH 16バイト。
4FHに-図3は、準備手順Bを受信し、16バイト40Hのデータを受け付けます。
送信機(マシン)
/*****************************************************
*任务要求
*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--) ;
}
受信機(マシン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--) ;
}