单片机80c51的串行口Word下载.docx

上传人:b****3 文档编号:17628504 上传时间:2022-12-07 格式:DOCX 页数:9 大小:545.74KB
下载 相关 举报
单片机80c51的串行口Word下载.docx_第1页
第1页 / 共9页
单片机80c51的串行口Word下载.docx_第2页
第2页 / 共9页
单片机80c51的串行口Word下载.docx_第3页
第3页 / 共9页
单片机80c51的串行口Word下载.docx_第4页
第4页 / 共9页
单片机80c51的串行口Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

单片机80c51的串行口Word下载.docx

《单片机80c51的串行口Word下载.docx》由会员分享,可在线阅读,更多相关《单片机80c51的串行口Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

单片机80c51的串行口Word下载.docx

信息流中的字符与字符间和字符内部位与位之间都需要一个同步时钟。

,可以把许多字符组成一个信息组,也称为一帧。

串行通信数据传输速率:

意义是每秒钟传送多少个二进制数。

一般异步通信在:

50~9600bit/s

同步通信在:

100~2Mbit/s

我们称之为比特率,但在二进制的情况下,比特率和波特率数值相同,故而一般称作“波特率”。

 

串行口简介:

组成:

两个数据缓冲寄存器SBUF

一个串行口控制寄存器SCON

一个输入移位寄存器

串行口波特率发生器用于控制串行通信的速率(由内部的分频器和控制开关电路组成),它的振荡源可以来自单片机的振荡频率fOSC,也可以来自定时/计数器的时钟输出。

外界数据通过引脚RXD(P3.0)输入。

数据先逐位进入输入移位寄存器,在进入接收寄存器(SBUF),在接收器中采用了双缓冲结构,避免数据重叠(因为CPU是被动的)。

要发送的数据通过发送控制器控制逻辑门电路经输出移位寄存器一位一位输出到TXD(P3.1)。

串行口控制寄存器SCON:

SM0,SM1为串行方式选择位,可以有四种方式;

SM2为多机通信控制位,在方式2、3中配合发送/接收数据的第九位(TB8/RB8)对主机发来的数据识别并处理。

REN为允许串行接收位,要由软件控制置1为允许接收。

TI、RI为发送/接收中断标志位。

注意:

在发送完数据后硬件会自动置TI为1,若要继续发送,必须用软件清零。

准备接收时,首先要清零RI,接收完8位数据后硬件会自动置RI为1,然后执行读数据指令MOVA,SBUF,然后一定要清RI为0。

波特率的设置:

方式0:

时钟频率的1/12,不受SMOD位影响。

方式2:

(2SMOD/64)*fosc

方式1和3:

(2SMOD/32)*T1溢出率

T1溢出周期:

(12/fosc)*(256-X)和定时器有关了

我们一般是根据波特率计算溢出初值X。

串行口工作方式:

由于我们最常用的是方式1,故重点介绍如下:

执行MOVSBUF,A指令时,CPU将一个数据写入发送缓冲寄存器,就启动发送器发送。

发送完一帧数据后,TI置1,通知CPU可以发送下一个数据了。

接收时,首先置RI为0,REN为1;

CPU开始从RXD采样,当发现1至0的负跳变时,确定是起始位0。

当停止位到来之后送入RB8,RI=1,申请中断,通知CPU取走SBUF中数据。

计算机仿真可以看出,方式一下的波特率误差最小,数据最稳定。

总的来说,方式2,3均为11位异步通信方式,只是波特率的设置方法不同。

发送或接收时和数据的第九位相关,联系到一个应用领域即多机通信。

多机通信:

80C51的串行通信方式2、3有一个专门的应用领域:

多机通信

TXD

RXD

主机

TXDRXD

从机0

从机1

从机2

从机3

主要靠主从机之间正确的设置与判断多机通信控制位SM2和发送/接收数据的第九位(D8)。

主机发送地址帧数据:

MOVSCON,#0D8H//11011000

置TB8为以表示1地址帧

所有从机初始化SM2=1,处于接收地址帧的状态

MOVSCON,#0F0H//11110000

当从机接收到主机发来的信息后,若RB8=1,则置RI=1,中断后判断发来的地址与自己是否相符。

若相符,SM2=0;

准备接收数据帧;

并向主机返回地址核对;

主机发送数据时,置TB8=0,此时各个从机都处于接收状态,但只有SM2=0的那个从机才可以接收到数据。

这里都是方式3;

下面举例示范:

#include<

reg52.h>

#defineucharunsignedchar

uchari;

sbitD0=P1^0;

sbitD1=P1^1;

sbitD2=P1^2;

sbitD3=P1^3;

sbitD4=P1^4;

sbitD5=P1^5;

sbitD6=P1^6;

sbitD7=P1^7;

voidchuankou(void)//串口初始化函数

{

TMOD=0X20;

//设置中断工作方式寄存器为00100000:

//方式2(自动重载)

//在方式2下,16位的定时/计数器被拆//成两个:

寄存器THI用以保持初值,TL0

//计数,若溢出,则置//位中断。

TH1=0Xfd;

TL1=0xfd;

//以11.0592MHZ为晶振,波特率为9600时的初值;

TR1=1;

SCON=0X50;

//01010000:

串口方式1,REN置1;

EA=1;

//总中断打开

ES=1;

}

voidmain(void)

voidchaunkou();

while

(1)//大循环

{

while(!

RI);

//等待RI置1,通知CPU从SBUF中取走数据

RI=0;

//软件清0,继续循环采样

i=SBUF;

switch(i)

{

case0x01:

D0=~D0;

break;

//取反

case0x02:

D1=~D1;

case0x03:

D2=~D2;

case0x04:

D3=~D3;

case0x05:

D4=~D4;

case0x06:

D5=~D5;

case0x07:

D6=~D6;

case0x08:

D7=~D7;

//使用串口调试助手发送数据,CPU根据SBUF接收到的数据使对应的LED亮;

}

}

编译:

keilc中

在target中设置频率:

11.0592MHZ,并生成hex文件;

利用USB转串口芯片,启动串口调试助手。

在STC中下载时要把串口助手中的端口关闭,否则串口复用会报错。

在串口助手中选择端口(不同的计算机不一样,我的是COM5)

选择十六进制数发送(不然发送的是ASCII码),输入01并点击手动发送,会看到LED1被点亮。

即完成了单片机接收电脑发送数据的实验。

以上是学习中的总结,参考了相关书籍和文档,也经过实验验证

叙述不清晰不到位的地方望见谅,或者和我交流。

微信号:

yr0868

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1