4. 串行接口与定时计数器

44
4. 串串串串串串串串串串 1. 串串串串串 串串串 串串串串串串串串串串串串串串串串串 (Communication) 串串串串串串串串串串串 串串串串 : 串串串串串串串串串串串串 串串串串 : 串串 串串 串串串串串串串串串 串串串串串 一一。: 串串串串串串串 一、

description

4. 串行接口与定时计数器. 一、串行接口及应用. 1. 串行接口的一般概念 单片机与外界进行信息交换称之为 通讯 (Communication) 。 单片机的通讯方式有两种: 并行通讯 : 数据的各位同时发送或接收。 串行通讯 : 数据一位一位顺序发送或接收。参看下图:. 起始位. D 0. D 2. D 3. D 4. D 6. D 7. D 5. D 1. 停止位. 一 . 串行通讯的基本方式. ( 一 ). 异步通讯 以字符为传送单位用起始位和停止位标识每个字符的开始和结束。字符间隔不固定,只需字符传送时同步。 - PowerPoint PPT Presentation

Transcript of 4. 串行接口与定时计数器

Page 1: 4.  串行接口与定时计数器

4. 串行接口与定时计数器

1. 串行接口的一般概念 单片机与外界进行信息交换称之为通讯 (Communication) 。

单片机的通讯方式有两种: 并行通讯 : 数据的各位同时发送或接收。 串行通讯 : 数据一位一位顺序发送或接收。参看下图:

一、串行接口及应用

Page 2: 4.  串行接口与定时计数器
Page 3: 4.  串行接口与定时计数器

( 一 ). 异步通讯 以字符为传送单位用起始位和停止位标识每个字符的开始和结束。字符

间隔不固定,只需字符传送时同步。 异步通讯常用格式:一个字符帧

一 . 串行通讯的基本方式

D0 D1 D2 D3 D4 D5 D6 D7 停止位起始位

异步通讯的双方需要两项约定:1. 字符格式一帧字符位数的规定:数据位,校验位,起始位和停止位。

Page 4: 4.  串行接口与定时计数器

2. 波特率 ( 位 / 秒 )—— 对传送速率的规定波特率:每秒钟传送的位数,记为 bps ( bit/sec )。例:要求每秒传送 120 个字符,每帧为 10 位。解: B=120×10=1200 波特 每位 0.83ms数据位传输率 =120×8=960 位 / 秒

Page 5: 4.  串行接口与定时计数器

(二)同步通讯:数据块传递开始要用同步字符来指示,

要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。

Page 6: 4.  串行接口与定时计数器

串行通信的校验方法

目的:保证高效而无差错的传送数据。校验位:可以奇校验、偶校验或没有校验位。

奇偶校验:主要用于对一个字符的传输过程进行校验。 通常把数据位和校验位中 1 的个数为奇数个称为奇校验。 通常把数据位和校验位中 1 的个数为偶数个称为偶校验。

异步传输信息冗余较大,例如: 1+8+1+2 中有效位数只有 8位。

Page 7: 4.  串行接口与定时计数器

串行传输中的数据传输方向如果在通信过程的任意时刻,信息只能由一方 A 传

到另一方 B ,则称为单工。(无线电对讲机)如果在任意时刻,信息既可由 A 传到 B ,又能由 B

传 A ,但只能由一个方向上的传输存在,称为半双工传输。如果在任意时刻,线路上存在 A 到 B 和 B 到 A 的

双向信号传输,则称为全双工。(电话)

Page 8: 4.  串行接口与定时计数器

1. 数据缓冲器 SBUF

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

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

发送指令: MOV SBUF , A2 )接收 SBUF 存放已接收成功的 8 位数据,供 CPU 读

取。 接收指令: MOV A , SBUF

一 . 串行接口控制字

Page 9: 4.  串行接口与定时计数器

SM0 SM1 SM2 REN TB8 RB8 TI RI

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

SM0 , SM1 :选择串行口 4 种工作方式。SM2 :多机控制位,用于多机通讯。REN :允许接收控制位, REN=1 ,允许接收; REN=0 ,禁止接收。TB8 发送的第 9 位数据位,可用作校验位和地址 / 数据标识位RB8 :接收的第 9 位数据位或停止位TI :发送中断标志,发送一帧结束, TI=1 ,必须软件清零RI :接收中断标志,接收一帧结束, RI=1 ,必须软件清零

Page 10: 4.  串行接口与定时计数器

3. 节电控制寄存器 PCON

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

Page 11: 4.  串行接口与定时计数器

串行口的工作方式方式 0 :同步方式(移位寄存器方式)

要想移位寄存器工作,需要向其时钟输入端 CLK送去移位脉冲,接收一个脉冲便移动一位。该脉冲由 TXD提供(移位脉冲),参与发送或接收的数据均出入于 RXD 端。可用于扩展8 位并行输入输出口

    输出 : 将 8 位数据以 fos/12 的固定波特率从 RXD 输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI 由硬件置位。

输入 : 置位允许接收控制位 REN= 1 。当( RI ) =0和( REN ) =1 同时满足时,开始接收。当接收到第 8 位数据时,将数据移入接收寄存器,并由硬件置位 RI 。

Page 12: 4.  串行接口与定时计数器

方式 1: 波特率可变的 10 位异步通讯接口

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

输出:串行数据从 TXD引脚输出,发送完一帧数据后,就由硬件置位 TI 。 输入:在( REN ) =1 时,串行口采样 RXD引脚,当采样到 1至 0 的跳变时,确认是开始位 0 ,就开始接收一帧数据。只有当( RI ) =0且停止位为 1 或者( SM2 ) =0 时,停止位才进入 RB8 , 8 位数据才能进入接收寄存器,并由硬件置位中断标志 RI ;否则信息丢失。所以在方式 1 接收时,应先用软件清零 RI 和 SM2 标志。

Page 13: 4.  串行接口与定时计数器

方式 2 :固定波特率的 11 位 UART方式它比方式 1增加了一位可程控为 1 或 0 的第 9 位数据。输出 : 它可作为多机通讯中地址 / 数据信息的标志位,也可以作为数据的奇偶校验位。输入 : 在接收到附加的第 9 位数据后,当( RI ) =0或者( SM2 ) =0 时,第 9 位数据才进入 RB8 , 8 位数据才能进入接收寄存器,并由硬件置位中断标志 RI ;否则信息丢失。且不置位 RI 。

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

Page 14: 4.  串行接口与定时计数器

( 4 )方式 3 :异步第 9 位方式 方式 3 为波特率可变的 11 位 UART 方式。

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

Page 15: 4.  串行接口与定时计数器

当时钟频率选用 11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。

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

常用波特率

Fosc(MHZ)

SMOD TH1 初值

19200 11.0592 1 FDH

9600 11.0592 0 FDH

4800 11.0592 0 FAH

2400 11.0592 0 F4h

1200 11.0592 0 E8h

Page 16: 4.  串行接口与定时计数器

串口的电平转换电路 RS232 使 EIA ( Electronics Indu

stries Association )组织推荐的、目前最常用的一种串行通讯接口标准。采用 25芯连接器或 9芯连接器。

常用电平为 -12V~+12V 逻辑“ 1” 为 -3V~-25V, 逻辑“ 0” 为 +3V~+25V TTL 与 EIA 之间需要用接口电路

进行转换

Page 17: 4.  串行接口与定时计数器

为什么需要电平转换电路

单片机使用的是 TTL电平,单片机的串口输出信号也是如此,

串行通信中一般使用的是 RS232 通信协议 需要外接接口进行电平匹配

Page 18: 4.  串行接口与定时计数器

MAX232 和单片机串口连接的典型电路

Page 19: 4.  串行接口与定时计数器

单片机和单片机之间的串行通信也需要电平转换芯片吗?

对于两个单片机而言,二者都是 TTL电平,所以不需要电平转换芯片。

Page 20: 4.  串行接口与定时计数器

定时 / 计数器中的核心部件为可预置初值计数器。预置初值后开始计数,直至计数值归 0 或产生溢出,可申请中断。

K1 K2

可预置初值计数器 中断请求

功能选择

启动控制

内部时钟脉冲(定时)

外部输入脉冲(计数)

溢出信号计数脉冲

计数初值

二.定时 / 计数器的工作原理

Page 21: 4.  串行接口与定时计数器

例:设 CTC 中为 8 位加 1 计数器。按要求选择功能和初值。

1. 要求检测到 100 个脉冲,发中断请求,通知 CPU 。选计数功能,计数初值为 156 。

2. 要求定时每隔 100s 时间,发一次中断请求。设内部时钟周期 1s

选定时功能,计数初值为 156 。

Page 22: 4.  串行接口与定时计数器

一.定时 / 计数器的应用1.计数功能:生产线上产品计数。每个产品通过得到一个脉冲信号,

计数器记录脉冲个数,当计数值与设定值相等,启动包装机器。

检测转速。电机转动一圈发出一个脉冲,计数器记录一秒时间内脉冲个数,显示转速。

2.定时功能:用于实时控制,定时采样、定时启动等。当定时时间与设定值相等,执行规定操作。

3 定时 / 计数器电路 CTC

Page 23: 4.  串行接口与定时计数器

3-2-1 MCS-51 定时 / 计数器

2 个可独立控制的 16 位定时器 / 计数器: T0 、 T1定时器初始化编程:1. 功能选择(定时 / 计数)2. 位数选择( 8/13/16 位)3. 启动方式选择(内部启动 / 外部启动)4. 启动控制(启动 / 停止)5.恢复初值方式(自动重装 / 软件重装)

Page 24: 4.  串行接口与定时计数器

GATE C/T M1 M0 GATE C/T M1 M0

1 )功能选择位 C/T :=0 ,定时功能,计数内部机器周期脉冲;=1 ,计数功能,计数引脚 T0(T1) 输入的负脉冲。

1.TMOD 定时器方式寄存器( 89H )

T1 T0

一 . 定时器控制、状态寄存器

Page 25: 4.  串行接口与定时计数器

2 )方式选择位 M1 、 M0 : 4 种工作方式: 13/16/8 位

M1 M0 方式 功能描述0 0 0 13 位0 1 1 16 位1 0 2 8 位自动重装1 1 3 T0 为两个 8 位

Page 26: 4.  串行接口与定时计数器

3 )门控方式选择位 GATE :

=0 ,非门控方式 (内部启动 ) :TRx=1 ,启动定时器工作;TRx=0 ,停止定时器工作。

=1 ,门控方式 ( 外部启动 ) : TRx=1且引脚 INTx=1才启动。

确定定时器工作方式指令: MOV TMOD , #方式字

例:设 T0 用方式 2非门控定时, T1 用方式 1门控计数。MOV TMOD , #

Page 27: 4.  串行接口与定时计数器

2.TCON 定时器控制 / 状态寄存器

1 )启动控制位 TR0 、 TR1=0 ,停止定时器工作=1 ,启动定时器工作例:启动 T0 : SETB TR0

Page 28: 4.  串行接口与定时计数器

2 )溢出中断标志位 TF0 、 TF1定时器溢出使 TFx=1 ,引起中断请求, CPU响应 Tx中断后,自动清 0 TFx。

可用软件检测 TFx,必须软件清 0 。WAIT : JBC TF0 , NEXT ;检测 T0是否溢出

SJMP WAIT ;未溢出,继续检测NEXT : … ;溢出, TF0 清 0 ,处理溢出

3.可预置初值的 16 位加 1 计数器 TH0 、 TL0 、 TH1 、TL1预置 T0初值指令: MOV TH0 , #XH

MOV TL0 , #XL

Page 29: 4.  串行接口与定时计数器

二 . 定时器工作方式由方式选择位 M1 、 M0设定

1. 方式 013 位定时 / 计数器。 THx 8 位和 TLx低 5位组成 13 位加 1 计数器

计数外部脉冲个数: 1~ 8192(21

3)定时时间 (T=1s) : 1s ~ 8.19

ms

Page 30: 4.  串行接口与定时计数器

2. 方式 116 位定时 / 计数器。 THx8 位和 TLx8 位组成 16 位加 1

计数器计数外部脉冲个数: 1~ 65536(216)定时时间 (T=1s) : 1s ~ 65536×T= 65.54ms

Page 31: 4.  串行接口与定时计数器

3. 方式 2

自动恢复初值 8 位定时 / 计数器。 TLx为 8 位加 1 计数器, THx为 8 位初值暂存器。

用于需要重复定时和计数的场合。最大计数值: 256 (28)最大定时时间 (T=1s) : 256s

Page 32: 4.  串行接口与定时计数器

4. 方式 3

T0分成 2 个 8 位定时器: TL0 定时 / 计数器和 TH0 定时器TL0占用 T0 控制位: C/T , TR0 ,GATE ;TH0占用 T1 控制位: TR1,TF1 。T1 不能使用方式 3 工作

Page 33: 4.  串行接口与定时计数器

5. 计算时间常数 X( 计算初值 )

计数功能: X= 2n -计数值 n : 8/13/16 定时功能: X= 2n - t/T t :定时时间、 T :机器周期

Page 34: 4.  串行接口与定时计数器

定时器初始化编程:使用定时器工作之前,先写入控制寄存器,确定好定时器工作方式

1. 按实际需要选择定时 / 计数功能2. 按时间或计数长度选择方式3. 计算时间常数

初始化编程格式:MOV TMOD , # 方式字;选择方式MOV THx , #XH ;装入 Tx 时间常数MOV TLx , #XL

(SETB EA ) ;开 Tx 中断(SETB ETx ) SETB TRx ;启动 Tx定时器

三 . MCS-51 定时器的应用

Page 35: 4.  串行接口与定时计数器

4. 溢出处理编程格式:

1 )查询方式:先查询定时器溢出标志,再进行溢出处理。… ;定时器初始化

WAIT : JBC TFx, PT ;检测溢出标志SJMP WAIT

PT : MOV THx, #XH ;重装时间常数MOV TLx, #XL

… ;溢出处理SJMP WAIT

Page 36: 4.  串行接口与定时计数器

2 )中断方式:初始化后执行其他任务,中断服务程序处理溢出。

ORG 0000HLJMP MAINORG 000BH(001BH) ; Tx中断入口LJMP PTS

MAIN : … ;初始化后执行其他程序

PTS : … ;溢出中断服务程序

MOV THx, #XH ;重装时间常数MOV TLx, #XLRETI

Page 37: 4.  串行接口与定时计数器

四 . 举例由 P1.0 输出方波信号,周期

为 2ms , 设 fosc=12MHz。

2ms

解:每隔 1ms改变一次 P1.0 的输出状态。用 T0非门控方式 1 定时。计算时间常数: X = 216 - t/T = 216 -1000/1 = FC18H

( 1 )查询方式: ORG 0000h

JMP STARTORG 1000H

START: MOV TMOD,#01HMOV TL0,#18HMOV TH0,#0FCHSETB TR0

LOOP: JBC TF0,PTF0SJMP LOOP

PTF0: CPL P1.0MOV TL0,#18HMOV TH0,#0FCHSJMP LOOP

END

Page 38: 4.  串行接口与定时计数器

( 2 )中断方式 ORG 0000HAJMPMAINORG 000BHAJMPPT0INTORG 0100H

MAIN: MOV SP,#60HMOV TMOD,#01HMOV TL0,#18HMOV TH0,#0FCHSETBEASETBET0SETBTR0

HERE: SJMP HERE PT0INT: CPL P1.0

MOV TL0,#18HMOV TH0,#0FCHRETI

END

Page 39: 4.  串行接口与定时计数器

长定时方法:增加一个软件计数器或一个硬件计数器。

硬件方式: T0 定时, T1 计数T0 的定时跳变信号 P1.0 的负跳变次

数,计满 5个跳变为 1 秒。

P1.0P1.0

P1.7P1.7

编制程序使 P1.7驱动 LED亮 1 秒灭 1 秒地闪烁。

设时钟频率为 6MHz

T0 方式 1 定时, T1 方式 2 计数T1 计数值为 5,初值为 #0FBH ;设置 T0 的定时值为 100ms ,初值为 #3CH ;T0溢出后 ( 每 100ms), P1.0反转一次同时 P1.0 每下跳变一次(反转两次), T1 计数一次累计 5次, P1.7反转一次

Page 40: 4.  串行接口与定时计数器

START : MOV TMOD , #61H ; T0 方式 1 定时, T1 方式 2 计数 MOV TL1 , #0FBH ;差 5 个负跳变就溢出,同时自动重装 MOV TH1 , #0FBH ; T1 计数值为 5 CLR P1.0 SETB TR1 ; T1 开始计数

LOOP1 : CPL P1.7LOOP2 : MOV TL0 , #3CH ;设置 T0 的定时值为 100ms ,

MOV TH0 , #0B0H ;每 100ms 作一次反相跳变 SETB TR0 ; T0 开始计数

LOOP3: JBC TF0 , LOOP4;T0溢出后 ( 每 100ms), P1.0反转一次SJMP LOOP3; 同时 P1.0 每下跳变一次(反转两次),

LOOP4 : CPL P1.0 ; T1 计数一次JBC TF1 , LOOP1 ;累计 5次, P1.7反转一次SJMP LOOP2

Page 41: 4.  串行接口与定时计数器

START: MOV TMOD,#61H;T0 方式 1 定时, T1 方式 2 计数 MOV TL1,#0FBH;差 5个负跳变就溢出,同时自动重装 MOV TH1,#0FBH;T1 计数值为 5 CLR P1.0 SETB TR1;T1 开始计数 LOOP1: CPL P1.7 LOOP2 : MOV TL0,#3CH;T设置 0 的定时值为 100ms ,

MOV TH0,#0B0H ;每 100ms 作一次反相跳变

SETB TR0 ;T0 开始计数 LOOP3: JBC TF0,LOOP4;T0溢出后 ( 每 100ms), P1.0反转一次 SJMP LOOP3;同时 P1.0 每下跳变一次(反转两次), LOOP4: CPL P1.0;T1 计数一次 JBC TF1,lOOP1; 累计 5次, P1.7反转一次 SJMP LOOP2 end

Page 42: 4.  串行接口与定时计数器

例定时器外部引脚 T0(T1) 用作外部中断信号输入端。

外部负脉冲引起中断请求,选计数方式,时间常数为 FFH 。

例:门控方式测量正脉冲宽度解: INT1 引脚输入被检测信

号,记录在正脉冲的时间内包含机器脉冲个数。

TR1=1 T1 启动 TR1=0(门控方式 ) ( T1

停止)

INT1

Page 43: 4.  串行接口与定时计数器

1 )设脉宽小于 65.5ms等待查询 INT1 ,正脉冲过后,读出 TH1TL1 。

START : MOV TMOD , #90H;T1门控方式( INT1= 1 启动定时),方式 1 定时

MOV TL1 , #0H ; T1 清零 MOV TH1 , #0H

WAIT1 : JB P3.3 , WAIT1 ;等待负脉冲的到来 SETB TR1 ;开始定时

WAIT2 : JNBP3.3 , WAIT2 ;等待正脉冲的到来

WAIT3 : JB P3.3 , WAIT3 ;等待负脉冲的到来CLR TR1 ;结束定时MOV R2 , TL1MOV R3 , TH1

Page 44: 4.  串行接口与定时计数器

2 )设脉宽大于 65.5ms ,中断方式记录 TH1TL1溢出中断次数。

SETB TR1SETB ET1 ;开 T1 中断SETB EA

WAIT2 : JNB P3.3 ,WAIT2 ;等待正脉冲到来WAIT3 : JB P3.3 ,WAIT3 ;等待正脉冲结束

CLR TR1 ;关闭 T1MOV IE , #00 ;关闭中断MOV R2 , TL1 ;读出 T1MOV R3 , TH1LCALL PPS ;计算脉宽

HERE : SJMP HERE ;其他任务PRIC :INC R4 ;记录溢出次数

RETIPPS : … ;计算脉宽子程序

计算脉宽的子程序的计算式如下:脉宽 t = ( R4 ×216 + R3 R2 ) ×T ( T 为机器周期)