单片机实验报告串行口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实验报告
实验名称:串行通信实验
*名:**
学号:*********
班级:光电一班
实验时间:2011-11-29
南京理工大学紫金学院电光系
一、实验目的
1、理解单片机串行口的工作原理;
2、学习使用单片机的TXD、RXD口;
3、了解MAX232芯片的使用。
二、实验原理
MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送、接收数据。它有两个相互独立的接收、发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号(99H),发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。
要发送的字节数据直接写入发送缓冲器,SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF;串行接口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号做接收或发送移位寄存器的移位时钟。TI和RI分别发送完数据和接收完数据的中断标志,用来向CPU发中断请求。
三、实验内容
1、学会DPFlash软件的操作与使用,以及内部内嵌的一个串口调试软件的使用。
2、用串口连接PC机和DP-51PROC单片机综合仿真实验仪。
3、编写一个程序,利用单片机的串行口发送0x55,波特率为9600。
程序设计流程图
4、程序下载运行后,可在PC机上的串口调试软件上(内嵌在DPFlash软件的串口调
试器,设置通信口为COM1口,波特率为9600,数据位8,停止位1)看到接收到“UUUUUU……”,出现这样的结果就基本达到要求。
(1)代码:
#include
void main()
{
long int i;
SCON=0x40;
PCON=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TI=1;
TR1=1;
star:for(i=0;i<5000;i++);
SBUF=0x55;
goto star;
}
(2)电路图;
5、在单片机接收到0x55时返回一个0x41,在PC机一端,以接收到0x41完成,波特率2400。
程序设计流程图 (1)代码
#include
SCON=0x40; REN=1; TMOD=0x20; TH1=0xf4; TL1=0xf4;
TR1=1; while(1) {
start:while(!RI); RI=0;
if(SBUF!=0x55) goto start; else SBUF=0x41;
}}
(3)电路图
XTAL2
18
XTAL1
19
ALE 30EA
31
PSEN 29RST
9
P0.0/AD0
39P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD
17
P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1
AT89C51
ERROR
TXD 3RXD 2CTS 8RTS 7DSR 6DTR 4DCD 1RI
9
P1
COMPIM
7、 单片机与单片机之间进行串口通信,实现基于方式1的单工通信,发送方以一定波特率发一串有效数据,接收方接收后送P1口通过LED 灯显示。
(1)单片机发送代码:
#include
Code unsigned char temp[9]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f,0xff}; long int i;
void delay()
{
int i,j;
for(i=0;i<200;i++)
for(j=0;j<210;j++);
}
void main()
{
SCON=0x40;
TMOD=0x20;
TH1=0xf4;
TL1=0xf4;
TR1=1;
P1=0xff;
while(1){for(i=0;i<9;i++)
{
SBUF=temp[i];
while(!TI);
TI=0;
delay();
}
i=0;
}
}
(3)单片机接受代码
#include
void main()
{
SCON=0x40;
REN=1;
TMOD=0x20;
TH1=0xf4;
TL1=0xf4;
TR1=1;
while(!RI)
{