串行数据通信

第8章 串行数据通信

一、教学要求:

掌握:串行口结构与工作原理。 理解:串行通信方式。

了解:波特率设计,串行口应用。 二、教学内容:

8.1 串行通讯基础知识

8.2 单片机的串行口及控制寄存器 8.3 单片机串行通信工作方式 三、教学重点:串行口结构与工作原理。 四、教学难点:波特率设计与串行口应用。 五、建议学时:3学时 六、教学内容: 8-1 串行通信基础知识 一、串行通信基本原理:

原 理 优 点 缺 点 应 用

并 行 数 据 传 送 各数据位同时传送 传送速度快、效率高

数据位数→传输线根数:成本高 传送距离<30米,用于计算机内部

串 行 数 据 传 送

数据位按位顺序进行

最少只需一根传输线即可完成:成本低 速度慢

几米~几千公里,用于计算机与外设之间

并行

同步

数据传送

串行 异步(用于单片机中)

二、串行通信的基本方式: (一) 异步通信:

以字符为传送单位用起始位和停止位标识每个字符的开始和结束字符,间隔不固定,只需字符传送时同步即可。 异步通讯常用格式:一个字符帧

起始位 D

异步通信的双方需要两项约定: 1. 字符格式:

一帧字符位数的规定:数据位,校验位,起始位和停止位。 2. 波特率(位/秒) 和传送速率的规定:

例:要求每秒传送120个字符,每帧为10位。 解: B=120×10=1200波特 每位0.83ms 数据位传送输率=120×8=960位/秒

(二) 同步通信:

以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。

三、串行接口功能:

(1)发送器:并→串数据格式转换,添加标识位和校验位,一帧发送结束,设置结束标志,申请中断。

(2)接收器:串→并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,申请中断。

(3)控制器:接收编程命令和控制参数,设置工作方式:同步/异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。

D 1

D 2

D 3 D 4 D 5

D 6 D 7 停止位

四、串行数据传送方向:

1、单工通讯:数据单向传送。(1条数据线,单向)

2、半双工通讯:数据可分时双向传送。(2条数据线,双向) 3、全双工通讯:可同时进行发送和接收。(1条或2条数据线,双向)

数据线

五、异步串行通信的信号形式:

1、远距离直接传输数字信号,信号会发生畸变,因此要把数字信号转变为模拟信号再进行传送。可利用光缆、专用通信电缆或电话线。 方法:通常使用频率调制法(频带传送方式)。

通常: “1”:1270Hz 或2225Hz ;

“0”:1070Hz 或2025Hz 。

2、因通信时(有干扰)信号要衰减,所以常采用RS232电平负逻辑,拉开“0”和“1”的电压档次,以免信息出错:

8-2 串行口及控制寄存器 8-2-1

MCS-51串行接口

1个全双工串行接口,可同时进行发送和接收。 串行接口输入/输出引脚:TXD(P3.1)、RXD(P3.0) 数据格式:按不同方式,一帧数据位数 8/10/11 发送/接收时,数据皆低位在前。

D 0

D 1D 1

D 2D 2

D 3D 3

D 4D 4 D 4

D 5D 5

D 6D 6 D 6

D 7

起始位 D

0 起始位D 0

D 7 停止位D 7

D 1 D 2 D 3 D 5 D 8 停止位

一帧字符发送/接收结束,置位标志位(TI/RI),并申请串行中断。 中断控制:中断允许位ES 、总允许EA ;

中断入口:0023H 。 一、串行接口控制: 1. 数据缓冲器SBUF :

发送SBUF 和接收SBUF 共用一个地址99H 。

1)发送SBUF 存放待发送的8位数据,写入SBUF 将同时启动发送。发送指令:

MOV SBUF ,A

2)接收SBUF 存放已接收成功的8位数据,供CPU 读取。 读取串行口接收数据指令:

MOV A ,SBUF

2. 节电控制寄存器PCON :

SMOD (PCON.7):波特率加倍控制位。 SMOD=1,波特率加倍; SMOD=0,则不加倍。

3. 串行口控制/状态寄存器SCON(98H):

SM0、SM1:选择串行口4种工作方式。 SM2:多机控制位,用于多机通讯。

REN :允许接收控制位,REN=1,允许接收; REN=0,禁止接收。

TB8:发送的第9位数据位,可用作校验位和地址/数据标识位。 RB8:接收的第9位数据位或停止位。

TI :发送中断标志,发送一帧结束,TI=1,必须软件清零; RI :接收中断标志,接收一帧结束,RI=1,必须软件清零。

8-3 串行通信工作方式 SM0、SM1选择四种工作方式。 (1)方式0:同步移位寄存器方式 用于扩展并行I/O接口。 1. 一帧8位,无起始位和停止位。 2. RXD:数据输入/输出端。

TXD :同步脉冲输出端,每个脉冲对应一个数据位。 3. 波特率B = fosc/12

如: fosc=12MHz,B=1MHz,每位数据占1 s 。

4. 发送过程:写入SBUF ,启动发送,一帧发送结束,TI=1。 接收过程:REN=1且RI=0,启动接收,一帧接收完毕,RI=1。 时序图:

TXD 写入 SBUF RXD 输出

TI

D 0

发送(a) 时序

接收(b) 时序

D 1

D 2

D 3 D 4

D 5

D 6

D 7

写REN=1 RI=0 RXD

输入 RI

(2) 方式1:8位数据异步通讯方式

1. 一帧10位:8位数据位,1个起始位(0),1个停止位(1)。 2. RXD:接收数据端。 TXD :发送数据端。

3. 波特率:用T1作为波特率发生器,B=(2SMOD/32)×T1溢出率。 4. 发送:写入SBUF ,同时启动发送,一帧发送结束,TI=1。 接收:REN=1,允许接收。

接收完一帧,若RI=0且停止位为1 (或SM2=0),将接收数据装入SBUF ,停止位装入RB8,并使RI=1;否则丢弃接收数据,不置位RI 。

当REN=1,CPU 开始采样RXD 引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为0,继续接收其余位;否则,停止接收,重新采样负跳变。

数据采样速率为波特率16倍频,在数据位中间,用第7、8、9个脉冲采样3次数据位,并3中取2保留采样值。 时序图:

写入 SBUF

TXD 数据输出

TI

(a ) 发送时序图

检测 负跳变

RXD 输入数据

RI

(b ) 接收时序图

起始位 D 0采样

起始位

D 0

D 1

D 2

D 3

D 4

D 5

D 6

D 7

停止位

D 1

D 2

D 3

D 4

D 5

D 6

D 7

停止位

(3) 方式2和方式3: 9位数据异步通讯方式

1. 一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。第9位数据位在TB8/RB8中,常用作校验位和多机通讯标识位。 2. RXD:接收数据端, TXD :发送数据端。

3. 波特率:方式2:B=(2SMOD/64)×fosc 。

方式3:B=(2SMOD/32)×T1溢出率 。

4. 发送:先装入TB8,写入SBUF 并启动发送,发送结束,TI=1。 接收:REN=1,允许接收。

接收完一帧,若RI=0且第9位为1 (或SM2=0),将接收数据装入接收SBUF ,第9位装入RB8,使RI=1;否则丢弃接收数据,不置位RI 。 时序图:

写入 SBUF

起始位

TXD

输出

TI

D 0

D 1

D 2

D 3

D 4

D 5

D 6

D 7

TB 8停止位

检测 负跳变 RXD

输入

RI

起始位

D 0

(a ) 发送时序图

D 1

D 2

D 3

D 4

D 5

D 6

D 7

RB 8停止位

(b ) 接收时序图

(4)计算波特率:

方式0为固定波特率:B=fosc/12

方式2可选两种波特率: B=(2SMOD /64)×fosc 方式1、3为可变波特率,用T1作波特率发生器。

B=(2SMOD/32)×T1溢出率

T1为方式2的时间常数: X = 28 - t/T (请见P153) 溢出时间: t= (28 -X)T = (28 -X)×12/ fosc T1溢出率=1/t= fosc /[12×(2n -X)]

波特率B=(2SMOD /32)×fosc/[12×(28-X)]

串行口方式1、3,根据波特率选择T1工作方式,计算时间常数。 T1选方式2: TH1= X = 28 - fosc/12×2SMOD/(32×B) T1选方式1用于低波特率,需考虑T1重装时间常数时间。 也可选工作方式3(请见P156)。

4种方式比较:

方式 0 1 2 3

波 特 率 1/12 fosc (固定不变) 2SMOD /32 T1

溢出率 2SMOD /64 fosc 2SMOD /32 T1

溢出率

传 送 位 数 8(数据)

发送端 RXD

接收端 RXD RXD RXD RXD

用 途

接移位寄存器,扩充并口

10(起始位、8位数据位、 TXD 停止位) 11(第9位为1:地址; 为0:

11位 (同方式2)

TXD TXD

单机通讯 多机通讯 多机通讯

8-4 串行口的应用 串行口初始化编程格式:

发送程序:

先发送一个字符,等待TI=1后再发送下一个字符。 1、查询方式: TRAM :

MOV A,@R0 ;取数据

SIO : MOV SCON ,#控制状态字

( MOV PCON ,#80H ) ( MOV TMOD ,#20H ) ( MOV TH1,#X ) ( MOV TL1,#X ) ( SETB TR1) ( SETB EA) ( SETB ES)

;开串行口中断 ;写方式字且TI=RI=0

;波特率加倍

;T1作波特率发生器 ;选定波特率

MOV SBUF ,A ;发送一个字符

JBC T I ,NEXT SJMP WAIT CLR TI

R0

;准备下一次发送 ;等待发送结束

WAIT :

NEXT :

INC

SJMP TRAM

2、中断方式:

ORG

0023H

;串行口中断入口

AJMP SINT

;初始化编程

MAIN :

TRAM : MOV A ,@ R0 ;取数据

MOV SBUF ,A ;发送第一个字符 SJMP H CLR TI INC R0

MOV A ,@ R0 ;取数据

MOV SBUF ,A ;发送下一个字符 RETI

;其它工作 ;中断服务程序

H :

SINT :

接收程序:

REN=1、RI=0等待接收,当RI=1,从SBUF 读取数据。 1. 查询方式: WAIT :JBC

RI ,NEXT

;查询等待

SJMP WAIT

;读取接收数据 ;保存数据

NEXT :MOV A ,SBUF

MOV @R0,A CLR

RI

INC R0 SJMP WAIT

;准备下一次接收

2. 中断方式:

ORG

0023H

AJMP RINT

;初始化编程 ;其它任务

MAIN : H :

SJMP H

RINT : CLR

RI ;清中断标志 ;读取接收数据 ;保存数据

MOV A ,SBUF MOV @R0,A INC RETI

R0

(一)串行口方式0:用于接移位寄存器扩充并口。

串行口通过接口74LS164实现:串行→并行的数据转换(显示器接口) ; 通过接口74LS165实现:并行→串行的数据转换。

程序:

MOV R7,#20

;送入20个字节 ;送首地址为20H

;置1,F0=1(设置读入字节奇偶数标志) ;P1.0=0(并行置入数据) ;P1.0=1(允许串行移位)

MOV R0,#20H SETB F0

P1.0

RCV0:CLR

SETB P1.0

RCV1:MOV SCON ,#10H ;允许方式0接收

JNB CLR

RI ,$ RI

;等待RI=1,顺序执行 ;RI=0为下一帧数据的接收准备 ;取数

MOV A ,SBUF MOV @R0,A INC CPL

R0 F0

;取反,F0=0

;F0=1则转移,F0=0顺序执行

;判是否接收完偶数帧,接收完则重新并行置入 ;否则再接收一帧

JB F0,RCV2 DEC

R7

SJMP RCV1

RCV2:DJNZ R7,RCV0 ;R7-1=0? ≠0跳(判是否已读入预定字节数) „„„ ;对读入数据进行处理

(二)异步通讯程序举例:

1. 发送程序:将片内RAM 50H起始单元的16个数由串行口发送。要求发送波特率为系统时钟的32分频,并进行奇偶校验。

MAINT :MOV SCON ,#80H ;串行口初始化

MOV PCON ,#80H ;波特率 SETB SETB

EA ES

;开串行口中断 ;设数据指针 ;数据长度 ;取一个字符

MOV R0,#50H MOV R7,#10H

LOOP : MOV A ,@R0

MOV C,P MOV TB8,C

;加奇偶校验

MOV SBUF,A ;启动一次发送

;CPU 执行其它任务

HERE :SJMP HERE

ORG

0023H ;串行口中断入口

AJMP TRANI

;保护现场

TRANI :PUSH A

PUSH PSW CLR

TI

;清发送结束标志 ;是否发送完?

;发送完,关闭串行口中断

DJNZ R7,NEXT CLR

ES

SJMP TEND

;未发送完,修改指针 ;取下一个字符 ;加奇偶校验

NEXT :INC R0

MOV A,@R0 MOV C,P MOV TB8,C MOV SBUF ,A POP POP

PSW A

;发送一个字符 ;恢复现场

TEND :RETI

2. 接收程序:

;中断返回

串行输入16个字符,存入片内RAM 的50H 起始单元,串行口波特率为2400(设晶振为11.0592MHz) 。

RECS :MOV SCON,#50H

MOV TMOD,#20H

;串行口方式1允许接收 ;T1方式2定时

MOV TL1,#0F4H ;写入T1时间常数 MOV TH1,#0F4H SETB TR1

MOV R0,#50H MOV R7,#10H

WAIT :JBC RI ,NEXT

SJMP WAIT

NEXT :MOV A ,SBUF

MOV @R0,A

CLR

RI

INC R0

DJNZ R7,WAIT RET

3. 接收程序:

串行输入16个字符,进行奇偶校验。RECS :MOV SCON,#0D0H

MOV TMOD,#20H

MOV TL1,#0F4H MOV TH1,#0F4H SETB TR1

MOV R0,#50H MOV R7,#10H WAIT :JBC RI ,NEXT SJMP WAIT

NEXT :MOV A ,SBUF

JNB P ,COMP ;启动T1 ;设数据指针 ;接收数据长度

;等待串行口接收

;读取接收字符 ;保存一个字符

;修改指针 ;全部字符接收完?

;串行口方式3允许接收 ;T1方式2定时

;写入T1 时间常数 ;启动T1

;设数据指针 ;接收数据长度

;等待串行口接收

;取一个接收字符

;奇偶校验

JNB RB8,ERR ;P ≠RB8,数据出错 SJMP RIGHT

COMP :JB RB8,ERR RIGHT :MOV @ R0,A

CLR

RI

;修改指针

;保存一个字符

;P=RB8,数据正确

INC R0

DJNZ R7,WAIT ;全部字符接收完? CLR F0 ;F0 =0,接收数据全部正确

RETERR :SETB F0

RET

4. 主从分布式微机系统:

也叫集散控制系统:从机(单片机)作数据采集或实时控制,主机(PC 机)作数据处理、中央管理等。

应用:过程控制、仪器仪表、生产自动化和企业管理等方面。 ①单机通信:

;F0 =1,接收数据出错

直接传送串行通信接法

PC 机调用的中断指令为:INT 14H

②多机通信系统:

PC 机要对某一指定了地址编号的单片机通讯,就必须作好联络。 ①PC 机处于发送状态,各单片机的串行口均处于接收状态并使其SM2=1,作好接收地址信息的准备。

②PC 机发出要通讯的那台单片机的地址编号,然后发送通讯数据,发地址时必须使第9位信息为1,发数据时必须使第9位数据为0。

③各单片机收到PC 机发来的地址信息后,因此此时各SM2=1,所以将引起各单片机的中断。在中断服务程序中,判断PC 机发来的地址是否是自身的地址编号,仅有符合地址编号的那台才使其SM2=0,其它不符合者仍是SM2=1。 ④随着PC 机信息的发出(第9位信息为0),因为符合地址编号的那台单片机此时已是SM2=0,所以这台单片机将再次进入中断,并在中断服务程序中接收PC 机发来的数据。那些地址不符者,不能进入中断(因SM2=1),也就不能接收串行来的数据。

接收机的中断服务程序:

已知该机的地址编号为05H 号,在主程序初始化中已设置了波特率,打开了串行中断,并使SM2=1。

ORG 0023H

;串行中断入口 ;判断是地址还是数据 ;读入地址

;判断地址是否相符 ;不符则出中断 ;地址相符则清SM2

JNB RB8,NEXT MOV A ,SBUF XRL

A ,#05H

JNZ EXIT CLR

SM2

SJMP EXIT

;读入数据

;数据存入片内RAM ;增地址

;清接收中断标志

NEXT :MOV A ,SBUF

MOV @R0,A INC R0 CLR

RI

EXIT :RETI 小 结

1、串行通信的基本原理和基本方式(同步和异步)。

2、串行数据的传送方向(单工、半双工和全双工)及信号形式。 3、串行口控制/状态控制字SCON 和节电控制字PCON 。

4、串行通信的4种工作方式及其对应的波特率、传送位数、时序和应用。 5、串行通信的应用:

发送和接收程序(查询方式和中断方式)。

练 习 题 (一)问答题 (二)填空题 (三)选择题

第8章 串行数据通信

一、教学要求:

掌握:串行口结构与工作原理。 理解:串行通信方式。

了解:波特率设计,串行口应用。 二、教学内容:

8.1 串行通讯基础知识

8.2 单片机的串行口及控制寄存器 8.3 单片机串行通信工作方式 三、教学重点:串行口结构与工作原理。 四、教学难点:波特率设计与串行口应用。 五、建议学时:3学时 六、教学内容: 8-1 串行通信基础知识 一、串行通信基本原理:

原 理 优 点 缺 点 应 用

并 行 数 据 传 送 各数据位同时传送 传送速度快、效率高

数据位数→传输线根数:成本高 传送距离<30米,用于计算机内部

串 行 数 据 传 送

数据位按位顺序进行

最少只需一根传输线即可完成:成本低 速度慢

几米~几千公里,用于计算机与外设之间

并行

同步

数据传送

串行 异步(用于单片机中)

二、串行通信的基本方式: (一) 异步通信:

以字符为传送单位用起始位和停止位标识每个字符的开始和结束字符,间隔不固定,只需字符传送时同步即可。 异步通讯常用格式:一个字符帧

起始位 D

异步通信的双方需要两项约定: 1. 字符格式:

一帧字符位数的规定:数据位,校验位,起始位和停止位。 2. 波特率(位/秒) 和传送速率的规定:

例:要求每秒传送120个字符,每帧为10位。 解: B=120×10=1200波特 每位0.83ms 数据位传送输率=120×8=960位/秒

(二) 同步通信:

以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符标识,硬件要求高,通讯双方须严格同步。

三、串行接口功能:

(1)发送器:并→串数据格式转换,添加标识位和校验位,一帧发送结束,设置结束标志,申请中断。

(2)接收器:串→并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,申请中断。

(3)控制器:接收编程命令和控制参数,设置工作方式:同步/异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。

D 1

D 2

D 3 D 4 D 5

D 6 D 7 停止位

四、串行数据传送方向:

1、单工通讯:数据单向传送。(1条数据线,单向)

2、半双工通讯:数据可分时双向传送。(2条数据线,双向) 3、全双工通讯:可同时进行发送和接收。(1条或2条数据线,双向)

数据线

五、异步串行通信的信号形式:

1、远距离直接传输数字信号,信号会发生畸变,因此要把数字信号转变为模拟信号再进行传送。可利用光缆、专用通信电缆或电话线。 方法:通常使用频率调制法(频带传送方式)。

通常: “1”:1270Hz 或2225Hz ;

“0”:1070Hz 或2025Hz 。

2、因通信时(有干扰)信号要衰减,所以常采用RS232电平负逻辑,拉开“0”和“1”的电压档次,以免信息出错:

8-2 串行口及控制寄存器 8-2-1

MCS-51串行接口

1个全双工串行接口,可同时进行发送和接收。 串行接口输入/输出引脚:TXD(P3.1)、RXD(P3.0) 数据格式:按不同方式,一帧数据位数 8/10/11 发送/接收时,数据皆低位在前。

D 0

D 1D 1

D 2D 2

D 3D 3

D 4D 4 D 4

D 5D 5

D 6D 6 D 6

D 7

起始位 D

0 起始位D 0

D 7 停止位D 7

D 1 D 2 D 3 D 5 D 8 停止位

一帧字符发送/接收结束,置位标志位(TI/RI),并申请串行中断。 中断控制:中断允许位ES 、总允许EA ;

中断入口:0023H 。 一、串行接口控制: 1. 数据缓冲器SBUF :

发送SBUF 和接收SBUF 共用一个地址99H 。

1)发送SBUF 存放待发送的8位数据,写入SBUF 将同时启动发送。发送指令:

MOV SBUF ,A

2)接收SBUF 存放已接收成功的8位数据,供CPU 读取。 读取串行口接收数据指令:

MOV A ,SBUF

2. 节电控制寄存器PCON :

SMOD (PCON.7):波特率加倍控制位。 SMOD=1,波特率加倍; SMOD=0,则不加倍。

3. 串行口控制/状态寄存器SCON(98H):

SM0、SM1:选择串行口4种工作方式。 SM2:多机控制位,用于多机通讯。

REN :允许接收控制位,REN=1,允许接收; REN=0,禁止接收。

TB8:发送的第9位数据位,可用作校验位和地址/数据标识位。 RB8:接收的第9位数据位或停止位。

TI :发送中断标志,发送一帧结束,TI=1,必须软件清零; RI :接收中断标志,接收一帧结束,RI=1,必须软件清零。

8-3 串行通信工作方式 SM0、SM1选择四种工作方式。 (1)方式0:同步移位寄存器方式 用于扩展并行I/O接口。 1. 一帧8位,无起始位和停止位。 2. RXD:数据输入/输出端。

TXD :同步脉冲输出端,每个脉冲对应一个数据位。 3. 波特率B = fosc/12

如: fosc=12MHz,B=1MHz,每位数据占1 s 。

4. 发送过程:写入SBUF ,启动发送,一帧发送结束,TI=1。 接收过程:REN=1且RI=0,启动接收,一帧接收完毕,RI=1。 时序图:

TXD 写入 SBUF RXD 输出

TI

D 0

发送(a) 时序

接收(b) 时序

D 1

D 2

D 3 D 4

D 5

D 6

D 7

写REN=1 RI=0 RXD

输入 RI

(2) 方式1:8位数据异步通讯方式

1. 一帧10位:8位数据位,1个起始位(0),1个停止位(1)。 2. RXD:接收数据端。 TXD :发送数据端。

3. 波特率:用T1作为波特率发生器,B=(2SMOD/32)×T1溢出率。 4. 发送:写入SBUF ,同时启动发送,一帧发送结束,TI=1。 接收:REN=1,允许接收。

接收完一帧,若RI=0且停止位为1 (或SM2=0),将接收数据装入SBUF ,停止位装入RB8,并使RI=1;否则丢弃接收数据,不置位RI 。

当REN=1,CPU 开始采样RXD 引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为0,继续接收其余位;否则,停止接收,重新采样负跳变。

数据采样速率为波特率16倍频,在数据位中间,用第7、8、9个脉冲采样3次数据位,并3中取2保留采样值。 时序图:

写入 SBUF

TXD 数据输出

TI

(a ) 发送时序图

检测 负跳变

RXD 输入数据

RI

(b ) 接收时序图

起始位 D 0采样

起始位

D 0

D 1

D 2

D 3

D 4

D 5

D 6

D 7

停止位

D 1

D 2

D 3

D 4

D 5

D 6

D 7

停止位

(3) 方式2和方式3: 9位数据异步通讯方式

1. 一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。第9位数据位在TB8/RB8中,常用作校验位和多机通讯标识位。 2. RXD:接收数据端, TXD :发送数据端。

3. 波特率:方式2:B=(2SMOD/64)×fosc 。

方式3:B=(2SMOD/32)×T1溢出率 。

4. 发送:先装入TB8,写入SBUF 并启动发送,发送结束,TI=1。 接收:REN=1,允许接收。

接收完一帧,若RI=0且第9位为1 (或SM2=0),将接收数据装入接收SBUF ,第9位装入RB8,使RI=1;否则丢弃接收数据,不置位RI 。 时序图:

写入 SBUF

起始位

TXD

输出

TI

D 0

D 1

D 2

D 3

D 4

D 5

D 6

D 7

TB 8停止位

检测 负跳变 RXD

输入

RI

起始位

D 0

(a ) 发送时序图

D 1

D 2

D 3

D 4

D 5

D 6

D 7

RB 8停止位

(b ) 接收时序图

(4)计算波特率:

方式0为固定波特率:B=fosc/12

方式2可选两种波特率: B=(2SMOD /64)×fosc 方式1、3为可变波特率,用T1作波特率发生器。

B=(2SMOD/32)×T1溢出率

T1为方式2的时间常数: X = 28 - t/T (请见P153) 溢出时间: t= (28 -X)T = (28 -X)×12/ fosc T1溢出率=1/t= fosc /[12×(2n -X)]

波特率B=(2SMOD /32)×fosc/[12×(28-X)]

串行口方式1、3,根据波特率选择T1工作方式,计算时间常数。 T1选方式2: TH1= X = 28 - fosc/12×2SMOD/(32×B) T1选方式1用于低波特率,需考虑T1重装时间常数时间。 也可选工作方式3(请见P156)。

4种方式比较:

方式 0 1 2 3

波 特 率 1/12 fosc (固定不变) 2SMOD /32 T1

溢出率 2SMOD /64 fosc 2SMOD /32 T1

溢出率

传 送 位 数 8(数据)

发送端 RXD

接收端 RXD RXD RXD RXD

用 途

接移位寄存器,扩充并口

10(起始位、8位数据位、 TXD 停止位) 11(第9位为1:地址; 为0:

11位 (同方式2)

TXD TXD

单机通讯 多机通讯 多机通讯

8-4 串行口的应用 串行口初始化编程格式:

发送程序:

先发送一个字符,等待TI=1后再发送下一个字符。 1、查询方式: TRAM :

MOV A,@R0 ;取数据

SIO : MOV SCON ,#控制状态字

( MOV PCON ,#80H ) ( MOV TMOD ,#20H ) ( MOV TH1,#X ) ( MOV TL1,#X ) ( SETB TR1) ( SETB EA) ( SETB ES)

;开串行口中断 ;写方式字且TI=RI=0

;波特率加倍

;T1作波特率发生器 ;选定波特率

MOV SBUF ,A ;发送一个字符

JBC T I ,NEXT SJMP WAIT CLR TI

R0

;准备下一次发送 ;等待发送结束

WAIT :

NEXT :

INC

SJMP TRAM

2、中断方式:

ORG

0023H

;串行口中断入口

AJMP SINT

;初始化编程

MAIN :

TRAM : MOV A ,@ R0 ;取数据

MOV SBUF ,A ;发送第一个字符 SJMP H CLR TI INC R0

MOV A ,@ R0 ;取数据

MOV SBUF ,A ;发送下一个字符 RETI

;其它工作 ;中断服务程序

H :

SINT :

接收程序:

REN=1、RI=0等待接收,当RI=1,从SBUF 读取数据。 1. 查询方式: WAIT :JBC

RI ,NEXT

;查询等待

SJMP WAIT

;读取接收数据 ;保存数据

NEXT :MOV A ,SBUF

MOV @R0,A CLR

RI

INC R0 SJMP WAIT

;准备下一次接收

2. 中断方式:

ORG

0023H

AJMP RINT

;初始化编程 ;其它任务

MAIN : H :

SJMP H

RINT : CLR

RI ;清中断标志 ;读取接收数据 ;保存数据

MOV A ,SBUF MOV @R0,A INC RETI

R0

(一)串行口方式0:用于接移位寄存器扩充并口。

串行口通过接口74LS164实现:串行→并行的数据转换(显示器接口) ; 通过接口74LS165实现:并行→串行的数据转换。

程序:

MOV R7,#20

;送入20个字节 ;送首地址为20H

;置1,F0=1(设置读入字节奇偶数标志) ;P1.0=0(并行置入数据) ;P1.0=1(允许串行移位)

MOV R0,#20H SETB F0

P1.0

RCV0:CLR

SETB P1.0

RCV1:MOV SCON ,#10H ;允许方式0接收

JNB CLR

RI ,$ RI

;等待RI=1,顺序执行 ;RI=0为下一帧数据的接收准备 ;取数

MOV A ,SBUF MOV @R0,A INC CPL

R0 F0

;取反,F0=0

;F0=1则转移,F0=0顺序执行

;判是否接收完偶数帧,接收完则重新并行置入 ;否则再接收一帧

JB F0,RCV2 DEC

R7

SJMP RCV1

RCV2:DJNZ R7,RCV0 ;R7-1=0? ≠0跳(判是否已读入预定字节数) „„„ ;对读入数据进行处理

(二)异步通讯程序举例:

1. 发送程序:将片内RAM 50H起始单元的16个数由串行口发送。要求发送波特率为系统时钟的32分频,并进行奇偶校验。

MAINT :MOV SCON ,#80H ;串行口初始化

MOV PCON ,#80H ;波特率 SETB SETB

EA ES

;开串行口中断 ;设数据指针 ;数据长度 ;取一个字符

MOV R0,#50H MOV R7,#10H

LOOP : MOV A ,@R0

MOV C,P MOV TB8,C

;加奇偶校验

MOV SBUF,A ;启动一次发送

;CPU 执行其它任务

HERE :SJMP HERE

ORG

0023H ;串行口中断入口

AJMP TRANI

;保护现场

TRANI :PUSH A

PUSH PSW CLR

TI

;清发送结束标志 ;是否发送完?

;发送完,关闭串行口中断

DJNZ R7,NEXT CLR

ES

SJMP TEND

;未发送完,修改指针 ;取下一个字符 ;加奇偶校验

NEXT :INC R0

MOV A,@R0 MOV C,P MOV TB8,C MOV SBUF ,A POP POP

PSW A

;发送一个字符 ;恢复现场

TEND :RETI

2. 接收程序:

;中断返回

串行输入16个字符,存入片内RAM 的50H 起始单元,串行口波特率为2400(设晶振为11.0592MHz) 。

RECS :MOV SCON,#50H

MOV TMOD,#20H

;串行口方式1允许接收 ;T1方式2定时

MOV TL1,#0F4H ;写入T1时间常数 MOV TH1,#0F4H SETB TR1

MOV R0,#50H MOV R7,#10H

WAIT :JBC RI ,NEXT

SJMP WAIT

NEXT :MOV A ,SBUF

MOV @R0,A

CLR

RI

INC R0

DJNZ R7,WAIT RET

3. 接收程序:

串行输入16个字符,进行奇偶校验。RECS :MOV SCON,#0D0H

MOV TMOD,#20H

MOV TL1,#0F4H MOV TH1,#0F4H SETB TR1

MOV R0,#50H MOV R7,#10H WAIT :JBC RI ,NEXT SJMP WAIT

NEXT :MOV A ,SBUF

JNB P ,COMP ;启动T1 ;设数据指针 ;接收数据长度

;等待串行口接收

;读取接收字符 ;保存一个字符

;修改指针 ;全部字符接收完?

;串行口方式3允许接收 ;T1方式2定时

;写入T1 时间常数 ;启动T1

;设数据指针 ;接收数据长度

;等待串行口接收

;取一个接收字符

;奇偶校验

JNB RB8,ERR ;P ≠RB8,数据出错 SJMP RIGHT

COMP :JB RB8,ERR RIGHT :MOV @ R0,A

CLR

RI

;修改指针

;保存一个字符

;P=RB8,数据正确

INC R0

DJNZ R7,WAIT ;全部字符接收完? CLR F0 ;F0 =0,接收数据全部正确

RETERR :SETB F0

RET

4. 主从分布式微机系统:

也叫集散控制系统:从机(单片机)作数据采集或实时控制,主机(PC 机)作数据处理、中央管理等。

应用:过程控制、仪器仪表、生产自动化和企业管理等方面。 ①单机通信:

;F0 =1,接收数据出错

直接传送串行通信接法

PC 机调用的中断指令为:INT 14H

②多机通信系统:

PC 机要对某一指定了地址编号的单片机通讯,就必须作好联络。 ①PC 机处于发送状态,各单片机的串行口均处于接收状态并使其SM2=1,作好接收地址信息的准备。

②PC 机发出要通讯的那台单片机的地址编号,然后发送通讯数据,发地址时必须使第9位信息为1,发数据时必须使第9位数据为0。

③各单片机收到PC 机发来的地址信息后,因此此时各SM2=1,所以将引起各单片机的中断。在中断服务程序中,判断PC 机发来的地址是否是自身的地址编号,仅有符合地址编号的那台才使其SM2=0,其它不符合者仍是SM2=1。 ④随着PC 机信息的发出(第9位信息为0),因为符合地址编号的那台单片机此时已是SM2=0,所以这台单片机将再次进入中断,并在中断服务程序中接收PC 机发来的数据。那些地址不符者,不能进入中断(因SM2=1),也就不能接收串行来的数据。

接收机的中断服务程序:

已知该机的地址编号为05H 号,在主程序初始化中已设置了波特率,打开了串行中断,并使SM2=1。

ORG 0023H

;串行中断入口 ;判断是地址还是数据 ;读入地址

;判断地址是否相符 ;不符则出中断 ;地址相符则清SM2

JNB RB8,NEXT MOV A ,SBUF XRL

A ,#05H

JNZ EXIT CLR

SM2

SJMP EXIT

;读入数据

;数据存入片内RAM ;增地址

;清接收中断标志

NEXT :MOV A ,SBUF

MOV @R0,A INC R0 CLR

RI

EXIT :RETI 小 结

1、串行通信的基本原理和基本方式(同步和异步)。

2、串行数据的传送方向(单工、半双工和全双工)及信号形式。 3、串行口控制/状态控制字SCON 和节电控制字PCON 。

4、串行通信的4种工作方式及其对应的波特率、传送位数、时序和应用。 5、串行通信的应用:

发送和接收程序(查询方式和中断方式)。

练 习 题 (一)问答题 (二)填空题 (三)选择题


相关文章

  • 用Win32 API实现串行通信
  • 串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便 易行,所以应用广泛.我们可以利用Windows API 提供的通信函数编写出高可移植性的 串行通信程序. 在Win16中,可以利用OpenComm.CloseComm和W ...查看


  • 单片机851单片机串行口工作原理
  • MCS-51系列单片机片内有一个串行I/O端口,通过引脚RXD(P3.0)和TXD(P3.1)可与外设电路进行全双工的串行异步通信. 1.串行端口的基本特点 8031单片机的串行端口有4种基本工作方式,通过编程设置,可以使其工作在任一方式, ...查看


  • 第七章答案 2
  • 第七章 1.什么是串行异步通信,它有哪些作用? 答:在异步串行通信中,数据是一帧一帧(包括一个字符代码或一字节数据)传送的,每一帧的数据格式参考书.通信采用帧格式,无需同步字符.存在空闲位也是异步通信的特征之一. 2.89C51单片机的串行 ...查看


  • 用VC 6.0实现串行通信的三种方法
  • 用VC 6.0实现串行通信的三种方法 2004-2-8加入 来自天极论坛 作者yhww 1条评论 点击2964次 摘要: 本文介绍了在Windows 平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三 ...查看


  • 计算机接口技术
  • 计算机接口技术 既然是在数据传输率相同的情况下,那么,又说同步字符传输速度要高于 异步字符传输其原因是( ). ∙ B. 附加位信息总量少 关于EPROM 下面的说法中,正确的是( ). ∙ D. EPROM 是可改写的,但它不能作为随机读 ...查看


  • MCS-51单片机定时器/计数器.串行口.多机通讯
  • MCS-51单片机定时器/计数器.串行口.多机通讯 原文:http://snowdream2013.blog.163.com/blog/static/[***********]8977/ MCS-51单片机含有2个定时器/计数器,具有4种工 ...查看


  • 计算机网络 串行通信和并行通信
  • 计算机网络 串行通信和并行通信 串行通信方式和并行通信方式是信道最基本的两种通信方式.根据信道通信方式的不同,对数据传输速率,以及数据传输距离也有不同的影响. 1.并行通信 并行通信是指在发送端和接收端之间,能够同时传输多个数据位,并且每一 ...查看


  • 第四章 可编程串行接口芯片8251A
  • 第四章 可编程串行接口芯片8251A 1 串行通信的基本知识 微机与外部设备或其他计算机之间进行信息交换称之为通信.如图1所示,微机的通信方式有两种: 并行通信:数据的各位同时发送或接收,如微机与存储器或并行打印机之间的通信.其优点是传送速 ...查看


  • 计算机常见通讯接口
  • 1. 并行接口 目前,计算机中的并行接口主要作为打印机端口,接口使用是25针D 形接头.所谓"并行",是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加 ...查看


热门内容