第7章定时计数与中断系统_第1页
第7章定时计数与中断系统_第2页
第7章定时计数与中断系统_第3页
第7章定时计数与中断系统_第4页
第7章定时计数与中断系统_第5页
已阅读5页,还剩296页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章定时/计数与中断系统7.1中断系统7.2MCS-51定时/计数器系统

主要内容中断的定义?

所谓中断是指,由于某种随机事件的发生,计算机暂停现行程序的运行,转去执行另一程序,以处理发生的事件,处理完毕后又自动返回原来的程序继续运行。

将能引起中断的事件称为中断源。

CPU现行运行的程序称为主程序。

处理随机事件的程序称为中断服务子程序。响应中断中断返回中断源中断优先级中断开关中断标志1.中断源

在计算机控制系统中,把引起中断的事件称为中断源。在单片机控制系统中,常见的中断源有:·外部中断,如CPU某些特定引脚电平变化引起的中断。·各类定时/计数器溢出中断(即定时时间到或计数器满请求中断)。·串行发送结束请求中断。·串行接收有效请求中断。·电源掉电中断。2.中断优先级

中断是计算机系统中CPU与外设进行数据交换的主要方式,当多个外设以中断方式与CPU进行数据交换时,可能遇到两个或两个以上外设中断请求同时有效的情形。在这种情况下,CPU先响应哪一外设的中断请求?这就涉及到中断优先级问题。一般说来,为了能够处理多个中断请求,中断控制系统均提供中断优先级控制。有了中断优先级控制后,就可以解决多个中断请求同时有效时先响应哪一中断问题。3.中断开关

有时为避免某一处理过程被中断,中断控制器给每一个中断源都设置了一个中断请求屏蔽位,用于禁止或允许相应中断源的中断请求传送到CPU,相当于中断源的中断开关。每个中断源对应一个开关。此外,还设一个总的中断请求屏蔽位,当该位处于禁止状态时,所有中断源的中断请求均不能传送到CPU,相当于中断总开关。4.中断处理过程

中断请求何时有效?CPU什么时候查询中断标志?什么时候,在什么情况下会响应中断请求?中断响应的过程(1)在每条指令结束后,系统都自动检测中断请求信号,如果有中断请求,且CPU处于开中断状态下,则响应中断。(2)保护现场,在保护现场前,一般要关中断,以防止现场被破坏。保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈。(3)中断服务,即为相应的中断源服务。(7)恢复现场,用堆栈指令将保护在堆栈中的数据弹出来,在恢复现场前要关中断,以防止现场被破坏。在恢复现场后应及时开中断。(5)返回,此时CPU将推入到堆栈的断点地址弹回到程序计数器,从而使CPU继续执行刚才被中断的程序。TCONSCONINT0

IT0=0

IT0=1INT1

IT1=0

IT1=1TF0

IE1TF1T0T1TIRITXDRXDESET0EX0EX1ET1EA自然优先级中断源自然优先级PX0PT0PX1PT1PSIEIP

IE0高级中断请求低级中断请求中断源矢量地址送PC矢量地址送PC中断标志位中断源允许总允许中断优先级硬件查询

MCS-51的中断系统结构图

MCS-51的中断管理系统具有2个中断优先级和5个中断源,5个中断源对应6个中断请求标志。每个中断源对应一个中断开关,当某个中断请求标志有效时,CPU是否响应相应中断请求,由中断控制寄存器IE相应位决定,EA为中断总开关;具有2个中断优先级,任一中断优先级由IP对应编码确定。中断源中断优先级中断开关中断标志TCONSCONIPIE1.外部中断外部中断是指从单片机外部引脚、输入中断请求信号的中断,即外部中断源有两个。输入/输出的中断请求、实时事件的中断请求、掉电和设备故障的中断请求都可以作为外部中断源,从引脚、输入。外部中断请求有两种触发方式:电平触发及跳变(边沿)触发。这两种触发方式可以通过对特殊功能寄存器TCON编程来选择。图与中断功能有关的TCON寄存器位IE0(IE1):外部中断0(或1)的中断请求标志位。当IT0(或IT1)=0,即电平触发方式时,CPU在每个机器周期的S5P2采样 。若引脚为低电平,将直接触发外部中断。跳变触发方式时,若第一个机器周期采样到引脚为高电平,第二个机器周期采样到引脚为低电平时,标明在两次采样期间曾经产生了一个下降沿。IE0(或IE1)由硬件置位,并以此向CPU请求中断。当CPU响应中断转向中断服务程序时由硬件将IE0(或IE1)清零。2.内部中断内部中断是单片机芯片内部产生的中断。MCS-51单片机的内部中断有定时器/计数器T0、T1、的溢出中断,串行口的发送/接收中断。当定时器/计数器T0、T1、的定时或计数到由硬件自动置位TCON的TF0、TF1,便向CPU申请中断。CPU响应中断而转向中断服务程序时,由硬件自动将TF0或TF1清零,即CPU响应中断后能自动撤除中断请求信号。定时器/计数器0、1的中断请求以及跳变沿触发的外部中断请求,当由硬件清除了相应的中断请求标志后,自动撤除中断请求。当串行口发送完或接收完一帧信息,由接口硬件自动置位SCON的TI或RI,以此向CPU申请中断,CPU响应中断后,接口硬件不能自动将TI或RI清零,即CPU响应中断后不能自动撤除中断请求信号,需用户采用软件方法将TI或RI清零,来撤除中断请求信号。

TIRISCON的低2位锁存串行口的接收中断和发送中断标志,

TI:串行口发送中断标志。TI=1表示串行口发送器正在向CPU申请中断。值得注意的是当CPU响应该中断后,转向中断服务程序时并不复位TI,TI必须由用户在中断服务程序中用软件清0(可用CLRTI或其它指令)。

RI:串行口接收中断标志。RI为1表示串行口接收器正向CPU申请中断,同样RI必须由用户在中断服务程序中清0。7.1.3中断控制1.中断允许控制寄存器IE当某个中断发生时,相应的中断请求标志位置位,但该中断请求能否被CPU查询,由中断控制寄存器IE相应的位决定。中断控制寄存器IE各位含义由于IE寄存器具有按位寻址功能,因此可通过位操作指令,允许或禁止其中的任一中断,如:SETBEA ;开中断SETBEX0 ;允许中断CLRES ;禁止串行口中断例如当TCON的IT0位为0时,只要在S5P2相采样到P3.2引脚为低电平,则中断请求标志IE0就为1。但当EX0或EA之一为0时,CPU将不检查IE0的中断请求标志(即该中断请求被CPU忽略)。2.中断优先级控制寄存器IP增强型MCS-51内核CPU具有2个中断优先级,设置了中断优先级控制寄存器(0为低优先级;1为高优先级):中断优先级控制寄存器IP,寄存器各位含义如图所示:图中断优先级控制寄存器IP各位含义3.硬件查询顺序改变IP寄存器的值,即可使相应中断源优先权升高或降低。但MCS-51具有5个中断源,而只有2个中断优先级,这就必然存在两个或两个以上中断源优先级相同。为此,MCS-51约定当同一优先级中断请求有效时,CPU响应顺序为:外中断定时/计数器T0溢出中断外中断定时/计数器T1溢出中断串行口中断定时/计数器T2溢出中断1.中断响应条件MCS-51中断响应条件为:(1)当前不处于同级或更高级中断响应中。这是为了防止同级或低级中断请求中断同级或更高级中断。(2)当前机器周期必须是当前指令的最后一个机器周期,否则等待。执行某些指令需要两个或两个以上机器周期,如果当前机器周期不是指令的最后一个机器周期,则不响应中断请求,即不允许中断一条指令的执行过程,这是为了保证指令执行过程的完整性。(3)如果当前指令是中断返回指令RETI,或读写中断控制寄存器IE、优先级寄存器IP或IPH,则必须再执行一条指令后才能响应中断请求。如果不满足以上条件,将忽略该机器周期对中断标志的查询结果,下一机器周期继续查询,因此可能存在这样一种情况:某一中断发生了,不满足响应条件,CPU不响应,又出了新的中断请求,则尚未响应的中断请求将被忽略,因为每一中断源只有一个中断标志位,而CPU总是在每个机器周期的S5P2相检测中断源,设置中断标志。另外,在中断响应过程中,如果在M4周期的S6状态查询到优先级更高的中断标志为1(即在M2~M3机器周期内优先级更高的中断请求出现),在M5、M6机器周期将响应高优先级中断,而不执行低优先级中断服务程序。2.中断响应过程及中断服务程序入口地址如果满足中断响应条件,将进入中断响应过程:(1) CPU先将对应中断的优先级触发器置1,阻止CPU再响应同级或更低级中断请求。(2)将程序计数器PC当前值压入堆栈,以保证执行完中断服务程序后正确返回;并将相应中断源入口地址装入PC,以便执行中断服务程序。中断服务程序入口地址如下:中断源 入口地址外中断0 0003H定时/计数器T0溢出中断 000BH外中断1 0013H定时/计数器T1溢出中断 001BH串行口中断 0023H定时/计数器T2溢出中断 002BH由于各中断服务程序入口地址仅相隔8个字节,难以容纳中断服务程序,为此可在入口处放置一条长跳转指令,而实际的中断服务程序放在存储器区内的任意位置(一般放在主程序后),如下所示:ORG0003H LJMPINT0 ;在外中断入口处放一条长跳转指令ORG0100HMAIN: ;主程序……INT0: ;外中断的中断服务程序(3)清除中断请求标志。进入中断服务程序后,CPU能自动清除下列中断请求标志位:定时器T0中断请求标志TF0;定时器T1中断请求标志TF1;外中断的中断请求标志IE0;外中断的中断请求标志IE1。但不自动清除串行发送结束中断标志TI、串行接收有效中断标志RI。对于不能自动清除的中断请求标志,需要在中断服务程序中,用“CLR位地址”指令清除。(4)返回。中断服务程序最后一条指令是中断返回指令“RETI”,执行了中断返回指令RETI后,先将对应中断的优先级触发器清零(以便返回后CPU能够响应同级或更低级的中断请求),并将堆栈内的两个字节弹到程序计数器PC,以便从断点处继续执行被中断程序的后续指令。7.1.4中断初始化及中断服务程序

中断初始化是指通过设置TCON、IE及IP寄存器内容,确定外中断触发方式(低电平触发还是下降沿触发)、开中断、设置中断优先级等,例如可通过如下指令将定义为下降沿触发,优先级为最高,并允许中断:SETBIT0 ;外中断采用下降沿触发

SETBPX0 ;IP寄存器具有位寻址功能,SETBEX0 ;允许中断SETBEA;开中断中断服务程序结构与子程序类似,大致包含以下几部分:;必要时保护现场PUSHPSWPUSHAcc…SETBRS0 ;切换工作寄存器区,根据需要可使用0~3区中的任一区CLRRS1 ;由于中断出现的不确定性,因此只要中断服务程序中使用;了寄存器组R0~R7,就需要切换工作区…… ;中断服务程序体(略)CLR中断请求标志 ;对于不能自动清除中断请求标志的中断响应过程,需要通过指令清除中断请求标志,防止同一请求被多次响应POPAccPOPPSW ;恢复现场RETI ;中断返回指令(1)中断出现是随机的,可能出现,也可能不出现,更不知道什么会时候出现,即被中断程序的断点无法预测。而子程序的执行由调用指令LCALL或ACALL实现,只要满足特定条件,就一定会发生,断点由程序员控制。因此只要中断服务程序中出现写寄存器组R0~R7之一,就需要切换工作寄存器区:由于同级中断不能嵌套,因此同一优先级中断服务程序可以使用同一工作寄存器区;高优先级中断服务程序和低优先级中断服务程序一般不能使用同一工作寄存器区,除非两者不可能同时出现。(2)中断服务程序入口地址(也称为中断向量)由硬件决定,与CPU类型有关,不能更改。而子程序入口地址由用户安排。(3)子程序中可以任意调用另一子程序,但中断过程有优先级,同级或低级中断不能打断正在执行的同级或更高优先级中断服务程序。(4)尽管子程序返回指令RET和中断返回指令RETI均会将栈顶两个字节信息装入PC,恢复断点,但RETI还清除相应中断优先级触发器,因此中断返回指令不可用子程序返回指令RET代替。

例1:若规定外部中断1为边沿触发方式,优先级最低,在中断服务程序中将寄存器B的内容左环移一位,B的初值设为01H。试编写主程序与中断服务程序。解:程序如下ORG0000H;主程序LJMPMAIN;主程序转至MAIN处ORG0013H;中断服务程序LJMPINT;中断服务程序转至INT处MAIN:SETBEA;开中断SETBEX1;允许外中断1中断CLRPX1;设为低优先级SETBIT1;边沿触发MOVB,#01H;设B的初值HALT:SJMPHALT;暂停等待中断INT:MOVA,B;A←BRLA;左环移一位MOVB,A

;回送

RETI;中断返回现有这样的设计任务:当系统无故障时,3个故障源输入端X1~X3全为低电平,对应的三盏显示灯全灭;当某部分出现故障时,其对应的输入端由低电平变为高电平,且点亮对应的指示灯,提示该部分有故障产生。

例1利用故障引起8051单片机中断,在中断服务程序中判定故障源,并点亮对应的显示灯。P1.0P1.1P1.2P1.3P1.4P1.5INT08051+X1X2X3+5VRRRLED1LED2LED3ORG0000HAJMPMAINORG0003HAJMPSERVEMAIN:ORLP1,#0FFHSETBIT0SETBEX0SETBEASJMP$SERVE:JNBP1.0,L1CLRP1.3 SJMPL3L1:JNBP1.1,L2CLRP1.4SJMPL3L2:JNBP1.2,L3CLRP1.5L3:ORLP1,#07HRETIEND;外部中断0的入口;灯全灭;准备读入;选择边沿触发方式;允许外部中断0中断;CPU开中断;等待中断;若X1无故障,跳到L1;点亮LED1;若X2无故障,跳到L2;点亮LED2;若X3无故障,跳到L3;点亮LED3P1.0P1.1P1.2P1.3P1.4P1.5INT08051+X1X2X3+5VRRRLED1LED2LED3

例2若规定外部中断1为边沿触发方式,低优先级,在中断服务程序中将寄存器B的内容左环移一位,B的初值设为01H。试编写主程序与中断服务程序。解:程序如下

MAIN:SETBEA;开中断

SETBEX1;允许外中断1中断

CLRPX1;设为低优先级

SETBIT1;边沿触发

MOVB,#01H;设B的初值HALT:SJMPHALT;暂停等待中断INT:MOVA,B;A←B

RLA;左环移一位

MOVB,A;回送

RETI;中断返回ORG0000H;主程序

LJMPMAIN;主程序转至MAIN处

ORG0013H;中断服务程序入口

LJMPINT;转至INT处7.2MCS-51定时/计数器系统

在单片机应用系统中,常需要对外部脉冲进行计数或每隔特定时间执行某一操作,因此定时/计数器是单片机控制系统重要的外设部件之一,几乎所有单片机控制系统均有一个或几个定时/计数器。MCS-51系列单片机内置了2个16位的定时/计数器,分别称为T0、T1。定时/计数功能概述定时/计数器的核心部件是一个加法(或减法)计数器,可工作在定时方式或计数方式,因此称为定时/计数器。不过这两种工作方式没有本质的区别,只是计数脉冲来源不同而已:如果计数脉冲是频率相对稳定的系统时钟信号(一般是系统时钟的分频信号)时,则称为定时方式;反之,当计数脉冲取自I/O引脚的外部信号时,称为计数方式。单片机内定时/计数器属于可编程部件,除了加法计数器(部分单片机芯片采用减法计数器)外,尚有工作方式控制寄存器,一般具有如下特点:(1)工作方式寄存器。定时/计数器有多种定时或计数方式,使用前必须初始化工作方式寄存器,设置定时/计数器的工作方式(定时还是计数;硬件启动还是软件启动;计数长度——即作为16位计数器使用还是8位计数器使用等)。(2)可以从0开始计数,也可以从特定值开始计数,因此定时/计数器是一个可读写的寄存器,使用前一般需要设置定时/计数器的初值。(3)对于每来一个脉冲加1的定时/计数器,当计数器溢出时,可向CPU发出中断请求(定时时间到),以便CPU处理。

特点总结:(1)定时器/计数器可以是计数方式也可以是定时方式。(2)定时器/计数器的计数值是可变的,但计数的最大值是有限的,这取决于计数器的位数。计数的最大值也就限定了定时的最大值。(3)在到达设定的定时或计数值时发出中断申请,以便实现定时控制。

核心部件:16位加法器

定时器/计数器的核心是16位加法计数器,用特殊功能寄存器TH0、TL0及TH1、TL1表示。TH0、TL0是定时器/计数器0加法计数器的高8位和低8位,TH1、TL1是定时器/计数器1加法计数器的高8位和低8位。作计数器用时,加法计数器对芯片引脚T0(P3.4)、T1(P3.5)上的输入脉冲计数。每输入一个脉冲,加法计数器增加1。加法计数溢出时可向CPU发出中断请求信号。K1K2可预置初值计数器中断请求功能选择启动控制内部时钟脉冲(定时)外部输入脉冲(计数)溢出信号计数脉冲计数初值TF0/TF1TR0/TR1C/TTMOD控制字7.2.3定时/计数器T0、T1结构及控制1.定时/计数器的控制在MCS-51中,与定时/计数器T0、T1工作方式有关的寄存器为TMOD和TCON。其中TMOD控制定时/计数器T0、T1的工作方式,而TCON控制定时/计数器的启动和定时中断标志。

1)工作方式寄存器TMODTMOD寄存器各位含义定时/计数器工作方式

M1M0工作方式说明00方式0(不推荐)13位定时/计数器,主要是为了与Intel公司早期的MCS-48系列兼容,由TL0的低5位和TH0(8位)构成,装入初值要注意,容易出错。01方式1(常用)16位定时/计数器10方式2(常用)自动重装初值的8位定时/计数器11方式3定时/计数器T0可以工作于这一方式,相当于两个独立的8位定时/计数器。但T0工作于方式3时,占用了定时/计数器T1的部分资源,限制了T1的使用范围(在这种情况下,T1可作为串行口发送、接收波特率发生器)·——定时/计数方式选择。当位为0时,计数脉冲来自CPU内部分频器,计数脉冲频率是单片机的机器周期,即处于定时方式;当位为1时,计数脉冲来自P3.4引脚,即处于计数方式。

GATE——门控方式选择位

=0,非门控方式(内部启动):

TRx=1,启动定时器工作;

TRx=0,停止定时器工作。

=1,门控方式(外部启动):

TRx=1且引脚INTx=1才启动。2)控制字寄存器TCONTCON寄存器中与定时/计数器控制有关的位2.工作方式定时/计数器T0有四种工作方式(即方式0、方式1、方式2和方式3),主要用于定时和计数;定时/计数器T1有三种工作方式(即方式0、方式1和方式2),除了用作定时、计数外,T1还作为串行口的波特率发生器。值得注意的是,初始化时如果错将定时/计数器T1置为方式3,T1将停止工作。1)方式0(13位定时/计数器)THx8位和TLx低5位组成加1计数器。计数外部脉冲个数:1~8192(213)定时时间(若T=1s):1s~8.19ms如果定时器初值为M,则方式0的定时时间t为:

2)方式1(16位定时/计数器)定时/计数器T0(T1)方式1结构当位为0时,定时/计数器T0处于定时状态,计数脉冲是系统时钟信号的12分频器,即每隔12 / fOSC秒,TL0加1,当TL0溢出(如果TL0当前值为FFH,则再来一个脉冲,TL0将溢出,变为00)时,TH0自动加1;当TH0也溢出时,定时器T0中断标志TF0位置位1。如果定时器T0溢出中断开关ET0为1(即允许T0中断),将向CPU发出定时器溢出中断请求(CPU能否响应,取决于中断响应条件)。如果定时器初值为M,则方式1的定时时间t为:

【例7.1】假设晶振频率为12MHz,定时器工作于方式1,初值为9800 (即2648H),计算定时时间t。t==55736μs=55.736ms显然,当晶振频率为12MHz,定时器初值为0时,方式1定时时间最长为:tmax==65536μs【例7.2】定时器工作于方式1,假设晶振频率为12MHz,所需定时时间为10ms,计算定时器初值M。将定时时间10ms(即10000μs)、晶振频率12MHz代入,可得初值:即定时器初值TH0为0D8H,TL0为0F0H。当位为1时,定时/计数器T0处于计数状态,计数脉冲来自CPU的P3.4引脚。每来一个脉冲TL0加1,当TL0溢出时,TH0自动加1;当TH0也溢出时,计数器T0中断标志TF0位置1。3)方式2——自动重装的8位定时计数器定时/计数器T0(T1)方式2结构由于方式2的计数长度为8位,因此定时时间T与初值M之间关系为:显然,当晶振频率fOSC为12MHz时,“12时钟/机器周期”模式下方式2的最长定时时间为:4)方式3定时/计数器T0方式3结构T0工作在方式3下T1的结构(a)T1方式1;(b)T1方式2方式3只适用于定时器T0。当定时器T1处于方式3时相当于TR1=0,停止计数。当T0工作在方式3时,TH0和TL0被拆成2个独立的8位计数器。这时,TL0既可作为定时器使用,也可作为计数器使用,它占用了定时器T0所使用的控制位(C/、GATE、TR0、TF0),其功能和操作与方式0或方式1完全相同;而TH0只能作定时器用,并且占据了定时器T1的两个控制信号TR1和TF1。在这种情况下,定时器T1虽仍可用于方式0、1、2,但不能使用中断方式。

T0运行于定时器状态,时钟振荡周期为12MHZ,要求定时100s。求不同工作方式时的定时初值C。解:fosc=12MHz,T=1sX=100s/1s=(100)D=64H方式0(13位方式):C=(64H)求补=0000001100100B+1=1F9CH方式1(16位方式):C=(64H)求补=0000000001100100B+1=FF9CH方式2、3(8位方式):C=(64H)求补=01100100B+1=9CH注意:工作方式0的初值装入方法:1F9CH=0001111110011100B

可见,TH0=FCH,TL0=1CHTL0的低5位TH0的8位MOV TH0,#0FCHMOV TL0,#1CH例题7.2.5定时/计数器应用【例7.4】假设晶振频率为12MHz,试利用定时/计数器T0的方式2,在P1.7引脚输出周期为200μs的方波。分析:定时器工作方式2的最长定时时间为256μs,而方波周期为200μs,即方波高、低电平时间各为100μs,可令T0工作于方式2,定时时间设为100μs,定时时间到对P1.7引脚锁存器取反,即获得周期为200μs的方波。定时器T0初值M为:主程序中断服务程序参考程序如下:ORG0000HLJMPMAIN ;跳到主程序入口ORG000BHLJMPCTC0 ;定时器T0中断入口地址ORG100H

MAIN: MOVSP,#4FH ;初始化堆栈指针SP MOVA,TMOD ;为了不影响定时/计数器T1的工作状态, 先读出TMOD ANLA,#0F0H ;与F0H相与,使高4位不变,低4位清零 ORLA,#00000010B ;由TR0控制计数器开和关,GATE位为0 ;定时状态,M1M0为10,即方式2 MOVTMOD,A ;将工作方式控制字写入TMOD MOVTL0,#9CH ;送初值 MOVTH0,#9CH ;送重装初值 SETBET0 ;允许定时器T0中断 SETBEA ;开中断 SETBTR0 ;启动定时器T0HERE: SJMPHERE ;循环等待,相当于虚拟主程序;定时器T0的中断服务程序CTC0: CPLP1.7 RETI【例7.5】假设晶振频率为12MHz,试编写一程序,在P1.7引脚输出周期为2s的方波。分析:本例表面上与上例区别不大,只是方波周期长了,但我们知道当系统晶振频率为12MHz时,即使定时/计数器工作在方式1,最长定时时间也不过65.536ms,而目前需要在P1.7引脚上输出周期为2 s (高低电平时间为1 s)的方波,属于超长定时问题,除了使用定时器功能外,还要使用软件计数方法。要获得1s (即1000ms)的定时时间,可使用定时器T0方式1,定时时间可设为50ms,软件计数器初值为20。定时器T0溢出时,软件计数器减1,当软件计数器减到0时,就获得了1s的时间。具体程序如下:参考程序如下:TIMECONDATA28H ;把28H单元作为软件计数器ORG0000HLJMPMAIN ;跳到主程序入口ORG000BHLJMPCTC0 ;定时器T0中断入口地址ORG1000HMAIN: MOVSP,#4FH ;初始化堆栈指针SP MOVA,TMOD ;为了不影响定时/计数器T1的工作状态, 先读出TMOD ANLA,#0F0H ;与F0H相与,使高4位不变,低4位清零

ORLA,#00000001B ;由TR0控制计数器开和关,GATE位为0 ;定时状态,即位为0,M1M0为01,即方式1 MOVTMOD,A ;将工作方式控制字写入TMOD MOVTL0,#0B0H ;送初值 MOVTH0,#3CH ;定时时间为50ms(即50000μs), 初值为3CB0H SETBET0 ;允许定时器T0中断 SETBEA ;开中断 SETBTR0 ;启动定时器T0 MOVTIMECON,#14H ;软件计数器初值为14H(即20)HERE:SJMPHERE ;循环等待,相当于虚拟主程序;定时器T0的中断服务程序CTC0: MOVTL0,#0B0H ;重装定时器初值 MOVTH0,#3CH ;为了减少定时误差,进入中断服务后, 先重装定时器初值 DJNZTIMECON,NEXT ;软件计数器减1,不等于0,就返回 MOVTIMECON,#14H ;重装软件计数器初值CPLP1.7 ;对P1.7取反NEXT: RETI【例7.6】利用定时/计数器T1门控信号GATE功能,测量引脚上脉冲信号的宽度(单位为机器周期)。从定时/计数器T1结构可以看出:当GATE位为1时,计数脉冲开关状态由TR1和(即P3.3)引脚控制。因此,可令定时/计数器T1工作在方式1,并处于定时状态(即用频率稳定的时钟信号度量引脚上正脉冲宽度),参考程序如下: ORG0000H LJMPMAIN ;跳到主程序入口 ORG1000HMAIN: MOVSP,#4FH ;初始化堆栈指针SP ;初始化定时器T1(工作在方式1) MOVA,TMOD ;为了不影响定时/计数器T0的工作状态, 先读出TMOD ANLA,#0FH ;与0FH相与,使高4位清零,低4位保持不变 ORLA,#10010000B ;由和TR1共同控制计数器开和关,GATE位为1 ;定时状态,即位为0,M1M0为01,即方式1 MOVTMOD,A ;将工作方式控制字写入TMOD MOVTL1,#00H ;计数器初值为0 MOVTH1,#00HWAITL: JBP3.3,WAITL ;等P3.3引脚为低电平 SETBTR1 ;当P3.3引脚为低电平,即可启动计数器WAITH: JNBP3.3,WAITH ;等待P3.3引脚变高电平WAITHL: JBP3.3,WAITHL ;等待P3.3引脚正脉冲的下降沿 CLRTR1 ;关闭计数器T1第8章单片机接口技术8.1

程序存储器和数据存储器接口8.2

键盘及其接口8.3

显示器接口8.4打印机接口8.5

A/D转换接口8.6

D/A转换接口主要内容8.1.1存储器接口技术概述回顾第4章,MCS-51单片机的存储器数据存储器128B64KB程序存储器4KB64KB

8.1.2单片机的三总线结构为了使单片机能方便地与各种外围扩展芯片连接,通常将单片机的外部连线变为一般的3总线结构形式:

地址总线数据总线控制总线

MCS-51系列单片机,其3总线由下列通道口的引线组成:

地址总线:由P2口提供高8位地址线,此口具有输出锁存的功能。由P0口提供低8位地址线。数据总线:由P0口提供(P0口分时复用地址/数据总线)控制总线:扩展系统时常用的控制信号为ALE——地址锁存信号,用以实现对低8位地址的锁存——片外程序存储器选通信号——片外存储器读信号——片外存储器写信号图8-1单片机的3总线结构形式系统扩展的基本方法:扩展连接的方法实际上是三总线对接。地址总线数据总线控制总线地址总线数据总线控制总线对接对接对接单片机外围设备

1、8D锁存器74LS37374LS373是一种带输出三态门的8D锁存器,其结构示意图如图8-2所示。其中:1D~8D为8个输入端。1Q~8Q为8个输出端。G为数据打入端:当G为“1”时,锁存器输出状态(1Q~8Q)同输入状态(1D~8D);当G由“1”变“0”时,数据打入锁存器中。常用扩展器件简介图8-274LS373的结构示意图

图8-374LS373用作地址锁存器

P0口地址信息由ALE控制锁存,即在ALE由高变低时,74LS373锁存P0口地址,直到下一次ALE变高时才发生变化。ALE为低电平期间,P0口用作数据总线。2、总线驱动器74LS244,

74LS245

在单片机应用系统中,扩展的三总线上挂接很多负载,如存储器、并行接口、A/D接口、显示接口等,但总线接口的负载能力有限,因此常常需要通过连接总线驱动器进行总线驱动。总线驱动器对于单片机的I/O口只相当于增加了一个TTL负载,因此驱动器除了对后级电路驱动外,还能对负载的波动变化起隔离作用。

系统总线中地址总线和控制总线是单向的,因此驱动器可以选用单向的,如74LS244。74LS244还带有三态控制,能实现总线缓冲和隔离。其内部有8个三态驱动器,分成两组,分别由控制端和控制。系统中的数据总线是双向的,其驱动器也要选用双向的,如74LS245。74LS245有16个三态驱动器,每个方向8个。在控制端有效时(为低电平),由DIR端控制驱动方向DIR=1时输出(An→Bn),DIR=0时输入(An←Bn)。74LS244和74LS245的引脚图如图8-4所示。

图8-4总线驱动器芯片管脚图3、3—8译码器74LS1383—8译码器74LS138为一种常用的地址译码器芯片,其管脚图如图8-5所示。其中G1、,,为控制端,只有当G1为“1”且,均为“0”时,译码器才能进行译码输出。否则译码器的8个输出端全为高阻状态。译码输入端与输出端之间的译码关系如表所示。具体使用时,G1、与既可直接接至+5V端和地,也可参与地址译码。但其译码关系必须为100。需要时也可通过反相器使输入信号符合要求。图8-574LS138管脚图

8.1.3程序存储器扩展图8-62764与8031的连接图

一般来说,存储器芯片的地址线数目经常少于单片机地址总线的数目,如此相接后,单片机的高位地址线总有剩余。剩余地址线一般作为译码线,译码输出与存储器芯片的片选信号线相接。对存储器芯片访问时,片选信号必须有效,即选中存储器芯片。

存储器芯片的选择有两种方法:线选法和译码法。1.线选法线选法,就是直接以系统的地址线作为存储器芯片的片选信号。2.译码法译码法就是使用地址译码器对系统的片外地址进行译码,以译码输出作为存储器芯片的片选信号。

译码法又分为完全译码和部分译码两种。

(1)完全译码

地址译码器使用了剩余全部地址线,地址与存储单元一一对应,也就是1个存储单元只占用1个唯一的地址。(2)部分译码

所谓部分译码就是存储器芯片的地址线与单片机系统的地址线顺次相接后,剩余的高位地址线仅用一部分参加译码。在设计地址译码器电路时,如果采用地址译码关系图的话,将会带来很大的方便。所谓地址译码关系图,就是一种用简单的符号来表示全部地址译码关系的示意图。例如:.0100XXXXXXXXXXXA15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0从地址译码关系图上可以看出以下几点:①属完全译码还是部分译码;②片内译码线和片外译码线各有多少根;③所占用的全部地址范围为多少。例如在上面的关系图中,有1个“·”(A15不接),表示为部分译码。片内译码线有11根(A10~A0),片外译码线有4根。其所占用的地址范围如下:当A15为0时,所占用地址为0010000000000000~0010011111111111,即2000H~27FFH。当A15为1时,所占用地址为1010000000000000~1010011111111111,即A000H~A7FFH。共占用了两组地址,这两组地址在使用中同样有效。重叠的地址范围中真正能存储信息的只有一个,其余仅是占据,因而会造成浪费。这是部分译码的缺点。它的优点是译码电路简单。

线选法编址采用线选法编址,以P2.7(A15)直接作为片选信号,当P2.7=0时,选中左边1片2764,其地址范围为0000H~1FFFH;当P2.7=1时,选中右边1片2764,其地址范围为8000H~9FFFH。这是部分译码,有2根地址线未接,1个单元要占用22=4个地址号。以上只是4组地址中的1组。若需地址连续的话,可取地址:6000H~7FFFH和8000H~9FFFH。左片:00000000000000000~0001111111111111,即0000H~1FFFH;

00100000000000000~0011111111111111,即2000H~3FFFH;

01000000000000000~0101111111111111,即4000H~5FFFH;

01100000000000000~0111111111111111,即6000H~7FFFH;右片:10000000000000000~1001111111111111,即8000H~9FFFH;

10100000000000000~1011111111111111,即A000H~BFFFH;

11000000000000000~1101111111111111,即C000H~DFFFH;

11100000000000000~1111111111111111,即E000H~FFFFH。全部可取地址为:(3)采用地址译码器的多片程序存储器的扩展。例:要求用2764芯片扩展8031的片外程序存储器空间,分配的地址范围为0000H~3FFFH。解:采用完全译码的方法,每单元只占用唯一的1个地址①确定片数:片数=(末地址-首地址)+1芯片字节数=(3FFFH-0000H)+12000H=4000H2000H=2(片)②分配地址范围:第1组(1片)所占用的地址范围为:00000000000000000000H……00011111111111111FFFH第2组(1片)所占用的地址范围为:00100000000000002000H……00111111111111113FFFH

③画出地址译码关系图:第1组

000XXXXXXXXXXXXXP2.7P2.6P2.5P2.4P2.0P0.7P0.0(A15)(A14)(A13)(A12)(A8)(A7)(A0)001XXXXXXXXXXXXX第2组8.1.4数据存储器扩展数据存储器的扩展与程序存储器的扩展相类似,不同之处主要在于控制信号的接法不一样,不用信号,而用和信号,且直接与数据存储器的和端相连即可。图为外扩1片6264的连接图。采用线选法,将片选信号与P2.7相连,片选信号CE2与P2.6相连。地址范围不唯一,6000H~7FFFH是一种地址范围。当向该片6000H单元写一个数据DATA时,可用如下指令:MOVA,#DATAMOVDPTR,#6000HMOVX@DPTR,A从7FFFH单元读一个数据时,可用如下指令:MOVDPTR,#7FFFHMOVXA,@DPTR利用E2PROM28C17A扩展数据存储器28C17A是2KB的电可擦除可编程只读存储器,在写入一个字节的指令码或数据之前,自动对所要写如单元进行擦除,从这个意义上讲,使用28C17AE2PROM相当于静态RAM。RDY/BUSY为写结束输出,当一个字节写入操作完成,该脚自动置高电平。80C51P2.7P1.0P2.2...P2.0P0.7...P0.0ALERDPSEND7...D0A7...A0A10...A828C17ACED0...D7Q0...Q774LS373GOEOERDY/BUSYWR+5VEAWEOE将00H~FFH值分别写入7F00H~7FFFH中

ORG0100HSTART:MOVDPTR#7F00HMOVA,#00HLOOP:MOVX@DPTR,AWAIT:JNBP1.0,WAITINCDPTRINCAJNZLOOPRET

8.2键盘及其接口键盘实际上是由排列成矩阵形式的一系列按键开关组成,它是单片机系统中最常用的人机联系的一种输入设备。用户通过键盘可以向CPU输入数据、地址和命令。键盘按其结构形式可分为编码式键盘和非编码式键盘两大类。编码式键盘是由其内部硬件逻辑电路自动产生被按键的编码。这种键盘使用方便,但价格较贵。

单片机系统中普遍使用非编码式键盘。这类键盘应主要解决以下几个问题:

(1)键的识别;(2)如何消除键的抖动;在以上几个问题中,最主要的是键的识别。R14.7KK+5V8051P1.0当K没有按下时,P1.0输入为高电平;当K按下(闭合)时,P1.0输入为低电平。

机械触点的弹性作用,使一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因此在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间,一般为5~10ms消除键抖动电路

硬件上可利用单稳态电路或RS触发器来消除。但单片机系统中通常采用软件延时方法来实现。软件消除抖动8.2.3独立式非编码键盘直接用I/O口构成按键电路,每个按键独立占有一条I/O线BEGIN:MOVA,#0FFHMOVP1,A;输入时,先置P1口全为1MOVA,P1;键状态输入JNBACC.0,G0;0号键按下,转G0JNBACC.1,G1;1号键按下,转G1JNBACC.2,G2JNBACC.3,G3JNBACC.4,G4JNBACC.5,G5JNBACC.6,G6JNBACC.7,G7;7号键按下,转G7JMPBEGIN;无键按下返回G0:LJMPPROG0;入口地址表,下同G1:LJMPPROG1G2:LJMPPROG2G3:LJMPPROG3G4:LJMPPROG4G5:LJMPPROG5G6:LJMPPROG6G7:LJMPPROG78.2.4行列式非编码键盘

行列式键盘又叫矩阵式键盘,是用一些I/O接口线组成行结构,用另一些I/O接口线组成列结构,其交叉点处不接通,设置为按键。利用这种行列结构只需M条行线和N条列线,就可组成具有M×N个按键的键盘。矩阵式键盘的工作原理矩阵式键盘识别闭合键通常有两种方法:一种称为行扫描法,另一种称为线反转法。1)行扫描法所谓行扫描法,就是通过行线发出低电平信号,如果该行线所连接的键没有按下的话,则列线所连接的输出端口得到的是全“1”信号;如果有键按下的话,则得到的是非全“1”信号。图非编码式键盘行扫描法的工作原理(a)无键按下;(b)有键按下;(c)扫描第0行;(d)扫描第1行;(e)扫描第2行;(f)扫描第3行图非编码式键盘行扫描法的工作原理(a)无键按下;(b)有键按下;(c)扫描第0行;(d)扫描第1行;(e)扫描第2行;(f)扫描第3行图非编码式键盘行扫描法的工作原理(a)无键按下;(b)有键按下;(c)扫描第0行;(d)扫描第1行;(e)扫描第2行;(f)扫描第3行

具体过程如下:

首先,为了提高效率,一般先快速检查整个键盘中是否有键按下;其次,再用逐行扫描的方法来确定闭合键的具体位置。方法是:先扫描第0行,即输出1110(第0行为“0”,其余3行为“1”),然后读入列信号,判断是否为全“1”。

2)线反转法线反转法也是识别闭合键的一种常用方法。该方法比行扫描法速度要快,但在硬件电路上要求行线与列线均需有上拉电阻,故比行扫描法稍复杂些。

先将行线作为输出线,列线作为输入线,行线输出全“0”信号,读入列线的值,然后将行线和列线的输入输出关系互换,列线输出全“0”,再读取行线的输入值。这样,当一个键被按下时,必定可读到一对唯一的行列值。键号N=行首键号+列号=8+3=11开始返回有键闭合否?调用子程序延迟12msY有键闭合否?判断闭合键键号闭合键释放否?键号送入ANYNNYP1口输出00H,读P0口状态,若P0.0~P0.3全1则无键按下;P1.7~P1.0依次输出FEH、FDH、FBH、F7H、EFH、DFH、BFH、7FH。读P0口状态,若P0.3~P0.0为全1,则列线输出为0的这一列上没有键闭合;否则,这一列上有键闭合。中断方式图8-23采用中断扫描方式的键盘接口电路根据图中键盘按键排列规则,中断扫描方式参考程序如下(键值存放在30H单元中,无效按键时30H为AA):ORG0000HLJMPMAINORG0013HLJMPINT1

ORG0100HMAIN:CLRIT1 ;采用低电平触发SETBPX1 SETBEX1 MOVP1,#0FH ;P1.7~P1.4输出低电平,将P1.3~P1.0

置为高电平,以便作为输入引脚使用SETBEA MOVSP,#5FH INT1: PUSHPSW PUSHACC SETBRS0 SETBRS1 LCALLDELAY10 MOVA,P1 ANLA,#0FH XRLA,#0FH JZEXIT ;如果延迟10ms后,P1.3~P1.0引脚为高, 属于无效按键,退出

MOVR2,#11101111B;从P1.4引脚开始扫描,用11101111B作扫描码,这 ;样通过循环左移即可使P1.4~P1.7引脚输出低电平, ;同时送P1口时又能使P1.3~P1.0输出高电平MOVR3,#00H ;初始化扫描次数LOOP: MOVP1,R2 MOVA,P1 CPLA ;由于P1.3~P1.0中被按下为低电平,取反后为高 ANLA,#0FH ;屏蔽高4位。A=01H,表示P1.0引脚被按下; ;A=02H,表示P1.1引脚被按下;A=04H,表示P1.2 ;引脚被按下;A=08H,表示P1.3引脚被按下 ;A=00,表示对应列无按键。此外表示两键同时被按下

JNBAcc.0,K1 MOVR4,#00H ;P1.0引脚被按下,R4=00 SJMPSETNOK1: JNBAcc.1,K2 MOVR4,#01H ;P1.1引脚被按下,R4=01 SJMPSETNOK2: JNBAcc.2,K3 MOVR4,#02H ;P1.2引脚被按下,R4=02 SJMPSETNOK3: JNBAcc.3,NEXT ;本列无按键,退出 MOVR4,#03H ;P1.3引脚被按下,R4=03SETNO:;计算按键值 MOVA,R3 ;扫描次数送A RLA RLA ;扫描次数乘4 ADDA,R4 ;4×R3+R4就是键值 MOV30H,A ;保存键值。SJMPWAIT

NEXT: INCR3 ;扫描次数+1 MOVA,R3 CLRC SUBBA,#04H JNCEXIT ;扫描了所有按键均未发现,退出 MOVA,R2 RLA ;扫描码左环移一位 MOVR2,A LJMPLOOP ;循环扫描,直到R3等于4WAIT:;等待按键释放

MOVP1,#0FH MOVA,P1 ANLA,#0FH XRLA,#0FH JNZWAIT SJMPRETURNEXIT: MOV30H,#0AAH ;将键盘缓冲区置为AAHRETURN: CLRIE1 ;清除中断标志 POPAcc POPPSW RETIEND8.3显示器接口单片机应用系统中常用的显示器LED(LightEmittingDiode)——发光二极管显示器LCD(LiquidCrystalDisplay)——液晶显示器8.3.1LED数码管图8-32LED数码显示管从LED数码管结构可以看出,不同笔段的组合就可以构成不同的字符,例如当笔段a、b、c、d、e、f被点亮时,就可以显示数字“0”;又如笔段a、b、c、d、g被点亮就显示数字“3”。理论上,七个笔段可以显示128种不同的字符,扣除其中没有意义的组合状态后,七段LED数码管可以显示的字符如表所示。依据显示驱动方式的不同,可将LED数码显示电路分为静态显示方式和动态显示方式。a段为最低位,dp点为最高位LED显示器显示方式——静态显示方式连接每个LED的8根段选线(输出字型)分别连接一个8位并行I/O口,从该I/O口送出相应的字型码显示字型。特点:显示亮度强,无闪烁;占用I/O资源较多——动态显示方式连接所有LED的段选线连接在一起共用一个8位I/O口,每个LED的位选分别由一根相应的I/O口线控制。因此必须采用动态扫描显示方式,每一个时刻只选通其中一个LED,同时在段选口送出该位LED的字型码。

动态显示方式是利用人眼对视觉的残留效应,采用动态扫描显示的方法,逐个地循环点亮各位数码管,每位显示1ms左右,使人看起来就好象在同时显示不同的字符一样。逐位扫描显示方式从段选口送出某位LED的字型码,然后选通该位LED,并保持一段延时时间。然后选通下一位,直到所有位扫描完。1.字型码通常通过查表指令MOVC来求得2.位选通信号共阴极送低电平,共阳极送高电平3.段选码、位选码每送入一次延时1~5ms,以保证一定的亮度注意动态显示子程序:DIS: MOV R0,#7EH MOV R2,#01H ;初始位码 MOV A,R2LP0: MOV P0,A ;送位码 MOV A,@R0 MOV DPTR,#TAB MOVC A,@A+DPTR ;查段码 MOV P1,A ;送段码 ACALL D1MS DEC R0 MOV A,R2 JB ACC.6,LP1 ;6位是否显示完? RL A MOV R2,A AJMP LP0LP1: RETTAB: DB 3FH,06H,5BH, DB 4FH,66H,6DHD1MS: MOV R7,#02HDL: MOV R6,#0FFH DJNZ R6,$ DJNZ R7,DL RET

液晶显示器概述按显示内容分类

字段式(或称为笔划式)

点阵字符式

点阵图形式

通常有7段、8段、9段、14段、16段等,主要用来显示数字、西文字母或某些字符,这与LED数码管相似。主要有5×8、5×11等点阵块组成,主要用来显示字符、数字、符号等。在平面上排成多行多列的晶格阵列,可以显示图形和汉字等复杂信息。液晶显示形式LCD:液晶显示器件,包括前后偏振片在内的液晶显示器件,简称LCD。LCM:液晶显示模块,包括组装好的线路板、LCD驱动和控制电路及其附件,英文名称叫“LCDModule”,简称LCM。Vss:+5V电源管脚(Vcc)VDD:地管脚(GND)Vo:液晶显示驱动电源(0V~5V)DB0~DB7:数据线,可以用8位连接,也可以只用高4位连接。A:背光控制正电源K:背光控制地RS:数据和指令选择控制端,RS=0:命令/状态;RS=1:数据R/W:读写控制线,R/W=0:写操作;R/W=1:读操作E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据交换。LCD液晶显示器接口技术(字符型)

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块LCD液晶显示器接口技术(字符型)

12345678910111213141516VSSVDDVORSR/WEDB0DB1ADB3DB2DB5DB4DB7DB6KLCD模块单片机与LCD模块之间四种基本操作控制:

写命令读状态写显示数据读显示数据RSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示内容)11读数据操作(可以把显示存储区中的数据反读出来)8.5A/D转换接口学习目标:

了解A/D转换接口的功能、性能参数理解ADC0809的结构和工作原理掌握ADC0809和单片机的接口应用放大器放大器现场信号1放大器多路开关传

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论