资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,微机原理及接口技术,主编,梁建武,中国水利水电出版社,5.2,定时,/,计数器控制接口技术,定时控制在微机系统中极为重要,定时器由数字电路中的计数电路构成,通过记录高精度晶振脉冲信号的个数,输出准确的时间间隔,计数电路如果记录外设提供的具有一定随机性的脉冲信号时,它主要反映脉冲的个数(进而获知外设的某种状态),常又称为计数器,定时功能的实现方法,在微机应用系统中,经常会有这样的应用要求:一种是要求有一些外部实时时钟,以实现延时控制或定时;另一种是要求能对外部事件计数的计数器。在微机系统中,常采用一下三种方法实现:软件定时,不可编程硬件定时和可编程硬件定时。,软件延时,利用微处理器执行一个延时程序段实现,不可编程的硬件定时,采用分频器、单稳电路或简易定时电路控制定时时间,可编程的硬件定时,软件硬件相结合、用可编程定时器芯片构成一个方便灵活的定时电路,5.2.1 8253/8254,定时计数器,3,个独立的,16,位计数器通道,每个计数器有,6,种工作方式,按二进制或十进制(,BCD,码)计数,8254,是,8253,的改进型,1.8253/8254,的内部结构和引脚,D,7,D,0,计数器,0,控制字,寄存器,计数器,1,计数器,2,内,部,数,据,总,线,数据总线,缓冲器,读写控制,逻辑,RD,WR,A,0,A,1,CS,CLK,0,GATE,0,OUT,0,CLK,1,GATE,1,OUT,1,CLK,2,GATE,2,OUT,2,计数器结构示意图,预置寄存器,GATE,CLK,OUT,减,1,计数器,输出锁存器,计数初值存于,预置寄存器,;,在计数过程中,,减法计数器,的值不断递减,,而预置寄存器中的预置不变。,输出锁存器,用于写入锁存命令时,,锁定当前计数值,计数器的,3,个引脚,CLK,时钟输入信号,在计数过程中,此引脚上每输入一个时钟信号(下降沿),计数器的计数值减,1,GATE,门控输入信号,控制计数器工作,可分成电平控制和上升沿控制两种类型,OUT,计数器输出信号,当一次计数过程结束(计数值减为,0,),,OUT,引脚上将产生一个输出信号,2.,与处理器接口,D,0,D,7,数据线,A,0,A,1,地址线,RD*,读信号,WR*,写信号,CS*,片选信号,CS*A,1,A,0,I/O,地址,读操作,RD*,写操作,WR*,0 0 0,0 0 1,0 1 0,0 1 1,40H,41H,42H,43H,读计数器,0,读计数器,1,读计数器,2,无操作,写计数器,0,写计数器,1,写计数器,2,写控制字,5.2.2 8253/8254,的工作方式,8253,有,6,种工作方式,由方式控制字确定,熟悉每种工作方式的特点才能根据实际应用问题,选择正确的工作方式,每种工作方式的过程类似:,设定工作方式,设定计数初值,硬件启动,计数初值进入减,1,计数器,每输入一个时钟计数器减,1,的计数过程,计数过程结束,方式,0,计数结束产生中断,GATE,OUT,CLK,0,3,1,2,4,4,方式,0,WR,设,定,工,作,方,式,设,定,计,数,初,值,计,数,值,送,入,计,数,器,计,数,过,程,计,数,结,束,方式,1,可编程单稳态触发器,设,定,工,作,方,式,设,定,计,数,初,值,硬,件,启,动,计,数,值,送,入,计,数,器,计,数,过,程,计,数,结,束,GATE,OUT,CLK,0,3,1,2,4,4,方式,1,WR,方式,2,频率发生器(分频器),0,3,1,2,4,GATE,OUT,CLK,4,方式,2,0,3,1,2,4,0,3,1,2,4,0,3,1,2,4,WR,方式,3,方波发生器,0,3,1,2,4,GATE,OUT,CLK,4,方式,3,0,3,1,2,4,0,3,1,2,4,0,3,1,2,4,WR,方式,4,软件触发选通脉冲,GATE,OUT,CLK,0,3,1,2,4,4,方式,4,2,2,3,3,3,1,0,WR,方式,5,硬件触发选通脉冲,GATE,OUT,CLK,0,3,1,2,4,4,方式,5,2,2,3,3,3,1,1,0,WR,工作方式,GATE,引脚输入状态所起的作用,OUT,引脚,输出状态,低电平,下降沿,上升沿,高电平,方式,0,禁止计数,暂停计数,置入初值后,WR,上升沿开始计数,由,GATE,的上升沿继续计数,(,软触发 单次),允许计数,计数过程中输出低电平。计数至,0,输出高电平,方式,1,不影响,不影响,置入初值后,,GATE,的上升沿开始计数,或重新开始计数。,(,硬触发 单次),不影响计数,输出宽度为,n,个,CLK,的低电平(单次),方式,2,禁止计数,停止计数,置入初值后,,WR,上升沿开始计数,由,GATE,的上升沿重新开始计数,(,软触发 循环),允许计数,输出宽度为,n,个,CLK,宽度为,1,个,CLK,的负脉冲,方式,3,禁止计数,停止计数,置入初值后,,WR,上升沿开始计数,由,GATE,的上升沿重新开始计数,(,软触发循环),允许计数,输出宽度为,n,个,CLK,的方波(重复波形),方式,4,禁止计数,停止计数,置入初值后,,WR,上升沿开始计数,由,GATE,的上升沿重新开始计数,(,软触发 单次),允许计数,计数至,0,,输出宽度为,1,个,CLK,的负脉冲(单次),方式,5,不影响,不影响,置入初值后,,GATE,的上升沿开始计数,或重新开始计数。,(,硬触发 单次),不影响计数,计数至,0,,输出宽度为,1,个,CLK,的负脉冲(单次),各种工作方式的输出波形,方式,0,方式,1,方式,2,方式,3,方式,4,方式,5,0,N,0,N,0,N,0/,N,1,1,0,N,N/2,N/2,0/,N,0,N,0 1,N,0 1,N,0 1,讨论:,计数开始的时刻,计数开始的时刻,需要注意:,处理器写入,8253,的计数初值只是写入了预置寄存器,之后到来的第一个,CLK,输入脉冲(需,先由低电平变高,再由高变低,)才将预置寄存器的初值送到减,1,计数器。,从第二个,CLK,信号的下降沿,计数器才真正开始减,1,计数。,5.1.3 8253/8254,的编程,8253,加电后的工作方式不确定,8253,必须初始化编程,才能正常工作,写入控制字,写入计数初值,读取计数值,8254,新增读回命令,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,1,写入方式控制字,计数器,读写格式,工作方式,数制,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,00,计数器,0,01,计数器,1,10,计数器,2,11,非法,00,计数器锁存命令,01,只读写低字节,10,只读写高字节,11,先读写低字节,后读写高字节,000,方式,0,001,方式,1,010,方式,2,011,方式,3,100,方式,4,101,方式,5,0,二进制,1,十进制,控制字写入控制字,I/O,地址(,A,1,A,0,11,),示例,2,写入计数值,选择二进制时,计数值范围:,0000H,FFFFH,0000H,是最大值,代表,65536,选择十进制(,BCD,码),计数值范围:,0000,9999,0000,代表最大值,10000,计数值写入计数器各自的,I/O,地址,示例,3,读取计数值,对,8,位数据线,读取,16,位计数值需分两次,计数在不断进行,应该将当前计数值先行锁存,然后读取:,向控制字,I/O,地址:给,8253,写入锁存命令,从计数器,I/O,地址:读取锁存的计数值,读取计数值,要注意读写格式和计数数制,4.8253,应用举例,在,PC,系列机中,使用了,1,片,8253/8254,,其内部,3,个计数器分别用于:日历时钟,包括年月日、时分秒,精确到,0.01s,;动态存储器刷新;声音,根据不同的音频产生不同的频率信号,驱动扬声器。其连接如图所示。,4.8253,应用举例 续,8253/8254,的,I/O,地址范围是,040H,05FH,,计数器,0,、计数器,1,、计数器,2,的计数器端口地址分别为,40H,、,41H,和,42H,,控制字的端口地址为,43H,。,3,个计数器的时钟信号,CLK,0,CLK,2,由系统时钟分频后得到,1.19318MHz,提供。,(1),计数器,0,计数器,0,是一个产生实时时钟信号的系统计时器。利用它系统可以完成日历时钟计数、写操作后的电动机的自动延迟停机以及为用户提供定时中断调用。用户可以使用这个中断调用运行自己的中断处理程序。,以下为系统,ROM-BIOS,对计数器,0,的初始化编程:,MOV AL,36h ;,计数器,0,为方式,3,,采用二进制计数,先低后高写入计数值,OUT 43H,AL ;,写入方式控制字,MOV AL,0 ;,计数初值,0,OUT 40H,AL ;,写入低字节计数初值,MOV AL,AH,OUT 40H,AL ;,写入高字节计数初值,(2),计数器,1,计数器,1,专门用作,DRAM,定时刷新请求。,PC/XT,机要求在,2ms,内进行,128,此刷新操作,,PC/AT,机要求在,4ms,内进行,256,次刷新操作,由此可知,每隔,2ms/128=15.6s,必须进行一次刷新。这样计数器,1,的,GATE,1,接,+5V,,,CLK,1,输入为,1.19318MHz,方波,采用工作方式,2,,减,“,1”,计数器,CE,的预置计数初值为,18,,因此在,OUT2,端输出一负脉冲,周期为,18/1.19318=15.084s,,该信号作为,D,触发器的触发时钟信号,使每隔,15.084s,产生一个正脉冲,周期性地对,DRAM,进行刷新,满足刷新要求,初始化程序如下:,MOV AL,54H ;,计数器,1,采用工作方式,2,,二进制计数,写入低,8,位,OUT 43H,AL,MOV AL,18 ;,计数初值为,48,OUT 41H,AL,(3),计数器,2,PC,系列机利用计数器,2,的输出控制扬声器的发声,作为机器的报警信号或伴音信号。计数器,2,的时钟输入,CLK,2,输入为,1.19318MHz,方波,采用工作方式,3,,系统中初值寄存器的内容预置为,0533H,(十进制,1331,),当,GATE2,为高电平时,,OUT2,输出频率为,1.19318MHz/1331=900Hz,的方波,该方波信号经放大和滤波后可以推动扬声器发声。实现扬声器发声的程序如下:,SpeakerPROC,PUSH AX,MOV AL,0B6H ;,计数器,2,采用工作方式,3,先低后高写入,16,为计数初值,OUT 43H,AL,POP AX,OUT 42H,AL ;,写入计数初值,MOV AL,aH,OUT 42,AL,RET,SpeakerENDP,(3),计数器,2,续,;,扬声器打开子程序,SpeakerOnPROC,PUSH AX,IN AL,61H ;,读取,61H,端口的控制信息,OR AL,03H ;D,1,D,0,=PB,1,PB,0,=11B,OUT 61H,AL ;,控制打开发声,POP AX,RET,SpeakerOnENDP,;,扬声器关闭子程序,SpeakerOffPROC,PUSH AX,IN AL,61H,AND AL,0FCH ;D,1,D,0,=PB,1,PB,0,=00B,OUT 61H,AL ;,控制关闭发声,POP AX,RET,SpeakerOffENDP,(4),软件延时,BIOS,的,15H,号中断调用的,86,号子功能,该中断调用可以使用户很好的实现较短时间的延时。,中断调用命令:,INT 15H,,子功能号:,AH=86H,;,入口参数:,CX.DX=,延时时间的微秒值(,CX,是高,16,位、,DX,是低,16,位),,出口参数:标志位,CF=0,,表示成功,执行了延时,,CF=1,,表示不成功,未执行延时。,虽然以微妙为单位,但因为实时时钟的最小单位是,976.5625s,(,1/1024Hz,),所以,实际上该功能调用的实际延时是,976s,的整数倍。例如要延时,1s,,可以用以下程序:,MOV AH,86H,MOV CX,15 ;1000000,微秒的高,16,位,MOV DX,16960 ;1000000,微秒的低,16,位,INT 15H,4.8253,应用举例 续,例:,用,8254,作为某数据采集系统的定时器,每隔,10ms,用中断方式采集一次数据,已知输入时钟频率为,10kHz,,,8259,端口地址为,20,21H,,中断类型号为,13H,,,8254,端口地址为,40,43H,,请为,8259,和,8254,编制初始化程序。,程序源代码:,INT0 EQU 20H,INT1 EQU 21H,D8254 EQU 43H,D8254A EQU 40H,STACK SEGMENT STACK,STA DW 50 DUP(?),TOP EQU LENGTH STA,STACK ENDS,4.8253,应用举例 续,CODE SEGMENT,ORG 1000H,ASSUME CS:CODE,DS:CODE,SS:STACK,START:;,初始化,;,设置中断的入口地址,XOR BX,BX,PUSH BX,POP DS ;,将,DS,清零,CLI ;,关中断,;,如果设置,8259,的起始中断向量号为,10,;,以下,6,个中断向量分别分配给,IRQ0,、,IRQ1,、,IRQ2,、,IRQ3.,LEA AX,IRQ0_INTERRUPT,;,中断向量,10H,MOV DS:WORD PTR64,AX,MOV DS:WORD PTR66,CS,NOP,LEA AX,IRQ1_INTERRUPT,;,中断向量,11H,MOV DS:WORD PTR68,AX,MOV DS:WORD PTR70,CS,NOP,LEA AX,IRQ2_INTERRUPT,;,中断向量,12H,MOV DS:WORD PTR72,AX,MOV DS:WORD PTR74,CS,NOP,LEA AX,IRQ3_INTERRUPT,;,中断向量,13H,MOV DS:WORD PTR76,AX,MOV DS:WORD PTR78,CS,NOP,PUSH CS,;,将,CS,中的内容传到,DS,POP DS,4.8253,应用举例 续,;,初始化,8259,CLI ;,关中断,;ICW1:,特征,A0=0,D4=1,;,边沿触发要求上升沿后保持高电平,MOV AL,00010011B;,边沿触发,单片使用,需要,ICW4,OUT INT0,AL,JMP$+2 ;,延时,;ICW2:,特征,A0=1,按顺序判断,MOV AL,00010000B;,中断矢量从,10H,号开始,OUT INT1,AL,JMP$+2,;ICW4:,特征,A0=1,按顺序判断,,ICW1,设置要,ICW4,;EOI,全嵌套方式,非缓冲,86/88,系统,MOV AL,00000001;,采用全嵌套,非缓冲,非自动结束,,16,位微机处理,OUT INT1,AL,JMP$+2,4.8253,应用举例 续,;8259,操作命令,;*,;OCW1:,特征,A0=1,按顺序判断,;,初始化结束后,只有,OCW1,要求,A0=1,;,其它操作命令,OCW2,,,OCW3,都要求,A0=0,;*,MOV DX,INT1,MOV AL,0F0H ;,假设只用,4,个可屏蔽中断,四个中断全部开放,OUT DX,AL,MOV CX,0FFFH,LOOP$,4.8253,应用举例 续,;,中断服务程序,IRQ0_INTERRUPT PROC NEAR,PUSH AX,PUSH DX,STI ;,开中断,;.,不处理返回,CLI ;,关中断,POP DX,POP AX,IRET,IRQ0_INTERRUPT ENDP,IRQ1_INTERRUPT PROC NEAR,PUSH AX,PUSH DX,STI ;,开中断,;.,不处理返回,CLI ;,关中断,POP DX,POP AX,IRET,IRQ1_INTERRUPT ENDP,4.8253,应用举例 续,IRQ2_INTERRUPT PROC NEAR,PUSH AX,PUSH DX,STI ;,开中断,;.,不处理返回,CLI ;,关中断,POP DX,POP AX,IRET,IRQ2_INTERRUPT ENDP,IRQ3_INTERRUPT PROC NEAR,PUSH AX,PUSH DX,STI ;,开中断,MOV DX,INT0,MOV AL,20H,OUT DX,AL,CLI ;,关中断,POP DX,POP AX,IRET,IRQ3_INTERRUPT ENDP,CODE ENDS,END START,8253,的控制字编程,;某个,8253,的计数器,0,、,1,、,2,端口和控制端口地址依次是,40H,43H,;设置其中计数器,0,为方式,0,,采用二进制计数,先低后高写入计数值,mov al,30h,;方式控制字:,30H,00,11,000,0B,out,43h,al,;写入控制端口:,43H,8253,的计数初值编程,例:,已知某个,8253,的计数器,0,、,1,、,2,和方式控制的端口地址为:,40H,43H,,要求设置计数器,2,对,CLK,2,的外部输入脉冲进行计数,计数满,1024,个后向,CPU,发中断请求,工作方式为,0,,采用二进制计数,先低后高写入计数初值,试写出相应的初始化程序。,MOV AL,,,0B0H ;,方式控制字:,0B0H=10 11 000 0B,OUT 43H,,,AL ;,写入方式控制端口:,43H,MOV AX,,,400H ;,计数初值:,1024=400H,OUT 42H,,,AL ;,写入计数器,2,,,42H,,写入低字节计数初值,MOV AL,,,ah,OUT 42H,,,AL ;,写入高字节计数初值,8253/8254,的,I/O,地址,0 1 0,0 0,0 1 0,0 1,0 1 0,1 0,0 1 0,1 1,0 0 1,0 0,0 0 1,0 1,0 0 1,1 0,功 能,对计数器,0,设置计数初值,CS,RD,A,1,A,0,WR,对计数器,1,设置计数初值,对计数器,2,设置计数初值,设置控制字,从计数器,0,读出计数值,从计数器,1,读出计数值,从计数器,2,读出计数值,
展开阅读全文