实验目标:电脑通过串口将数据发送给51单片机,单片机原封不动地将数据通过串口返送给电脑。
串口的内部结构如下图所示:
串口配置如下:
TMOD |= 0X20 ; //设置计数器工作方式 2

SCON = 0X50 ; //设置为工作方式 1


PCON = 0X80 ; //波特率加倍

TH1 = baud ; //计数器初始值设置
TL1 = baud ;

ES = 1 ; //打开接收中断
EA = 1 ; //打开总中断

TR1 = 1 ; //打开计数器

中断号:

代码如下:
#include "reg52.h"typedef unsigned char u8;
typedef unsigned int u16;void uart_init(u8 baud){TMOD|=0X20; //设置计数器工作方式 2SCON=0X50; //设置为工作方式 1PCON=0X80; //波特率加倍TH1=baud; //计数器初始值设置TL1=baud;ES=1; //打开接收中断EA=1; //打开总中断TR1=1; //打开计数器
}void main(){uart_init(0xFA);//计数器初始值while(1){}
}void uart() interrupt 4{RI = 0; //清除接收中断标志位rec_data=SBUF; //存储接收到的数据SBUF=rec_data; //将接收到的数据放入到发送寄存器while(!TI); //等待发送数据完成TI=0; //清除发送完成标志位
}