(完整word版)单片机-串行口通信1.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

PAGE4/NUMPAGES4

安徽文达信息工程学院学生实验报告

学年第 学期课程名称《单片机原理与应用》实验日期:

院部

班级

姓名

学号

实验项目名称:

实验九串行口通信实验

指导老师:

实验类型:

编程仿真

成绩:

一、【实验目的】

掌握MCS-51单片机的串行口工作原理。??

2.学习编程实现MCS-51的UART通讯。?

3.掌握CPU利用串口通讯的方法?

二、【实验原理及内容】

串行口控制寄存器

与串行通信有关的控制寄存器主要是串行通信控制寄存器SCON。SCON是8051的一个可以位寻址的专用寄存器,用于串行数据通信的控制。SCON的单元地址98H,位地址9FH—98H。寄存器内容及位地址表示如下:

电源控制寄存器PCON中SMOD位可影响串行口的波特率。SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。实验中我们一般了不设置电源控制寄存器。

PCON

四种工作方式

1.串行工作方式0??

串行口为同步移位寄存器方式,波特率固定为f晶振/12。该方式主要用

于I/O口扩展等,方式0传送数据时,串行数据由RXD(P3.0)端输入或输出,而TXD(P3.1)此时仅作为同步移位脉冲发生器发出移位脉冲。

2.串行工作方式1?

(1)?方式1传送的数据格式?

方式1传送一帧为10位的串行数据,包括1位起始位,8位数据位和1位停止位。

数据发送由一条写入单片机发送寄存器SBUF指令启动。8位数据在串行口由硬件自动加入起始位和停止位组成完整的帧格式。在内部移位脉冲作用下,由TXD端串行输出。发送完一帧数据后,使TXD输出端维持”1”状态并置使TI标志位置1以通知CPU发送下一个字符。

接收数据由接收单片机SCON中的REN置1开始,随后串行口不断采样RXD端电平,当采样到RXD端电平从1向0跳变时,就认定是接收信号并开始接收从RXD端输入的数据,并送入内部接收寄存器SBUF中,直到停止位到来之后,并使RI位置1,通知CPU从SBUF中取走接收到的一帧字符。?

方式1传送数据时发送前应先清TI,接收前应先清RI。

3.串行工作方式2?

方式2是11位为一帧的串行通信方式,即1位始位,9位数据位和1位停止位。其中第9位数据既可作奇偶校验位,也可作控制位使用。其帧格式为:

4.串行工作方式3?

方式3通信过程与方式2完全相同。区别仅在于方式3的波特率可通过设置定时的工作方式和初值来设定(与串行工作方式1波特率设定方法相同)。顺便指出,由于方式1和方式3的波特率设置较为灵活,在单片机串行通信中得到广泛应用。

三、【实验器材】

PC机、Proteus仿真软件、Keilc51仿真软件

四、【实验步骤】

1、基础实验:

如下图,控制8个发光二极管流水点亮。图中74LS164的8脚(CLK端)为同步脉冲输入端,9脚为控制端,9脚电平由单片机的P1.0控制,当9脚为0时,允许串行数据由RXD端(P3.0)向74LS164的串行数据输入端A和B(1脚和2脚)输入,但是74LS164的8位并行输出端关闭;当9脚为1时,A和B输入端关闭,但是允许74LS164中的8位数据并行输出。当串行口将8位串行数据发送完毕后,申请中断,在中断服务程序中,单片机向通过串行口输出下一个8位数据。

2扩展实验

串口外接一片8位并行输入、串行输出同步移位寄存器74LS165,扩展一个8位并行输入口的电路,可将接在74LS165的8个开关S0~S7的状态通过串行口的方式0读入到单片机内。

五、【实验过程原始记录】(可附页)

基础实验:

#includereg51.h

#includestdio.h

sbitP1_0=0x90;

unsignedcharnSendByte;

voiddelay(unsignedinti)

{

unsignedcharj;

for(;i0;i--)

for(j=0;j125;j++);

}

main()

{

SCON=0x00;

EA=1; ES=1;

nSendByte=1;

SBUF=nSendByte;

P1_0=0;

while(1)

{;}

}

voidSerial_Port()interrupt4using0

{

if(TI)

{

P1_0=1;

SBUF=nSendByte;

delay(500);

P1_0=0;

nSend

文档评论(0)

135****0879 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档