串行通信最终新文档格式.docx

上传人:b****4 文档编号:17175306 上传时间:2022-11-28 格式:DOCX 页数:26 大小:122.50KB
下载 相关 举报
串行通信最终新文档格式.docx_第1页
第1页 / 共26页
串行通信最终新文档格式.docx_第2页
第2页 / 共26页
串行通信最终新文档格式.docx_第3页
第3页 / 共26页
串行通信最终新文档格式.docx_第4页
第4页 / 共26页
串行通信最终新文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

串行通信最终新文档格式.docx

《串行通信最终新文档格式.docx》由会员分享,可在线阅读,更多相关《串行通信最终新文档格式.docx(26页珍藏版)》请在冰豆网上搜索。

串行通信最终新文档格式.docx

REN

TB8

RB8

TI

RI

见下表

多机通信

0:

单机对单

1:

接收控制

禁止

允许

发送数据第9位

接收数据第9位

发送中断标志

接收中断标志

SM0、SM1:

串行口工作方式选择位用于设定串行口工作方式,其定义如下:

SM0、SM1

相应工作方式

功能描述

所用波特率

00

方式0

8位移位寄存器

Fosc/12

01

方式1

10位异步收发

由定时器控制

10

方式2

11位异步收发

Fosc/64或osc/32

11

方式3

可变

其中fosc为晶振频率

SM2:

多机通讯控制位。

在方式0时,SM2一定要等于0。

在方式1中,当SM2=0则只有接收到有效停止位时,RI才置1,并自动发出串行口中断请求(设中断是开放的)。

在方式2或方式3当SM2=0时,串行口以单机发送或接收方式工作,TI和RI以正常方式被激活,但不会引起中断请求;

当SM2=1且接收到的第九位数据RB8=1时,RI才置1,并向CPU提出中断请求。

REN:

接收允许控制位。

由软件置位即SETBREN以允许接收;

由软件清0即CLRREN来禁止接收。

TB8:

发送数据第9位。

在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。

例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。

RB8:

接收到的数据的第9位。

在方式0中不使用RB8。

在方式1中,若SM2=0,RB8为接收到的停止位。

在方式2或方式3中,RB8为接收到的第9位数据。

TI:

发送中断标志,用于指示一帧信息是否发送完。

在方式0中,第8位发送结束时,由硬件置位。

在其它方式的发送停止位前,由硬件置位。

TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。

TI必须用软件清0。

RI:

接收中断标志位,用于指示一帧信息是否接收完。

在方式0,当接收完第8位数据后,由硬件置位。

在其它方式中,在接收到停止位的中间时刻由硬件置位。

RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知。

RI也必须用软件清0。

特殊功能寄存器PCON

PCON各位定义:

8E

8D

8C

8B

8A

89

88

87

PCON

SMOD

-

GF1

GF0

PD

IDL

波特率选择位SMOD=1时,方式1、2、3波特率加倍

通用标志位

掉电控制位

正常

掉电

空闲控制位

空闲

PCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。

其中最高位是SMOD为波特率选择位。

4.2.2串行口的工作方式

8051单片机的全双工串行口可编程为4种工作方式,现分述如下:

1、方式0

方式0为移位寄存器输入/输出方式。

主要用于外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。

在串行发送时,”SBUF(发送)”相当于一个并入串出的移位寄存器,由MCS-51的内部总线并行输入8位数据,并从TXD(P3.1)线串行输出;

在接收时,“SBUF(接收)”相当于一个串入并出的移位寄存器,从RXD(P3.0)线上接收一帧数据,并把它并行的送入内部数据总线。

发送时,在TI=0的条件下,CPU执行指令MOVSBUF,A时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后,同时TXD引脚输出移位脉冲。

发送完一帧数据后,发送中断标志TI自动置位,并向CPU提出中断请求(设中断是开放的)。

CPU执行中断服务程序后要用软件清零TI,然后再发送下一帧数据。

接收时,先执行SETBREN;

SETRI。

此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。

当接收到第8位数据后,RI自动置位,并向CPU发出串行口中断请求。

CPU查询到RI=1或响应中断后便可通过指令MOVA,SBUF把接收到的数据送入累加器A中。

RI也由软件清零。

方式0的波特率固定为主振频率的1/12

串行口在方式0下的应用

串行口在方式0下有两种用途:

一种是把串行口设置成并入串出的输出口,另一种是设置成串入并出的输入口。

串行口设置成并入串出的输出口时需要外接一片8位的串入并出的同步移位寄存器74LS164或CD4094;

设置成串入并出的输入口时,需外接一片8位并入串出的同步移位寄存器74LS165或CD4014.

发光二极管自左至右以一定速度轮流显示的程序。

设二极管为共阴接法。

74ls164是一种串入并出的同步移位寄存器.CLK为同步脉冲输入端;

STB是清零端.在数据进入前要先清零,清完后要置高,否则数据将丢失.

;

-----------主程序

ORG0000H

AJMPMAIN

ORG0023H

AJMPSBV

MAIN:

MOVSCON,#00H;

串行口初始化为方式0

SETBEA;

开所有中断

SETBES;

开串行中断

CLRP2.0;

74ls164清零

MOVA,#80H;

起始显示码送入

CLRTI;

中断标志位清零

SETBP2.0;

清零端置高

MOVSBUF,A;

发送第一数据

SJMP$;

等待中断

-----------中断服务程序

SBV:

ACALLDELAY;

点亮一段时间

RRA;

移到下一位

CLRTI

CLRP2.0

SETBP2.0

MOVSBUF,A

RETI;

中断返回

DELAY:

MOV31H,#0F0H;

延时程序

LOOP1:

MOV32H,#0FFH

LOOP2:

DJNZ32H,LOOP2

DJNZ31H,LOOP1

RET

END

2、方式1

方式1为波特率可变的10位异步通信方式。

发送或接收一帧10位数据的信息,包括1个起始位“0”,8个数据位和1个停止位“1”。

发送时,在TI=0的条件下,当CPU执行指令MOVSBUF,A时,发送电路自动在8位数据前后分别添加1位起始位和停止位并开始发送。

串行数据从TXD(P1.1)引脚输出,发送完一帧数据后,维持TXD线为高电平,由硬件置位TI。

要用软件清零后再发送下一帧数据。

接收时,在REN=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。

只有当条件RI=0且SM2=0或条件停止位为“1”时,8位数据才能进入接收寄存器SBUF(接收),停止位也才进入RB8,并由硬件置位中断标志位RI;

否则舍去,也意味着丢失一帧数据。

所以在方式1接收时,应先用软件清零RI和SM2。

串行口在方式1下的收发程序。

在发送程序中,开机时就向接收机发送6帧数据完后显示发送的数据以便对比;

接收端收到6帧数据后把它显示出来。

发送程序

SJMPMAIN

SJMPTXSV

MOV51H,#06H;

欲发送的数据

MOV52H,#01H

MOV53H,#02H

MOV54H,#03H

MOV55H,#04H

MOV56H,#05H

MOVTMOD,#20H;

设定定时器为方式2

MOVTL1,#0CBH;

装入定时器

MOVTH1,#0CBH

MOVPCON,#80H;

设置SMOD为1

SETBTR1;

开定时器

MOVSCON,#40H;

串行口为方式1

MOVR2,51H;

存数据长度

MOVR0,#51H

MOVA,@R0;

发送数据长度

MOVSBUF,A

INCR0

DISPLY:

MOVR1,#51H

MOV42H,#20H;

存位码

MOVR6,#07H;

存记数

MOVDPTR,#TABLE

LOOP0:

MOVA,@R1

MOVCA,@A+DPTR

MOVP0,A

MOVA,42H

MOVP2,A

DJNZR6,NEXT1

SJMPDISPLY

NEXT1:

ACALLDELAY

RRA

MOV42H,A

INCR1

SJMPLOOP0

MOV45H,#04H

LOOP3:

MOV46H,#0FH

LOOP4:

DJNZ46H,LOOP4

DJNZ45H,LOOP3

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH

DB7DH,07H,7FH,6FH,80H

TXSV:

CLRTI

发送数据

DJNZR2,NEXT;

是否发完

NEXT:

INCR0

RETI

END

接收程序

SJMPMAIN

ORG0023H

SJMPRXSV

MOVTMOD,#20H;

定时器1设为方式2

定时器装入波特率为2400b/s

SETBTR1;

SETBEA;

SETBES;

CLRRI

MOVSCON,#50H;

设定为方式2接收

设定SMOD为1

MOVR0,#52H

SETB20H.0;

设定一个标志位

SJMP$

RXSV:

JB20H.0,LENGTH

MOVA,SBUF;

接收数据

MOV@R0,A;

存入数据

DJNZ61H,NEXT;

是否接收完

SJMPDISPLY;

接收完转入显示

RETI

LENGTH:

MOVA,SBUF

MOV61H,A;

存入数据长度

MOV51H,A

CLR20H.0

MOV42H,#20H;

MOVR6,#07H;

MOVDPTR,#TABLE

RRA

DJNZ46H,LOOP2

DJNZ45H,LOOP1

3、方式2

方式2为固定波特率的11位异步收发方式。

它比方式1增加了一位可控制为“1”或“0”的第9位数据。

输出:

发送的串行数据由TXD(P3.1)端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。

它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位。

当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。

发送完一帧信息后,自动置位中断标志位TI。

输入:

在REN=1时,串行口采样RXD(P3.0)引脚,当采样到1至0的跳变时,确认是开始位“0”,就开始接收一帧数据。

在接收到附加的第9位数据后,当RI=0且SM2=0时,8位数据才能进入接收寄存器,第9位数据才进入RB8,并由硬件置位中断标志位RI,否则信息丢失。

再过一位时间后,不管上述条件是否满足,接收电路即执行复位,并重新检测RXD上从1到0的跳变。

方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:

波特率

也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc

4、方式3

方式3为波特率可变的11位异步收发方式。

除波特率外,其余与方式2相同。

方式1和方式3波特率

串行口的波特率由定时器的溢出率决定.其公式如下:

定时器T1溢出率

T1溢出率=

波特率的计算公式:

式中:

K为定时器T1的位数,它和定时器的T1的设定方式有关.即:

若定时器T1为方式0,则K=13;

若定时器T1为方式1,则K=16;

若定时器T1为方式2或是,则K=8。

因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。

下表列出了定时器T1工作于方式2常用波特率及初值。

常用波特率

Fosc(MHZ)

TH1初值

19200

11.0592

1

FDH

9600

4800

FAH

2400

F4H

1200

E8H

方式2、方式3下的应用:

单片机的多机通信。

在多机通信中作为主机的AT89S52的SM2应设置为0,作从机的SM2设定为1。

主机发送并被从机接收的信息有两类:

一类是地址,用于指示需要和主机通信的从机地址。

由串行数据第9位为“1”来标志;

另一类是数据,由串行数据第9位为“0”来标志。

由于所有从机的SM2=1,故每个从机总能在RI=0时收到主机发来的地址(因为串行数据第9位为“1”),并进入各自的中断服务程序。

在中断服务程序中,每台从机把接收到的主机发来的地址和它本机的地址(系统设计时分配)进行比较。

所有比较不相等的从机均从各自的中断服务程序中退出(SM2仍为1)只有比较成功的从机才是被主机寻址的通信从机。

被寻址的从机在程序中使SM2=0,以便接收随之而来的数据或命令(R8=0).

多机通信的一个例子程序如下:

主程序装于主机中,从机程序在所有从机中运行。

假设在主机中存有6个数据,本程序是把这6个数据发送到地址为01的从机,并显示发送的数据.从机接收到这6个数据后显示出以便对照.

在多机通信中,主从机之间除传送从机地址外,还应传送一些供主机或从机识别的命令和状态字。

两条控制命令为:

00H—主机发送从机接收命令

01H—从机发送主机接收命令

这两条命令均以数据形式发送(即第9位数据为0)。

从机状态字。

由被寻址的从机发送,被主机所接收,用于指示从机的工作状态,其格式为

ERR

TRDY

RRDY

命令合法

命令不合法

从机发送未就绪

从机发送已就绪

从机接收未就绪

从机接收已就绪

寄存器分配如下:

R0:

存放主机发送的数据块起始地址

R1:

存放主机接收的数据块起始地址

R2:

存放被寻址的从机地址

R3:

存放主机发出的命令

R4:

存放发送的数据块长度

R5:

存放接收的数据长度

主机程序:

ORG0030H

MOV71H,#06H;

MOV72H,#01H

MOV73H,#02H

MOV74H,#03H

MOV75H,#04H

MOV76H,#05H

MOVTMOD,#20H;

定时器T1为方式2

MOVTH1,#0CBH;

波特率为1200

MOVTL1,#0CBH

SETBTR1

MOVSCON,#0D8H;

串行口为方式3,允许接收,SM2=0,TB8=1

MOVPCON,#00H

MOVR1,#61H;

接收数据块起始地址

MOVR2,#01H;

被寻址从机地址

MOVR3,#00H;

数据传送方向:

01从机发主机收;

00主机发从机收

;

由主机键盘或其它方式存入,这而我们假设为00

MOVR5,#02H;

接收数据块长度

CLRSM2

MCOMMU:

MOVA,R2;

发送从机地址

JNBRI,$

CLRRI;

从机应答

MOVA,SBUF

XRLA,R2;

核对地址

JZMTXD2

MTXD1:

MOVSBUF,#0FFH;

不相符,发送复位信号

SETBTB8

SJMPMCOMMU;

重发地址

MTXD2:

CLRTB8;

相符准备发数据

MOVSBUF,R3;

主机要发送数据

应答

MOV47H,A

JNBACC.7,MTXD3;

命令是否合法

SJMPMTXD1

MTXD3:

CJNER3,#00H,MRXD;

是否主机接收数据

MOVA,47H

JNBACC.0,MTXD1;

从机是否就绪接收

MOVR0,#71H;

发送数据块起始地址

MOV55H,#06H;

发送数据块长度

MTXD4:

MOVSBUF,@R0;

发送数据

JNBRI,$

DJNZ55H,MTXD4

MRXD:

JNBACC.1,MTXD1;

从机是否发送就绪

MRXD1:

JNBRI,$;

MOV@R1,A

DJNZR5,MRXD1

MOVR1,#71H

从机程序:

SJMPSINTSBV

MOV51H,#06H;

MOV52H,#05H

MOV53H,#04H

MOV55H,#02H

MOV56H,#01H

SETBPSW.1

SE

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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