12020/3/1授课教师:殷代红制作者:殷代红邮箱:yindh07@sina.com22020/3/1第五章定时与计数器32020/3/15.1概述5.1.1定时与计数问题的提出定时与计数是计算机经常面临的工作,它不仅应用在计算机内部,同时,也广泛应用在各种不同领域的实际系统中,如定时中断、定时检测、定时扫描等等,还有些场合要求能对外部事件计数。实现定时与计数的方法通常有两种:软件方法和硬件方法。软件方法:通过用户编制的程序来完成,如延时子程序,软件定时占用CPU,降低了CPU的利用率。硬件方法:通过完全的硬件连接或软/硬件的结合来完成,包含简单硬件定时和可编程硬件定时两种方式。简单硬件定时可以采用小规模集成电路器件(例如555),外接部分定时部件(电阻和电容)构成。这样的定时电路简单而且通过改变电阻和电容,可以使定时在一定的范围内改变,但不能由指令来控制和改变。可编程定时器电路的定时值及其范围,可以很容易地由软件来确定和改变,所以使用灵活,功能更强。42020/3/15.1.2端口的概念接口电路:微机可以通过接口电路接收外部设备送来的信息或将信息发送给外部设备。分类:可以提供使微机正常工作所需要的辅助电路;输入/输出接口电路包括并行接口、串行接口、专用接口等,提供CPU与接口直接进行操作的“通道”每个部件或接口内部都包含有一组寄存器,这些寄存器通常称为端口,每个端口有一个端口地址。52020/3/1端口通常分为三类:用来传输数据的称为数据端口;用来存放设备或者部件状态的称为状态端口;用来存放CPU发出的命令的称为控制端口。CPU通过数据端口完成数据传输,因此,数据端口一般是可读可写的;CPU通过状态端口可以检测外设和接口部件当前的状态,因此,状态端口一般是只读的;CPU通过控制端口传输命令以便控制接口和设备的动作,因此,控制端口一般是只写的。62020/3/15.2可编程定时器/计数器8253一、计数/定时的工作原理计数/定时的功能•对外部事件发生次数进行计数•计算机系统经常用到定时信号,如DRAM刷新定时计数和定时本质上是相同的,它们都是对一个输入脉冲进行计数,如果输入脉冲的频率一定,那么记录脉冲的个数与所需的时间是一一对应的关系。例如输入脉冲频率为2MHz,那么计数2106计时1秒使用同一个芯片,既能计数,又能定时——定时器/计数器72020/3/1一、计数/定时的工作原理控制寄存器初始值寄存器计数器计数输出寄存器状态寄存器CLKGATEOUT组成:控制寄存器——决定工作模式状态寄存器——反应工作状态初值寄存器——计数的初值计数输出寄存器——CPU从中读当前计数值计数器——执行计数操作,CPU不能访问82020/3/1一、计数/定时的工作原理工作原理:对CLK信号进行减1计数首先,CPU把控制字写入控制寄存器,计数初始值写入初值寄存器计数从初值开始,每当CLK信号出现一次,计数值减1当计数值减到0,从OUT端输出规定的信号CLK信号出现时,计数器是否减1,由门控信号GATE控制92020/3/15.2.18253的功能与结构1.8253的主要功能⑴有3个独立的16位计数器通道。⑵每个计数器都可以按照二进制或二—十进制(BCD码)计数。⑶每个计数器的计数速率可高达2MHz。⑷每个通道有6种工作方式,可由程序设置和改变。⑸所有的输入输出都与TTL兼容。102020/3/1一、计数/定时的工作原理CLK是计数输入信号,计数器对CLK端出现的脉冲个数进行计数•CLK端可以输入外部事件•CLK端可以接入固定频率的时钟信号,从而实现计时OUT信号在计数结束时发生变化•可将OUT作为外部设备的控制信号•可将OUT作为向CPU申请中断的信号CPU可以从计数输出寄存器读出当前计数值。读前,应向控制寄存器发送锁存命令112020/3/1二、8253的内部结构1片8253内部有三个计数器,结构完全相同8253的内部结构8253的内部结构如图5-2所示,主要由以下部分组成:(1)数据总线缓冲器(2)读/写控制逻辑。(3)控制字寄存器。(4)计数器0,计数器1,计数器2。122020/3/1(1)数据总线缓冲器。是8253与CPU数据总线连接的8位、双向、三态缓冲器。CPU用输入输出指令对8253进行读写的所有信息都是通过该缓冲器传送的,内容包括:•CPU在初始化编程时写入8253的控制字。•CPU向8253的某一通道写入的计数值。•CPU从某一个通道读取的计数值。132020/3/1(2)读/写控制逻辑。8253内部操作的控制部分。它接收输入的信号.实现片选、内部通道选择(见表5-1)以及对相关端口的读/写操作。CSCSCSA1A0端口00通道001通道110通道211控制端口142020/3/1(3)控制字寄存器。在对8253进行初始化编程时,该寄存器存放由CPU写入的控制字,由此控制字来决定所选中通道的工作方式。此寄存器只能写入不能读出。(4)计数器0,计数器1,计数器2。是三个独立的计数器/定时器通道,各自可按不同的工作方式工作。152020/3/13.8253的引脚功能8253的引脚按功能可分为两组:一组面向三总线数据总线、控制总线和地址总线,另一组面向外部操作。CLK、GATE、OUT162020/3/15.2.28253的初始化编程对8253某一通道的初始化编程涉及两个内容:首先向控制端口写入通道控制字,由此控制字确定选中哪个通道、采用什么工作方式和计数方式、如何写入计数初值等内容,然后向选中的通道端口写入计数初值。172020/3/11.8253的控制字182020/3/18253的编程命令初始化1)写入控制字2)按控制字要求写入计数初值计数器初值计算:N=fCLK/fOUT例:设三个计数器的端口地址为70H、71H、72H,控制端口地址73H。计数器0,工作模式2,仅使用低8位,初值为100,计数值使用二进制。MOVAL,14HOUT73H,ALMOVAL,100OUT70H,AL192020/3/18253的编程命令例:设三个计数器的端口地址为70H、71H、72H,控制寄存器端口地址73H。计数器1,工作模式1,使用16位,初值为1234,计数值使用BCDMOVAL,73HOUT73H,ALMOVAX,1234HOUT71H,ALMOVAL,AHOUT71H,AL202020/3/13.读取通道当前的计数值8253任一通道的当前计数值,CPU都可用输入指令读取。8253的通道计数器是16位的,要分两次读至CPU,为避免在CPU的两次读出过程中出错,在进行读出操作前必须对相应通道进行锁存,锁存的办法有两种:①利用GATE信号使计数过程暂停。②向8253的控制口写入一个令通道锁存器锁存的控制字。例:设三个计数器的CR/OL端口地址为70H、71H、72H,控制寄存器端口地址73H。读出计数器0的当前计数值,放在BX中MOVAL,0HOUT73H,ALINAL,70HMOVBL,ALINAL,70HMOVBH,AL212020/3/15.2.38253的工作方式工作方式决定以下内容:1)门控信号的影响高电平允许,当GATE=0,即使出现CLK,也不计数——方式0,2,3,4上升沿允许(上升沿触发)——方式1,52)OUT信号的状态写入控制字后,OUT的状态计数过程中,OUT的状态计数终了,OUT的状态3)计数操作可否重复不可重复——方式0,4自动重复——方式2,3条件重复——方式1,5222020/3/18253的工作方式六种工作方式计数初值写入初值寄存器后,要经过一个CLK输入后才开始计数(或,经过一个CLK后,计数初值才到达计数执行部件)计数器在CLK的下降沿使计数值减1232020/3/18253的工作方式方式0:计数初值写入CR后,OUT由0到1跳变出现在n+1个时钟脉冲之后延迟时间TD=(n+1)TCLK方式1:单脉冲宽度T=nTCLK方式2:对输入端n个时钟脉冲,在输出端仅出现一个时钟脉冲——N分频计数器242020/3/18253的工作方式方式3:例:计数器工作方式3,计数器初值15,时钟脉冲频率为2MHz,确定OUT端输出方波的特性。解:TCLK=1/2MHz=500ns计数器初值15为奇数,输出分频波高电平宽度TCLK(N+1)/2=4s输出分频波低电平宽度TCLK(N-1)/2=3.5s方式4、5:触发后n+1个时钟脉冲之后输出端产生选通脉冲信号252020/3/18253的工作方式例:计数器0工作方式4,初始化计数器,使装入计数器10s后产生选通信号(设时钟频率2MHz,8253端口地址为50H~53H)。解:n+1=T/TCLK=10/0.5=20n=19=13HMOVAL,18HOUT53H,ALMOVAL,13HOUT50H,AL262020/3/15.2.48253的应用例2在以8088CPU为核心的系统中,扩展一片8253芯片,要求通道0对外部脉冲进行计数,计满400个脉冲后向CPU发出一个中断请求,完成软硬件设计。分析:首先完成硬件设计。8253与系统总线的连接如下:272020/3/1题目要求的输出波形经分析选择方式0。计数初值为400确定控制字:00110000B初始化程序:MOVAL,30HOUT03H,AL;控制字写入控制口MOVAX,400;二进制形式的数据OUT00H,AL;先写低8位,写入通道0MOVAL,AHOUT00H,AL;后写高8位,写入通道0282020/3/15.2.48253的应用1.以2MHz输入8253,实现每5秒定时中断(设8253端口地址40H~43H)分析:8253最大初值65536,CLK=2MHz可实现最大时间间隔65536/(2106)=32.769ms所以需要两个计数器串联,一个计数器的输出作为另一个计数器的输入292020/3/18253的应用计数器1:方式2,OUT1每5ms输出一个脉冲初值(2106)/(1/0.005)=10000计数器0:方式2,OUT0每5s输出一个脉冲初值(1/0.005)/(1/5)=1000OUT0GATE0CLK0OUT1GATE1CLK1+5V+5V2MHz每5秒产生一个脉冲302020/3/18253的应用程序:MOVAL,74HOUT43H,ALMOVAX,10000OUT41H,ALMOVAL,AHOUT41H,ALMOVAL,74HMOVAL,34HOUT43H,ALMOVAX,1000OUT40H,ALMOVAL,AHOUT40H,AL312020/3/1作业1.什么叫端口?端口通常有哪几种?各有什么特点?2.试说明8253的内部结构包括哪几个主要功能模块?3.8253芯片共有几种工作方式?每种工作方式各有什么特点?4.若选用8253通道2,工作在方式1,按二进制计数,计数值为5432。设端口地址为D8H~DBH,完成初始化编程。如果计数值改为65536呢?如果此时又增选8253通道0,工作在方式0,按BCD码计数,计数值为2000,再完成对通道0的初始化编程。5.设8253的端口地址同4,编写程序片段,读出计数器2的内容,并把读出的数据装入寄存器AX.6.设计数器的时钟输入频率为1.91MHz,为产生25KHZ的方波输出信号,应向计数器装入的计数初值为多少?。