资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第八章,可编程定时/计数器8253,实现定时或延时控制有三种方法:,软件定时:,即让,CPU,执行一段不完成任何其他功能的程序段,由于执行每条指令都需要时间,则执行一个程序段就需要一定的时间,通过改变指令执行的循环次数来控制定时时间,不可编程硬件定时器:,采用中小规模器件,外接定时元件,电阻和电容构成。,可编程硬件定时器:,就是其工作方式、定时值和定时范围可以很容易由软件来确定和改变。计数器一旦开始工作后,,CPU,就可以去做别的工作了,等计数器计到预定时间,便自动形成一个输出信号,用来向,CPU,提出中断请求。这种方法不但显著提高了,CPU,的利用率,而且定时时间由软件设置,使用十分灵活,加上定时时间精确,使用十分广泛。,可编程定时器/计数器8253,一、,8253,的,内部结构和功能,二、,8253,的,引脚功能,三、,8253,的,工作方式,四、,8253,应用,举例,8253可编程定时器/计数器的主要性能:,有,3,个独立的,16,位计数器,工作方式可编程控制,计数脉冲频率,02,MHz,可以按二进制或,BCD,码计数,使用单一,+5,V,电源,0,1,2,一、8253的内部结构和功能,在初始化编程时用于寄存在CPU写入的控制字以决定各通道的工作方式。此寄存器只能写入不能读出。,当用8253作外部事件计数器时,在CLK脚上所加的计数脉冲是由外部事件产生的,这些脉冲的间隔可以是不相等的。如果用它作定时器,则CLK引脚上应数入精确的时钟脉冲,这时8253所能实现的定时时间=计数脉冲周期预置的计数初值,读写逻辑接收来自系统总线的控制信号,以产生控制整个器件工作的控制信号。,这个八位的三态、双向缓冲器用于将8253与系统总线相连,接收CPU输出的方式控制字或计数初值,发送CPU从计数器读出的计数值。,控制端口地址为2A3H,计数到零后,不能自动恢复计数初值,OUT输出端保持高电平。,21所示,试编程完成以上工作。,计数器能够连续工作,输出OUT是输入CLK的n(初值)分频。,计数器一旦开始工作后,CPU就可以去做别的工作了,等计数器计到预定时间,便自动形成一个输出信号,用来向CPU提出中断请求。,OUT0OUT2:计数器02的输出,其输出,MOV DX,312H;,如果是二字节数,则在写入第一个字节时停止计数;,GATE=1,允许计数;,通道1方式字,先读写低字节,后高字节,方式1,BCD计数,对控制寄存器设置控制字,设8253-5端口地址为2F0H、2F2H、2F4H、2F6H。,计数过程中,外部的GATE触发沿提前到来,则下一个CLK脉冲下降沿,计数器开始重新计数,这将使输出单稳脉冲比原先设定的计数值加宽了。,二、8253的引脚功能,D,7,D,0,:,双向三态数据线,CPU用输入、输,出指令对8253进行读/写操作的信息都经8,位数据总线传送。,CLK,0,CLK,2,:,计数输入,要求加在CLK引脚,的时钟脉冲频率不大于2MHz。,GATE,0,GATE,2,:,门控输入,当GATE引脚为,低时,禁止计数器工作;只有GATE引脚为,高时,才允许计数器工作,OUT,0,OUT,2,:,计数器02的输出,其输出,波形取决于工作方式,A,1,、A,0,:,寻址3个计数器和控制寄存器(三,个计数器的控制寄存器共用一个端口地址),RD、WR和CS:,分别为读、写和片选信号,,均为低电平有效,A,1,A,0,寄存器选择及其操作,0,1,0,0,0,对计数器0置计数初值,0,1,0,0,1,对计数器1置计数初值,0,1,0,1,0,对计数器2置计数初值,0,1,0,1,1,对控制寄存器设置控制字,0,0,1,0,0,从计数器0读出计数值,0,0,1,0,1,从计数器1读出计数值,0,0,1,1,0,从计数器2读出计数值,0,0,1,1,1,无操作(,D,7,D,0,三态),1,禁止(,D,7,D,0,三态),0,1,1,无操作(,D,7,D,0,三态),RD,WR,CS,8253的端口选择,三、8253的工作方式,1、,控制字寄存器,2、工作方式,方式,0,计数结束中断方式,方式,1,可重复触发的单稳态触发器,方式,2,频率发生器(,n,分频器),方式,3,方波发生器,方式,4,软件触发的选通信号发生器,方式,5,硬件触发的选通信号发生器,1.8253控制字寄存器,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,SC,1,SC,0,RL,1,RL,0,M,2,M,1,M,0,BCD,BCD=1,时,采用BCD码计数,写入计数器的初值用BCD码表示,初值范围为,00009999H,,其中,0000,表示最大值10000,即10,4,。如预制初值n=1200H时,表示一个十进制数1200。,BCD=0,时,采用BCD码计数,写入计数器的初值用二进制数表示,初值范围为,0000FFFFH,,其中,0000,表示最大值65536,即2,16,。如预制初值n=1200H时,表示一个十进制数4608。,方式0:计数结束中断,4,3,2,1,0,n,CLK,OUT,GATE,(n=4),INTR,方式0的工作特点:,计数到零后,不能自动恢复计数初值,,OUT,输出端保持高电平。,计数过程中,如果,GATE=0,,,则暂停计数,直到,GATE,变高后再接着计数。,在计数过程中可改变计数值。若是,8,位计数,写入新的计数值后,计数器按新值开始计数;若是,16,位计数,写入第一个字节后,计数器停止计数,在写入第二个字节后,按新的初值计数。,(m=5),3,2,1,0,4,5,INTR,A,B,方式1:,可重复触发的单稳态触发器,4,3,2,1,0,CLK,OUT,GATE,(n=4),(m=5),5,4,3,2,4,5,3,2,1,0,单脉冲宽度,单脉冲宽度,方式1的工作特点:,可重复触发。计数到零后,不用再次送计数值,只要给它触发脉冲,即可产生一个同样宽度的单稳脉冲。,计数过程中,若装入新的计数初值,则当前输出不受影响。只有再次触发后,计数才开始按新值输出脉冲宽度。,计数过程中,外部的,GATE,触发沿提前到来,则下一个,CLK,脉冲下降沿,计数器开始重新计数,这将使输出单稳脉冲比原先设定的计数值加宽了。,例,方式2:频率发生器(n分频器),方式2的工作特点:,计数器写入控制字和计数初值后,如,GATE,一直处于高电平,那么,在下一个脉冲开始计数器计数。,不用重复置数。计数器能够连续工作,输出,OUT,是输入,CLK,的,n,(,初值)分频。,计数过程可由,GATE,信号控制。,GATE,变低将使计数暂停且,OUT,立即为高;在,GATE,变高后的下一个,CLK,下降沿计数器重新从初值开始计数。,计数过程中可改变初值。如果,GATE,一直处于高电平,则重装计数初值不影响现行计数过程;下一个过程,才按新值计数。,CLK,OUT,GATE,4,3,2,1,0,n=4,n=3,3,2,1,3,4,3,2,1,1,0,4,0,4,3,2,0,重复周期,方式3:方波发生器,4,4,CLK,OUT,GATE,4,2,0,2,4,n=4,n=5,4,2,4,5,2,0,0,0,4,5,4,2,0,重复周期,2,0,重复周期,5,4,特点,:,当计数初值,n,为偶数时,每个,CLK,脉冲使计数值减,2,,当计到零时,一方面使输出改变状态,另一方面,又重新装入计数值、开始新的计数。当,n,为奇数时,且,OUT,为高时,第一个脉冲使计数减,1,,然后依次减,2,;当,OUT,为低时,先使计数减,3,,然后依次减,2,。,GATE=1,,,允许计数;,GATE=0,,,禁止计数。如果在输出为低期间,,GATE=0,,,输出将立即变高,停止计数;当,GATE,变高后,计数器将重新装入初值并开始计数。,例,方式4:软件触发的选通信号发生器,CLK,OUT,GATE,OUT,n=4,n=4,4,3,2,1,0,4,3,2,1,0,4,特点,:,只计数一次,GATE=1,,,允许计数;,GATE=0,,,禁止计数。,在计数过程中改变计数初值,则按新计数值重新开始计数。如果是二字节数,则在写入第一个字节时停止计数;写入第二个字节后,按新的计数初值开始计数。,方式5:硬件触发的选通信号发生器,CLK,GATE,GATE,OUT(n=4),OUT(n=4),4,3,2,1,0,4,3,4,3,2,1,0,写入控制字后,输出为高。写入计数初值后并不立即开始计数,而是由,GATE,信号的脉冲上升沿触发启动。当计数到零后时,输出一个,CLK,周期宽度的负脉冲,然后输出变高,停止计数。直至下次,GATE,脉冲的触发才能计数。,在计数过程中,外部的,GATE,触发沿提前到来,则下一个,CLK,脉冲下降沿,计数器开始重新计数。,例,8253工作方式特点:,方式0,,在写入控制字后,输出端即变低,计数结束后,输 出端由低变高,常用该输出信号作为中断源。,方式1,,用来产生单脉冲。,方式2,,用来产生序列负脉冲,每个负脉冲的宽度与CLK脉冲 的周期相同。,方式3,,用来产生连续的方波。方式2和方式3都实现对时钟 脉冲进行n分频。,方式4和方式5的,波形相同,都在计数器回0后,从OUT端输出 一个负脉冲,其宽度等于一个时钟周期。,方式0、1和4,计数初值装进计数器后,仅一次有效。方式2,3和5,在减1计数到0值后,8253会自动将计数值重装进计数器。,启动计数器的触发方式,软件触发方式,:,只要,GATE,信号为高电平,在写入计数初值后的下一个,CLK,脉冲的下降沿到来时,计数初值从计数初值寄存器送到减,1,计数器中,启动计数。,硬件触发方式:,即写入计数初值后,计数器并不开始计数。而是在,GATE,信号上升沿到来后的第一个,CLK,下降沿到来时,才将计数初值从计数初值寄存器送到减,1,计数器中,启动计数。,在六种工作方式中属于软件触发方式的有方式,0,和方式,4,,属于硬件触,发方式的有方式,1,和方式,5,。,注意:,方式,2,和方式,3,既可用于软件触发,也可用于硬件触发。具体地讲,在计数过程中,若,GATE,变为低电平,计数器停止计数。在,GATE,正跳变后,重新启动计数并从计数初值开始,因此当计数通道用作对外部事件计数时,,GATE,正跳变可用作对外部事件的同步控制信号,四、8253应用举例,1.初始化编程,2.读取8253的计数值,3.应用举例,1.初始化编程,初始化编程:,刚接通电源时,诸如8253之类的可编程外围接口芯片通常都处于未定义状态,在使用之前,必须用程序把他们初始化为所需的特定模式,这个过程称为初始化编程。,初始化步骤:,(1)写入控制字,用输出指令向控制字寄存器写入一个控制字,以选定计数器通道,规定该计数器的工作方式和计数格式。写入控制字还起到复位作用,使输出端out变为规定的初始状态,并使计数器清0,(2)写入计数初值,用输出指令向选中的计数器端口地址中写入一个计数初值,初值设置时要符合控制字中有关格式的规定。初值可以是8位数据,也可以是16位数据。,GATE=1,允许计数;,实现定时或延时控制有三种方法:,写入第二个字节后,按新的计数初值开始计数。,计数到零后,不能自动恢复计数初值,OUT输出端保持高电平。,初始化编程:刚接通电源时,诸如8253之类的可编程外围接口芯片通常都处于未定义状态,在使用之前,必须用程序把他们初始化为所需的特定模式,这个过程称为初始化编程。,具体地讲,在计数过程中,若GATE变为低电平,计数器停止计数。,而是在GATE信号上升沿到来后的第一个CLK下降沿到来时,才将计数初值从计数初值寄存器送到减1计数器中,启动计数。,方式1:可重复触发的单稳态触发器,方式4:软件触发的选通信号发生器,此时,采用通道级连的办法,将通道1的输出OUT1作为通道2的输入脉冲。,控制端口地址为2A3H,计数过程中,若装入新的计数初值,则当前输出不受影响。,发方式的有方式1和方式5。,IN AL,DX ;,周期为4ms的脉冲作为通道2的输入,要求输出端OUT2的波形为方波且周期为4s,因此通道2应工作于方式3,计数初值为1000。,CLK0CLK2:计数输入,要求加在CLK引脚,0,1,0,0,1,1,0,0,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,计数器0,先写低8位,再写高8位,方式1,二进制计数,例:对计数器0初始化。工作与方式1,按二进制计数,计数值为5080H。,确定控制字:,计数值低8位为,80H,,,高8位为,50H,。设端口,地址为,2A0H2A3H,,,则初始化程序为:,MOV DX,2A3H ;控制端口地址为2A3H,MOV AL,32H ;00110010B,OUT DX,AL ;送方式控制字到控制寄存器,MOV DX,2A0H ;计数器0端口地址为2A0H,MOV AL,80H,OUT DX,AL ;先写低8位计数值到计数器,MOV AL,50H,OUT DX,AL ;再写高8位计数值到计数器0,2.读取8253的计数值,;命令控制字送控制口,;读取计数器0低8位数据,当8253计数值是16位时,CPU要分两次读入,通常做法有两种:,(1)利用GATE信号使计数过程暂停,(2)利用命令控制字(SC1 SC0,00,0000B)将待读计数值锁存至其锁存器,这种方法不能影响计数过程。,注意,控制字应写入控制端口。CPU读取此锁存器后,锁存自动解除。,例:读取计数器0的 16位计数值,采用锁存器锁存方式,其程序为:,MOV AL,00H,MOV DX,2A3H,OUT DX,AL,MOV DX,2A0H,IN AL,DX,XCHG AL,AH ;暂存AH,IN AL,DX ;读取计数器0高8位数据,XCHG AL,AH ;AX中为计数器0的16位计数值,3、应用举例,用,8253,产生各种定时波形,控制,LED,的点亮或熄灭,8253初始化方法:,控制字,计数初值:,n=定时时间t,时钟频率fc,=定时时间t/时钟脉冲周期Tc,如:f,c,=1MHZ,,最大计数初值:65536,一个定时器最大定时时间:,N/f,c,=65536/10,6,在某个以8086为CPU的系统中使用了一块8253芯片,,8253的4个端口地址分别为310H、312H、314H、和316H,所用的时钟脉冲频率为1MHZ。要求3个计数通道分别完成以下功能:,(1)通道0工作于,方式3,,输出频率为2KHZ的方波;,(2)通道1产成宽度为480us的,单脉冲,;,(3)通道2用,硬件方式触发,,输出单脉冲,时间常数为26。,用8253产生各种定时波形,在GATE正跳变后,重新启动计数并从计数初值开始,因此当计数通道用作对外部事件计数时,GATE正跳变可用作对外部事件的同步控制信号,OUT DX,AL ;,8253可编程定时器/计数器的主要性能:,计数器能够连续工作,输出OUT是输入CLK的n(初值)分频。,GATE=1,允许计数;,MOV DX,2A3H,MOV DX,2A0H,MOV AL,20H;,控制LED的点亮或熄灭,D7 D6 D5 D4 D3 D2 D1 D0,MOV AL,00H;,通道2方式字,只读写低字节,方式5,BCD计数,通道1控制字,只读/写高8位,BCD计数制,地址为2A0H2A3H,,CALL DL6s;,(1)定时脉宽:,MOV AL,00100111B,;通道0初始化程序,MOV DX,316H,;控制口地址,MOV AL,00110111B,;通道0控制字,先读写低字节,后高字节,方式3,BCD计数,OUT DX,AL,;写入方式字,MOV DX,310H,;通道0口地址,MOV AL,00H,;低字节,OUT DX,AL,;先写入低字节,MOV AL,05H,;高字节,OUT DX,AL,;后写入高字节,对三个通道的初始化程序,;通道1初始化程序,MOV DX,316H,MOV AL,01110011B,;通道1方式字,先读写低字节,后高字节,方式1,BCD计数,OUT DX,AL,MOV DX,312H,;通道1口地址,MOV AL,80H,;低字节,OUT DX,AL,MOV AL,04H,;高字节,OUT DX,AL,;通道2初始化程序,MOV DX,316H,MOV AL,10011011B,;通道2方式字,只读写低字节,方式5,BCD计数,OUT DX,AL,MOV DX,314H,;通道2口地址,MOV AL,26H,;低字节,OUT DX,AL,;只写入低字节,控制LED的点亮或熄灭,例:用8253来控制一个LED发光二极管的点亮和熄灭,要求点亮10秒钟后再让它熄灭10秒钟,8253的各端口地址为81H、83H、85H和87H。,初始化程序,MOV AL,00110101B,;通道0控制字,先读写低字节,后高字节,方式3,BCD计数,OUT 87H,AL,MOV AL,00H;,计数初值低字节,OUT 81H,AL,MOV AL,50H,;计数初值高字节,OUT 81H,AL,MOV AL,01110111B,;通道1控制字,先读写低字节,后高字节,方式3,BCD计数,OUT 87H,AL,MOV AL,00H;,计数初值低字节,OUT 83H,AL,MOV AL,80H,;计数初值高字节,OUT 83H,AL,例 用8253监视一个生产流水线,每通过100个工件。蜂鸣器响6s。频率为1000HZ。,硬件连接:硬件接口示意图如图所示,工件从光源与光敏电阻之间通过时,在晶体管的发射极上会产生一个脉冲,此脉冲作为8253计数通道0的计数脉冲,当通道0计数满100后,由OUT0输出负脉冲,经反相后作为8259A的一个中断请求信号,在中断服务程序中,启动8253计数通道1工作,由OUT1连续输出1000HZ的方波,持续6s后停止输出。,控制字设置:通道0计数器工作于方式2,采用BCD计数,因计数初值为100,采用RL1RL010(读/写计数器的高8位),则方式控制字为00100101B。,通道1计数器工作于方式3,CLK1接2MHZ时钟,要求产生1000HZ的方波,则计数初值应为200000010002000,采用RL1RL0=10(只读/写高8位),BCD计数,则方式控制字为01100111B。,程序编制:假设8253通道0的地址为40H,通道1的地址为42H,控制口地址为46H。8255A的A口地址为80H,工作于方式0输出。,则主程序为:,MOV AL,25H;通道0初始化,OUT 46H,AL,MOV AL,01H;计数初值高8位,低8位自动清零,OUT 40H,AL,STI;开中断,LOP:HLT;等待中断,JMP LOP,中断服务程序为:,MOV AL,01H;通道1的GATE1置1,启动计数,OUT 80H,AL,MOV AL,67H;通道1初始化,OUT 46H,AL,MOV AL,20H;计数初值高8位,低8位自动清零,OUT 42H,AL,CALL DL6s;延时6s,MOV AL,00H;通道1的GATE1置0,停止计数,OUT 80H,AL,;向8259A发中断结束命令,IRET,例 8253通道2接有一发光二极管,要使发光二极管以点亮2s,熄灭2s的间隔工作,8253各通道端口地址分别为40H、42H、44H、46H,其电路硬件图如图10.21所示,试编程完成以上工作。,根据要求8253通道2输出一个周期为4s的方波。从图10.21可知通道1的CLK1输入时钟周期为1,s,若通道1工作为定时,其输出最大定时时间为165536,s,仅为65.5ms,因而使用一个通道达不到定时时间4s的要求。此时,采用通道级连的办法,将通道1的输出OUT1作为通道2的输入脉冲。,8253的通道1工作于方式2,其输出端OUT1的输出为相对于1MHZ频率的分频脉冲,若选定OUT1输出脉冲周期为4ms,则通道1的计数初值应为4000。周期为4ms的脉冲作为通道2的输入,要求输出端OUT2的波形为方波且周期为4s,因此通道2应工作于方式3,计数初值为1000。通道1的控制字为01100101B,通道2的控制字为10100111B。,由于计数初值的低8位0,因此采用只读/写高8位的方法,初始化程序如下:,MOV AL,65H;通道1控制字,只读/写高8位,BCD计数制,OUT 46H,AL,MOV AL,0A7H;通道2控制字,只读/写高8位,BCD计数制,OUT 46H,AL,MOV AL,40H;通道1计数初值高8位,低8位自动置0,OUT 42H,AL,MOV AL,10H;通道2计数初值高8位,低8位自动置0,OUT 44H,AL,例 某系统利用8253-5定时器/计数器通道0产生1KHz的重复方波,问通道0应工作在什么工作方式?若CLK0=2MHz,试写出通道0的初始化程序。设8253-5端口地址为2F0H、2F2H、2F4H、2F6H。,解:(1)因为只有方式3可产生重复方波,所以计数通道0应工作在方式3。,(2)首先计算计数初值:,N=(2*10,6,)/(1*10,3,)=2000,其次确定方式控制字,由于采用BCD计数,只读/写高八位,因而方式控制字为00100111B。,最后编写程序。注意:由于端口地址为2F0H、2F2H、2F4H、2F6H,是16位地址,因此必须采用端口寻址中的DX寄存器间接寻址。程序如下:,MOV DX,2F6H;通道0初始化,MOV AL,00100111B,OUT DX,AL,MOV DX,2F0H;写入计数初值高8位,低8位自动清零,MOV AL,20H,OUT DX,AL,例 将8253的三个计数器级连,假设时钟输入为1MHz,画出级连图,并求:,一、各计数器均取最大计数初值,8253的各计数器的定时脉 宽为多少?,二、要求得到毫秒,秒,时三种定时脉宽,计数器的初值为,多少?,(1)定时脉宽:,定时器0:T=65536*1us,定时器1:T=65536*65536,定时器2:T=65536*65536*65536,(2)初值,N0=1ms/1us=1000,N1=1s/1ms=1000,N2=3600s/1s=3600,作业,8-1,8-3,8-4,
展开阅读全文