单片机实验报告
实验名称:
姓 名: 学 号: 班 级: 时 间:
串行通信实验
通信 2013.11
南京理工大学紫金学院电光系
一、 实验目的
1、理解单片机串行口的工作原理。 2、学习使用单片机的TXD、RXD口。 3、了解MAX232芯片的作用。
二、 实验原理
MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送接收数据。它有两个互相独立的接受,发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号—(99H),发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。要发送的字节数据直接写入发送缓冲器,SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF。串行接口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号作接收或发送移位寄存器的移位时钟。T1与R1分别为发送完数据与接收完数据的中断标志,用来向CPU发中断请求。
三、 实验内容
1、学会DPFlash软件的操作与使用,以及内部内嵌的一个串口调试软件的使用。 2、用串口连接PC机和DP-51PROC单片机综合仿真实验仪。RS232串行电路图如图:
RS232串口电路图
3、利用单片机的串行发送0x55,波特率为9600.程序设计流程图如下:
(1)代码
#include
#define uchar unsigned char uchar a,flag; void uartinit() {
TMOD=0X20; TH1=0XFD; TL1=0XFD; TR1=1; EA=1; ES=1;
SCON=0X50; }
void delay(uchar z) {
uchar m,n;
for(m=z;m<20;m++) for(n=0;n<20;n++); }
void send(uchar dat) {
SBUF=dat;
P1=dat; while(!TI); TI=0; }
void receive()interrupt 4 {
P1=SBUF; delay(10); a=SBUF; delay(10); flag=1; }
void main() {
uartinit(); while(1) {
if(flag==1) {
ES=0; RI=0; flag=0; send(a); ES=1; } } }
(2)电路图
4、在单片机接收到0X55时返回一个0x41。在PC机一端,已接收到0x41为完成,波特率 为9600。程序设计流程图如下: