题目://晶振12MHz,波特率1200, 程序启动后单片机主动发出Hello Server, PC使用串口助手应答单片机,当单片机收到PC发来的数据AAH后,将50H-5FH的16个字节发送给PC,当51收到E0H时就发40H-4FH的16个字节数据,若单片机收到其他数据后,则不做任何修改返回PC。
代码
#include"reg51.h"
#include"intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
u8 a[12]="Hello Server";
u16 i=0;
u8 date;
u16 x;
u8 *p=0x50;
u8 *q=0x40;
void usart_init()
{
SCON=0x50;
EA=1;
ES=1;
}
void tim1_init()
{
TMOD=0x20;
TH1=0xe6;
TL1=0xe6;
TR1=1;
}
void main()
{
usart_init();
tim1_init();
SBUF=a[i];
while(1);
}
void usart() interrupt 4
{
if(TI)
{
TI=0;
if(i<12)
{
i++;
SBUF=a[i];
}
}
else
{
RI=0;
if(SBUF==0xaa)
{
for(x=0;x<16;x++)
{
SBUF=p;
p++;
while(!TI);
TI=0;
}
p=0x50;
}
else if(SBUF==0xe0)
{
for(x=0;x<16;x++)
{
SBUF=q;
q++;
while(!TI);
TI=0;
}
q=0x40;
}
else
date=SBUF;
SBUF=date;
}
}
仿真图

串口助手

元器件
compim
AT89C51(AT89C52)