您好,欢迎来到九壹网。
搜索
您的当前位置:首页单片机第五章 80C51单片机的功能单元

单片机第五章 80C51单片机的功能单元

来源:九壹网
第5章80C51单片机的功能单元5.15.25.35.4

并行I/O接口中断系统

定时器/计数器串行接口

5.1 并行I/O接口

80C51共有四个8位的并行双向口,计有32根输入/输出(I/O)口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。由于它们在结构上的一些差异,故各口的性质和功能也就有了差异。它们之间的异同列于表5--1。

表5—1 80C51并行I/O接口的比较I/O口位数性质功能SFR字节地址地址范围P0口8真正双向口I/O口替代功能80H80H~87HP1口8准双向口I/O口替代功能90H90H~97HP2口8准双向口I/O口替代功能A0HA0H~A7HP3口8准双向口I/O口替代功能B0HB0H~B7H驱动能力8个TTL负载4个TTL负载4个TTL负载4个TTL负载5.1.1 P1口

1.位结构与工作过程分

P1口的位结构如图5--1所示,内包含:输出锁存器、输入缓冲器BUF1(读引脚)、BUF2(读锁存器)以及由FET晶体管Q0与上拉电阻组成的输出/输入驱动器。

图5--1 P1口的位结构原理图

P1口的工作过程分析如下:

①P1.i位作输出口用时:CPU输出0时,D=0,Q=0,Q=1,晶体管Q0导通,A点被下拉为低电平,即输出0;CPU输出1时,D=1,Q=1,Q=0,晶体管Q0截止,A点被上拉为高电平,即输出1。

②P1.i位作输入口用时:先向P1.i位输出高电平,使A点提升为高电平,此操作称为设置P1.i为输入线。若外设输入为1时,A点为高电平,由BUF1读入总线后,B点也为高电平;若外设输入为0时,A点为低电平,由BUF1读入总线后,B点也为低电平。

2.P1口的特点

①输出锁存,输出时没有条件;

②输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1;

③工作过程中无高阻悬浮状态,也就是该口不是输入态就是输出态。

具有这种特性的口不属于“真正”的双向口,而被称为“准”双向口。

3. P1口的操作

(1)字节、位操作

MOV P1 , A

MOV P1 , MOV A, P1SETB P1.xCLR P1.x

MOV C JB P1.x ANL C , P1.x

#data,P1.x,rel有关位操作的指令有:置位、清除SETBP1.i;P1.i←1

CLRP1.i;P1.i←0

输入、输出MOVP1.i,C;P1.i←CY

MOVC,P1.i;CY←P1.I

判跳JBP1.i,rel;P1.i=1,跳转

JBCP1.i,rel;P1.i=0,跳转且P1.i←0

逻辑运算ANLC,P1.i;CY←(P1.i·CY)

ORLC,P1.i;CY←(P1.i+CY)

其中:P1.i中的i=0,…,7。

(2)读引脚操作和读锁存器操作

从P1口的位结构图中可以看出,有两种读口的操作:一种是读引脚操作,一种是读锁存器操作。

读引脚和读锁存

读引脚须执行两条指令:

MOV P1,#0FFHMOV A,P1

读锁存器

以P1口为目的操作数,CPU读锁存器值→修改→重写锁存器。“读→修改→写”指令。

字节指令有:ANL、ORL、XRL、DJNZ位指令有:JBC、CPL、SETB、CLR、MOV

5.1.2 P3口

P3口的位结构图如图5-2所示。工作过程

(1)作一般I/O口

第二输出功能应置1,其工作状况与P1 口类似。(2)作第二功能信号

输出锁存器应置1,第二功能信号可以顺利到P3.x引脚。

注意:P3口作第二功能输入、输出和一般I/O口输入时,必须该口位输出置1。

图5—2 P3口的位结构原理图

5.1.3 P2口

P2口的位结构图如图5-3所示。

(1)作一般I/O口,为准双向口,功能同P1口。(2)作高8位地址输出,无需外加地址锁存器。

图5--3 P2口的位结构原理图

5.1.4 P0口

P0口的位结构图如图5--4所示。

(1)作一般I/O口,输出为漏极开路,须外接上拉电阻。

(2)作地址/数据复用总线。

图5—4 P0口的位结构原理图

I/O口应用+5V5.1k4P1.0P1.1P1.2P1.3K0K1K2K31004C51P1.4P1.5P1.6P1.7LED0LED1LED2LED3+5V5.2 中断系统

5.2.1中断、中断源及中断优先级

中断:

程序执行过程中,允许外部或内部事件通过硬件打断程序的执行,使其转向为处理外部或内部事件的中断服务程序中去;完成中断服务程序后,CPU继续原来被打断的程序,这样的过程称为中断过程。

中断源:能产生中断的内部或外部事件。

中断优先级:当多个中断源同时申请中断或正在处

理某个中断时,又有另一个中断源提出中断申请,CPU就要根据中断源的优先级别来处理。

主程序执行主程序中断响应中断请求断点继续执行主程序执行中断处理程序中断返回80C51的中断系统结构示意图





基本原则是:

(1)高优先级不能被低优先级中断;(2)低优先级可被高优先级中断。

(3)任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断。(4)两个同一级序号 中断源 自然优先顺序 的中断源同时向1 外部中断0 最高 CPU发出中断申请2 定时器0 次高 ,CPU通过内部硬3 外部中断1 中 件查询,按自然优4 定时器1 此低 先级确定优先响应5 串行口中断 最低 哪一个中断要求 5.2.2 中断的控制和操作

80C51中有五个中断源;

1.中断源

(1)外部中断源(2个)

由P3.2端口线引入,低电平或下降沿引起。由P3.3端口线引入,低电平或下降沿引起。定时控制寄存器TCON

D7D6D5D4D3D2D1D0

TF1TF0IE1IT1IE0IT0中断请求标志

触发方0 式选择1 低电平下降沿

(2)内部中断源(3个)

T0:定时/计数器0中断,由T0回零溢出引起。T1:定时/计数器1中断,由T1回零溢出引起。TI/RI:串行I/O中断,完成一帧字符发送/接收引起。

中断源入口地址

中断源INT0T0INT1T1 

RI/TI入口地址0003H000BH0013H001BH0023H

2. 中断标志位地址8FH符号TF18EH8DH8CH8BH8AHH88HTF0IE1IT1IE0IT0SCON寄存器字节地址为98H,其格式如下:

位地9FH9EH9DH9CH9BH9AH99H98H址

TIRI符号

5.2.3 中断控制1.中断允许寄存器IE

IE在特殊功能寄存器中,字节地址A8H,位地址分别是A8H~AFH。IE控制CPU对中断源总的开放或禁止以及每个中断源是否允许中断。

位地AFHAEHADHACHABHAAHA9HA8H址—ESET1EX1ET0EX 0符号EA—0:禁止,1:允许

2.中断优先寄存器IP

IP在特殊功能寄存器中,字节地址为B8H,位地址分别是B8H~BFH,IP用来锁存各中断源优先级的控制位。

位地址BFHBEHBDHBCH

BBHBAHB9HB8HPT1

PX1

PT0

PX0

符号——PS

0:低优先级1:高优先级,

5.2.4 中断响应过程1.中断查询

单片机在每个机器周期的S5P2期间,顺序采样每个中断源,CPU在下一个机器周期S6状态按优先级顺序查询中断标志,如查询到某个中断标志为1,将在再下一个机器周期S1状态响应最高优先级中断请求。以下情况除外:

(1)CPU正在执行一个同级或高一级的中断服务子程序。

(2)当前正在执行的那条指令还未执行完。

(3)当前正在执行的指令是RETI或对IE,IP寄存器进行读/写指令,执行这些指令后至少再执行一条指令才会响应中断。

2.中断响应

中断响应后,CPU完成以下自主操作:

(1)置位相应优先级别状态触发器,以标明级别。

(2)中断标志自动清“0”(RI/TI除外)。

(3)断点地址压入堆栈保护。

(4)中断入口地址装入PC,使程序转向中断入口地址单元中去执行相应的中断服务程序。

3. 中断返回

执行RETI指令,产生以下自主操作:(1)优先级别状态触发器清“0”。

(2)断点地址弹给PC,以便程序返回断点处继续执行。

5.3 定时/计数器

5.3.1 概述

定时/计数器简称定时器,80C51单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。

定时/计数器的定时和计数功能

定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1) 。

(1)定时功能----计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1。所以,计数频率是振荡频率的1/12。

(2)计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。

在TMOD中,各有一个控制位(C/T),分别用于控制定时/计数器T0和T1是工作在定时器方式还是计数器方式。

5.3.2 定时/计数器控制寄存器

定时器共有2个控制寄存器TMOD和TCON,由软件写入TMOD和TCON两个8位寄存器,设置各个定时器的操作方式和控制功能。

1.定时器控制寄存器TCON

D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0中断请求标志启动定时/计数器触发方式选择0 停止1 启动

0 低电平1 下降沿

2.工作方式控制寄存器TMOD

D7D6GATEC/TD5M1D4M0D3D2GATEC/TD1M1D0M0

T1控制GATE—门控位

C/T—计数/定时选择M1 M0—工作方式选择

T0控制

(1)GATE——门控位。

GATE=1时,由外部中断引脚INT0、INT1和TR0、TR1来启动

定时器。当INT0引脚为高电平时,TR0置位,启动定时器T0;当INT1引脚为高电平时,TR1置位,启动定时器T1。

GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1。(2)C/T——功能选择位。

C/T=1时,选择计数功能;C/T=0时,选择定时功能。

(3)M1、M0——方式选择位。

由于有M1和M0两位,可以有四种工作方式。

表定时器/计数器T0、T1的四种工作方式M1M0工作方式计数器配置001010方式0方式1方式213位计数器16位计数器自动再装入的8位计数器11方式3T0分为两个8位计数器,T1作波特率发生器5.3.3 定时/计数器工作方式

每个定时/计数器有4种工作方式,也就是每个定时器可构成4种电路结构方式,方式0~3.

1.方式013位计数器。2.方式116位计数器。

3.方式2自动重载8位计数器。4.方式3T0分为2个8位计数器,T1作波特率发生器。

1. 方式0 13位计数器

低5位8位

13位计数器

2. 方式1 16位计数器

定时器计数脉冲输入8位8位16位计数器计数器3. 方式2 自动重载8位计数器

4. 方式3

T0分为2个8位计数器,T1作波特率发生器,

5.3.4 定时/计数器常数的计算1.定时器初值的计算

定时器为加1计数器,计数器溢出产生中断。设:t-定时时间,tc-机器周期,fosc-晶振频率,L-计数器长度(13、16、8),TC-定时器初值

LLt=(2-TC)tc=(2-TC)12/foscLTC=2-t12/fosc

定时时间的倒数即为溢出率,即

L溢出率=1/t=fosc/12*1/(2--TC)

最大定时时间(初值TC=0)

假设fosc=12MHz,

方式0:t=(2L-TC)12/fosc=213 12/(12

610) =8.192ms

方式1:t=216 12/(12 106) =65.536ms方式2:t=28 12/(12 106) =0.256ms

8 6方式3:t=212/(12 10) =0.256ms



2. 定时器初始化

(1)写TMOD,确定工作方式。(2)写THi、TLi,装入计数初值。(3)置TRi=1,启动Ti。

(4)置EA=1,开CPU中断,置ETi=1,开中断。

Ti5.3.5 定时/计数器应用

【例5.1】设MCS-51单片机系统时钟频率fosc为6MHz,请编出利用定时/计数器T0在P1.0引脚上产生周期为2ms,占空比为50%的方波信号的程序。1.主程序

(1)T0工作方式的设定:选择方式1(16位方式)

(最大定时131ms)

(2)定时常数的设定:定时1ms

X=216-110-36106/12=65036=0FE0CH

即:TH0应装0FEH,TL0应装0CH。

(3)(4)(5)允许T0中断,开放总中断

IE应装10000010B。T0:SETBTR0SJMP$

中断管理:即:启动定时器动态停机:主程序如下:

MAIN:MOV

MOVMOVMOVSETBSJMP

TMOD,#01H;设定TH0,#0FEH;装入定时常数高TL0,#0CH;装入定时常数低IE,#82H;开放TR0;启动$

T0为方式18位8位T0中断T02.中断服务程序

恢复T0常数,改变P1.0状态。程序如下:

T0INT:MOVTH0,#0FEH;重装定时常数

MOVTL0,#0CH;CPLP1.0RETI

3.完整程序

T0INT:MOVTH0,#0FEH

ORG0000HLJMPMAINORG000BHLJMPT0INTORG0030HMAIN:MOVTMOD,#01H

MOVTH0,#0FEHMOVTL0,#0CHMOVIE,#82HSETBTR0

SJMP$

MOVTL0,#0CHCPLP1.0RETIEND

【例5.2】设MCS-51单片机系统时钟频率fosc为6MHZ,请编出利用定时/计数器T0在P1.0引脚上产生周期为2s,占空比为50%的方波信号的程序

(1)T0工作方式的设定:选择方式1(16位方式)

(最大定时131ms)

(2)定时常数的设定:定时100ms

16-36X=2-10010610/12=

15536=3CB0H

(3)完整程序

T0INT:MOVTH0,#3CH

ORG0000HLJMPMAINORG000BHLJMPT0INTORG0030HMAIN:MOVTMOD,#01H

MOVTH0,#3CHMOVTL0,#0B0HMOVIE,#82HSETBTR0

MOVR7,#0AHSJMP$

NEXT:MOVDJNZCPLMOVEND

TL0,#0B0HR7,NEXTR7,#0AH

P1.0

RETI

例利用定时器/计数器测定图5--15所示波形的一个周期长度。解:

这里利用门信号GATE启动定时器的方法。INT0为高电平时,启动定时器T0;定时器/计数器T1为计数器,T1的电平由1到0,计数器计数。

①定时器设置当脉冲数低于每秒3个时,每个脉冲周期为330ms左右,故设置定时器的基本定时为100ms,可满足测时的精度要求。因此,采用门控方式,触发启动定时器;采用方式1,16位计数器。

图5---15利用定时器/计数器测定周期

时间常数计算:晶体振荡器为6MHz,基本定时时间为100ms,求得:初值TC=3CB0H

编程

ORG0000HLJMPMAINORG000BHLJMPTIME0ORG001BHLJMPTIME1ORG0030H

MAIN:SETBMOVR3,SETBP3.2#0P3.5MOV#59H

TMOD,

MOVTH0,#3CHMOVTL0,#0B0HMOVMOVTH1,SETBTL1TR0,#0FEH#0FFHSETBSETBTR1PT1SETBPT0

SETBET1SETBET0SETB20H.1

LOOP:SETB20H.0SETBET0SETBEAJB20H.0,$JB20H.1,LOOP

RET

TIME0:CLRTR0MOVTMOD,#51HSETBTR1

MOVTH0,#3CHMOVTL0,#0B0HINCR3CPL20H.0

RETI

TIME1:CLR20H.0CLR20H.1CLRET0CLRET1CLREACLRTR0CLRTR1

RETI

本子程序占用T0、

T1,20H.0、20H.1及寄存器R3。R3×100ms即为周期长度,因此可测的最大周期长度为256×100ms=25.6s。

5.4 串行接口

5.4.1 串行通信的概念1)异步通信与同步通信

通信方式

并行通信方式—空间上区分各位数据

及联络控制信号。占用传输线多,速度快。串行通信方式—时间上区分各位数据

及联络控制信号。占用传输线少,速度慢。

串行通信方式

----信息传输在一个方向上只占用一跟通信线,它既作为数据线,又作为联络线。

异步通信方式—按字符传输

信息各式上分

同步通信方式—按数据块传输

1.异步通信方式

第N-1个字符停起止始位位10第N个字符8位数据位停奇偶止校验位低位

高位2.同步通信

在同步通信中,数据或字符开始处是用一同步字符来指示(一般约定为1~2个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,下面就连续按顺序接收数据。

同步字符1起始同步字符2数据块(若干字节)校验符1校验符2结束2 )串行通信的波特率

波特率(bandrate)是异步通信中数据传送速率的单位,其意义是每秒传送多少位二进制数。

例如:数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为:10b×120/s=1200b/s=1200波特

3)串行通信的方式

按照数据传送方向,串行通信可分为半双工(half duplex)制式和全双工(full duplex)制式。

1.半双工制式

在半双工制式下,甲机和乙机之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收。

甲机乙机

2.全双工制式

在全双工制式下,甲、乙两机之间数据的发送和接收可以同时进行,称为全双工传送。不管哪种形式的串行通信,在两机之间均应有共地线。

甲机乙机5.4.2 单片机串行口的结构

主要由两个数据缓冲寄存器SBUF和一个输入移位寄存器,以及一个串行控制寄存器SCON等组成。

门SBUF波特率发生器T1发送控制器串行口中断TXDTICPU+接收控制器RISBUF移位寄存器RXD1.串行口控制寄存器SCON

SCON (98H) 9FH SM0 9EH SM1 9DH SM2 9CH REN 9BH TB8 9AH RB8 99H TI 98H RI 



(1)SM2:在方式2和方式3中主要用于多机通信控制。

(2)REN:串行接收允许位。由软件置位或清除。软件置1时,串行口允许接收,清零后禁止接收。

(3)TB8:发送数据的第9位。双机通信时它可作奇偶校验位;在多机通信中可作为区别地址帧或数据帧的标识位。(4)RB8:在方式2和方式3中是接收的第9位数据。(5)TI:发送中断标志位。。(6)RI:接收中断标志位。

SM0 SM1 0 0 0 1 1 0 1 1 工作方式 方式0 方式1 方式2 方式3 功能描述 8位同步移位寄存器 10位UART 11位UART 11位UART 波特率 fosc∕12 可变 fosc∕和fosc∕32 可变 2.电源控制寄存器PCON



PCON的各位的定义和功能如下:

当SMOD=l时,方式1、2、3的波特率加倍,否则不加倍。

D7 SMOD D6 D5 D4 D3 GF1 D2 GF0 D1 PD D0 IDL 

PCON (87H) 5.4.3 单片机串行口的工作方式



1.方式0

串行接口工作方式0为同步移位寄存器方式,多用于I/O口的扩展,其波特率是固定的,为fosc/12。TXD引脚输出同步移位脉冲,RXD引脚串行输入/输出。2.方式1

在方式l时,串行口被设置为波特率可变的8位异步通信接口。发送/接收1帧数据为10位,其中1位起始位、8位数据位(先低位后高位)和1位停止位。

3.方式2

串行口工作为方式2时,被定义为9位异步通信接口。发送/接收1帧数据为11位,其中1位起始位、8位数据位、1位控制/校验位和1位停止位。控制/校验位为第9位数据。4.方式3

方式3为波特率可变的11位异步通信方式,除了波特率有所区别之外,其余同方式2。

5.串行通信的波特率





(1)方式0的波特率

在方式0下,串行口通信的波特率是固定的,其值为fosc/12(fosc为主机频率)。(2)方式2的波特率

在方式2下,通信波特率为fosc/32或fosc/,根据特殊功能寄存器PCON中SMOD位的状态来决定串行口在那个波特率下工作。选择公式为:SMOD2波特率fOSC(3)方式1或方式3的波特率

在这两种方式下,串行口波特率是由定时器的溢出率决定的,因而波特率是可变的。波特率的公式为:SMOD波特率232定时器T1溢出率fOSC1定时器T1溢出率(K)122-初值式中:K为定时器T1的位数。

5.4.4 多机通信

多机通信的实现,主要靠主、从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位(D8)。以下简述如何实现多机通信。

TXDRXD8051主机TXD RXD80C510#从机TXD RXD80C511#从机TXD RXD80C512#从机



(1)主、从机均初始化为方式2或方式3,置SM2=1,允许中断。

(2)主机置TB8=1,发送要寻址的从机地址。

(3)所有从机均接收主机发送的地址,并进行地址比较。(4)被寻址的从机确认地址后,置本机.SM2=0,向主机返回地址,供主机核对。

(5)核对无误后,主机向被寻址的从机发送命令,通知从机接收或发送数据。

(6)通信只能在主、从机之间进行,两个从机之间的通信需通过主机作中介。

(7)本次通信结束后,主、从机重置SM2=1,主机可再对其他从机寻址。

5.4.5 串口通信编程和应用

【例7-3】编程把甲机片内RAM50H~5FH单元中的数据块从串行口输出。定义在方式3下发送,TB8作奇偶校验位。采用定时器1方式2作波特率发生器,波特率为1200波特,fosc=11.0592MHz,预置值TH1=0E8H。

双机通信(点对点通信)

RXD8051应用系统(甲)TXDGNDTXDRXDGND8051应用系统(乙)编程使乙机从甲机接收16个字节数据块,并存入片内60H~60FH单元。接收过程中要求判奇偶校验标志RB8。若出错则置F0标志为1,若正确则置F0标志为0,然后返回。

发送子程序如下:MOVTMOD,#20H;设置定时器1为方式2MOVTL1,#0E8H;设预置值MOVTH1,#0E8HSETBTRI;启动定时器1MOVSCON,#0C0H;设置串行口为方式3MOVPCON,#00H;SMOD=0MOVR0,#50H;设数据块指针MOVR7,#10H;设数据长度10HTRS:MOVA,@R0;取数据送至AMOVC,PMOVTB8,C;奇偶位P送至TB8MOVSBUF,A启动发送WAIT:JNBTI,$;判1帧是否发送完CLRTIINCR0;更新数据单元DJNZR7,TRS;循环发送至结束

接收子程序编程如下:



MOVTMOD,#20H;设置定时器1为方式2MOVTL1,#0E8H;设预置值MOVTH1,#0E8HSETBTR1;启动定时器1MOVSCON,#0C0H;设置串行口为方式3MOVPCON3,#00H;SMOD=0MOVR0,#60H;设置数据块指针MOVR7,#16;设数据块长度SETBREN;允许接收WAIT:JNBRI,$;判1帧是否接收完CLRRI





MOVA,SBUF;读入1帧数据JNBPSW.0,PZ;奇偶位P为0则跳转JNBRB8,ERR;P=l,RB8=0则出错SJMPYES;二者全为1则正确PZ:JBRB8,ERR;P=0,RB8=l则出错YES:MOV@R0,A;正确,存放数据INCR0;修改地址指针DJNZR7,WAIT;判断数据块接收完否CLRPSW.5;接收正确且接收完清F0标志RET;返回ERR:SETBPSW.5;出错则置F0标志为“l”RET

;返回

例:主机向02号从机发送50H~5FH中的数据;02号从机将接收到的数据放到内RAM30H ~3FH单元中。

主机程序:

ORG0030H

MAIN:MOVSCON,#98HM1:MOVSBUF,#02HL1:JNBTI,$

CLRTIJNBRI,$MOVA,SUBFXRLA,#02HJZRHTLJMPM1

RHTM1:L3:CLRMOVMOVMOVMOVJNBCLRINCDJNZLJMPEND

TB8

R0,#50HR7,#10HA,@R0SBUF,ATI,$TIR0R7,L3MAIN





:从机程序:

ORG0030HSR3:JNBRI,$MAIN:SI:SR1:SR2:MOV

MOV

MOVJNB

CLR

MOV

XRLJNZCLRMOVJNBCLR

R0,#30HR6,#10HSCON,#0B0HRI,$RIA,SUBFA,#02HSR1SM2

SBUF,#02HTI,$TI

RHT:CLRRIJNBTB8,RHTSETBSM2SJMPSR1MOVA,SBUFMOV@R0,AINCR0DJNZR6,SR3LJMPSIEND





因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务