第四章定时/计数技术4.1基本概念一、问题的提出:1.定时例如:①一天24小时的计时(称为日时钟)。②在监测系统中,对被测点的定时取样。③在读键盘时,为去抖,一般延迟一段时间,再读。④在步进电机速度控制程序中,利用时间间隔来控制步进电机的转速。2.计数例如:①对零件和产品的计数;②对大桥和高速公路上车流量的统计,等等。二、定时的方法为获得所需要的定时,要求有准确而稳定的时间基准,产生这种时间基准通常采用两种方法----软件定时和硬件定时。1.软件定时运用软件编程,循环执行一段程序而产生的等待延时。优点:不需增加硬,只需编制相应的延时程序以备调用。缺点:CPU执行延时待时间增加了CPU的时间开销,延时时间越长,这种等待开销越大,降低了CPU的效率,浪费了CPU的资源。2.硬件定时它是采用单稳延时电路产生定时或延时。如:555定时器3.可编程定时计数器定时优点:①不占用CPU的时间,定时时间长,使用灵活。②定时准确,定时时间不受主机频率影响,定时程序具有通用性,故得到广泛应用。如Intel8253/8254,Zilog的CTC等。一、外部特性与内部逻辑1、外部特性(1)定时/计数器8253/8254是24脚双列直插式芯片,+5V电源供电。(2)每个芯片内部有3个独立的16位减法计数器,通过编程选择计数器和设置工作方式,计数器既可作计数器用,也可作定时器用,故称定时/计数器,记作T/C。4.2可编程定时/计数器8253/8254①数据总线D0~D7:为三态输出/输入线。用于将8253与系统数据总线相连。②片选线CS-:为输入信号,低电平有效。③读信号RD-:为输入信号,低电平有效。④写信号WR-:为输入信号,低电平有效。⑤地址线A1A0:这两根线接到系统地址总路线的A1A0上。面向I/O设备的信号线:⑥计数器时钟信号CLK:CLK为输入信号。⑦计数器门控选通信号GATE0-2:为输入信号。⑧计数器输出信号OUT0-2;为输出信号。2、引脚的功能定义;D08OUT010D17GATE011D26CLK09D35D44D53D62OUT113D71GATE114CLK115CS21RD22WR23OUT217A019GATE216A120CLK218U482538253、8254读写操作及端口地址CSRDWRA1A0操作PC微机实验平台01000加载T/C0(向计数器0写入“计数初值”)40H304H01001加载T/C1(向计数器1写入“计数初值”)41H305H01010加载T/C2(向计数器2写入“计数初值”)42H306H01011向控制器寄存器写“方式控制字”43H307H00100加载T/C0(从计数器0读出“当前计数值”)40H304H00101加载T/C1(从计数器1读出“当前计数值”)41H305H00110加载T/C2(从计数器2读出“当前计数值”)42H306H00111无操作三态1××××禁止三态011××无操作三态2.内部逻辑结构数据总线缓冲器:它是一个三态、双向8位寄存器,用于将8253与系统数据总线D0~D7相连。读/写逻辑。控制命令寄存器:它接受CPU送来的控制字。数据总线缓冲器读/写逻辑控制命令寄存器计数器0计数器1计数器2CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2D0~D7A0A1RDWRCS图4.2定时/计数器8253/8254内部框图内部总线计数器:8253有3个独立的计数器(计数通道),计数器由16位初值寄存器、减1计数器和当前计数值锁存器组成。16位当前计数值锁存器16位减1计数器16位计数初值寄存器锁存后读出当前值LSBMSB&CLKGATE装入/读出初值LSBOUT图4.3计数通道内部逻辑图计数初值寄存器(16位):用于存放计数初值(定时常数、分频系数),最大计数值为65536(64KB)。在初始化时同时一起装入的,计数初值寄存器的计数初值,在计数器计数过程中保持不变。减1计数器(16位):用于进行减1计数操作,每来一个时钟脉冲,它就作减1运算,直至将计数初值减为零。当前计数值锁存器(16位):用于锁存减1计数器的内容,以供读出和查询。三、读写操作及编程命令1.方式命令的作用主要是对8253进行初始化,初始化的工作有两点:(1)向命令寄存器写入方式命令,以选择计数器(3个计数器之一),确定工作方式(6种方式之一),指定计数器计数初值的长度和装入顺序以及计数值的码制(BCD或二进制码)。(2)向已选定的计数器按方式命令的要求写入计数初值。D7D6D5D4D3D2D1D0计数器选择读写字节数工作方式码制2.方式命令的格式方式命令的格式如下所示:①D7D6(SC1SC0):用于选择计数器SC1SC0=00选择0号计数器SC1SC0=01选择1号计数器SC1SC0=10选择2号计数器SC1SC0=11不用②D5D4(RL1RL0):用来控制计数器读/写的字节数(1或2个字节)及读/写高低字节的顺序。RL1RL0=00为锁存命令RL1RL0=01仅读/写一个低字节RL1RL0=10仅读/写一个高字节RL1RL0=11读/写2个字节,先是低字节,后是高字节D7D6D5D4D3D2D1D0计数器选择读写字节数工作方式码制④D0(BCD):用来指定计数器的码制,是按二进还是按二~十进制数计数。BCD=0二进制BCD=1二~十进制③D3~D1(M2~M0):用来选择计数器的工作方式。M2M1M0=0000方式M2M1M0=0011方式M2M1M0=0102方式M2M1M0=0113方式M2M1M0=1004方式M2M1M0=1015方式(110和111不用)例1:选择2号计数器,工作在3方式,计数初值为533H(2个字节),采用二进制计数。其初始化程序段为:MOVDX,307H;命令口MOVAL,10110110B;2号计数器的初始化命令字OUTDX,AL;写入命令寄存器MOVDX,306H;2号计数器数据口MOVAX,533H;计数初值OUTDX,AL;选送低字节到2号计数器MOVAL,AH;取高字节送ALOUTDX,AL;后送高字节到2号计数器方波发生器3.读当前计数值在事件计数器的应用中,需要读出计数过程中的当前计数值,以便根据这个值做计数判断。例2:要求读出并检查1号计数器的当前计数值是否是全“1”(假定计数值只有低8位),其程序段为MOVDX,307H;命令口L:MOVAL,01000000B;1号计数器的锁存命令OUTDX,AL;写入命令寄存器MOVDX,305H;1号计数器数据口INAL,DX;读1号计数器的当前计数值CMPAL,0FFH;比较JNEL;非全“1”,再读HLT;是全“1”,暂停四、工作方式及特点8253/8254芯片的每个计数器通道都有6种工作方式可供选用。1.0方式-----低电平输出(GATE信号上升沿继续计数)图3.48253的0方式时序波形n=5n=5CLKOUTWRWRGATEOUTWROUT①②③543210543210n=998n=4432100方式有如下3个特点:当向计数器写完计数值后,开始计数,计数一旦开始,输出端OUT就变成低电平,并在计数过程中一直保持低电平,当计数器减到零时,OUT立即变成高电平。门控信号GATE为高电平时,计数器工作;当GATE为低电平时,计数器停止了工作,其计数值保持不变。如果门控信号GATE再次变高时,计数器从中止处继续计数。在计数器工作期间,如果重新写入新的计数值,计数器将按新写入的计数初值重新工作。例1:使计数器T1工作在0方式,进行16位二进制计数,计数初值的高低字节分别为BYTEH和BYTEL。其初始化程序段为:MOVDX,307H;命令口MOVAL,01110000B;方式字OUTDX,ALMOVDX,305H;T1数据口MOVAL,BYTEL;计数值低字节OUTDX,ALMOVAL,BYTEH;计数值高字节OUTDX,AL2.1方式----低电平输出(GATE信号上升沿重新计数)1方式为可编程的单稳态工作方式。图3.58253的1方式时序波形n=4n=3CLKGATEWROUTOUTWROUT①②③43210432132n=210210GATE40GATE情况一:1.写入计数初值后,计数器并不立即开始工作;2.门控信号GATE有效,才开始工作,使输出OUT变成低电平;3.直到计数器值减到零后,输出才变高电平。情况二:1.在计数器工作期间,当GATE又出现一个上升沿时,计数器重新装入原计数初值并重新开始计数,见图见图3.5中②。2.如果工作期间对计数器写入新的计数初值,则要等到当前的计数值计满回零且门控信号再次出现上升沿后,才按新写入的计数初值开始工作,见图3.5所示③。例2:使计数器T2工作在1方式,进行8位二进制计数,并设计数初值的低8位为BYTEL。其初始化程序段为MOVDX,307H;命令口MOVAL,10010010B;方式字OUTDX,ALMOVDX,306H;T2数据口MOVAL,BYTEL;低8位计数值OUTDX,AL图3.68253的2方式时序波形n=4n=3CLKWROUTOUTWROUT①②③432101321321020(4)(0)GATEWRn=4n=3334320(3)213113.2方式-----周期性负脉冲输出2方式是一种具有自动装入时间常数(计数初值)的N分频器。例3:使计数器T0工作在2方式,进行16位二进制计数。其初始化程序段为MOVDX,307H;命令口MOVAL,00110100B;方式字OUTDX,ALMOVDX,304H;T2数据口MOVAL,BYTEL;低8位计数值OUTDX,ALMOVAL,BYTEL;高8位计数值OUTDX,AL图3.78253的3方式时序波形CLKWROUTOUT①②WR2n=4n=532222324.3方式----周期性方波输出3方式工作方式与2方式基本相同,也具有自动装入时间常数(计数初值)的功能。不同之处在于:(1)工作在3方式,引脚OUT输出的不是一个时钟周期的负脉冲,而是占空比为1:1或近似1:1的方波;当计数初值为偶数时,输出在前一半的计数过程中为高电平,在后一半的计数过程中为低电平。(2)由于3方式输出的波形是方波,并且具有自动重装计数初值的功能,因此,8253一旦计数开始,就会在输出端OUT输出连续不断的方波。5.4方式-----单次负脉冲输出(软件触发)4方式工作方式是一种由软件启动的闸门式计数方式,即由写入计数初值来触发计数器开始工作。门控信号GATE为高电平时,允许计数器工作。例4:使计数器T1工作方式4方式,进行8位二进制计数,并且只装入高8位计数值。其初始化程序段为:MOVDX,307H;命令口MOVAL,00110100B;方式字OUTDX,ALMOVDX,304H;T2数据口MOVAL,BYTEL;低8位计数值OUTDX,AL图3.88253的4方式时序波形CLKWROUTOUT①②WR5n=54201321GATE554320OUTn=3310210n=2③6.5方式------单次负脉冲输出(硬件触发)5方式工作特点是由GATE上升沿触发计数器开始工作。在5方式工作方式下,当写入计数初值后,计数器并不立即开始计数,而要由门控信号的上升沿启动计数。在计数过程中(或者计数结束后),如果门控再次出现上升沿,计数器将从原装入的计数初值重新计数。图3.98253的5方式时序波形CLKWROUTOUT①②n=4GATE543210GATE54543210小结:6种工作方式的比较0方式(门控单稳)和1方式(门控单稳),这两种方式的输出波形类似。2方式(分频器)和3方式(方波发生器),这两种方式共同的特点是具有自动再加载功能(装入)能力。二者的区别在于:2方式在计数过程中输出高电平,而在每当减1至0时输出宽度为1个TCLK的负脉冲。3方式是在计数过程中,OUT的信号是占空比为1:1的方波或近似方波。4方式(软件触发单脉冲)和5方式(硬件触发单脉冲)。这两种