290 likes | 451 Views
8.2 计数器 / 定时器接口芯片 8253. 微机系统中经常会要求有 一些实时时钟以实现定时或延时控制 ,也要求 有计数器对外部事件计数. 实现上述要求可采用 3 种方法: 1 .硬件定时 用数字逻辑电路来构成, 通用性、灵活性较差 2 .软件定时 利用程序段实现,通过正确挑选指令和安排循环次数很容易改变定时时间,但 软件定时占用了 CPU ,降低了 CPU 的利用率。 3 .采用可编程定时器/计数器 定时时间 与 计数值 可由 软件 来确定和改变,设定后与 CPU 并行工作,不占用 CPU 的时间。. 8.2.1 8253 的内部结构.
E N D
8.2 计数器/定时器接口芯片8253 微机系统中经常会要求有一些实时时钟以实现定时或延时控制,也要求有计数器对外部事件计数 实现上述要求可采用3种方法: 1.硬件定时 用数字逻辑电路来构成,通用性、灵活性较差 2.软件定时 利用程序段实现,通过正确挑选指令和安排循环次数很容易改变定时时间,但软件定时占用了CPU,降低了CPU的利用率。 3.采用可编程定时器/计数器 定时时间与计数值可由软件来确定和改变,设定后与CPU并行工作,不占用CPU的时间。
1. 三个独立的计数/定时通道——计数器0,计数器1,计数器2。每个计数器的结构为: (1)16位计数初值寄存器(CR)——存放计数的初值(预置); (2)16位的计数执行部件(CE)——16位减1计数器; (3)16位输出锁存器(OL)——跟随CE变化,但可以锁存,便于CPU读取。 2. 控制寄存器——存放CPU送来的控制字,控制8253的工作方式。有3个,只占用一个地址,不能读。
2. 读写控制信号RD,WR • 3. 片选及地址线CS,A1,A0——用于芯片及内部寄存器、计数器的寻址。 • 在IBM-PC机中,A9A8A7A6A5=00010选中(CS=0),A4A3A2未用,A1A0接8253的A1A0。 8.2.2 8253的引脚功能 1. 数据线D7~D0——8位,双向、三态,用于8253与CPU之间的数据传送。包括:向8253写控制字,送计数初值及读计数器的现行值。
A9A8A7A6A5A4A3A2A1A0功能 基本地址 • 0 0 0 1 0 × ×× 0 0 选中计数器0 40H • 0 0 0 1 0 × ×× 0 1 选中计数器1 41H • 0 0 0 1 0 × ×× 1 0 选中计数器2 42H • 0 0 0 1 0 × ×× 1 1 选中控制寄存器 43H • (其他) × ×× ×× 芯片禁止 • (说明:8253有32个地址,除基本地址外,其余为影像地址)
4. 计数器时钟输入CLK0~CLK2——计数/定时的基值信号 • 8253:0~2MHz • 8254-2:0~10MHz 5. 计数器门控输入信号GATE0~GATE2——启动或控制计数/定时信号; 6. 计数器输出信号OUT0~OUT2——计数结束、定时到输出信号或分频输出信号。
8.2.2 8253的编程 1. 控制字格式
2. 计数初始值 计数初始值写入对应计数器的计数初值寄存器CR; • 计数初值为8位,则控制字中的RL1、RL0应取01,初值只写入CR的低8位,高8位会自动置0; • 若是16位初值,而低8位是0,则RL1RL0应取10,初值高8位写入CR的高8位,CR的低8位会自动置0; • 若是一般16位初值,则RL1,RL0应取11,应分两次写入初值,先写低8位、再写入高8位(此顺序不能反)
单个计数器初始化 多个计数器初始化 写方式控制字(计数器0) 写方式控制字 写方式控制字(计数器1) 写计数低字节 写方式控制字(计数器2) 写计数低字节(计数器0) 写计数高字节 写计数高字节(计数器0) 写计数低字节(计数器1) 写计数高字节(计数器1) 写计数低字节(计数器2) 写计数高字节(计数器2) 3. 初始化流程 先写入工作方式控制字,接着写入计数初始值 • 计数器的顺序是任意的,不必一定按照计数器0、l、2的顺序初始化; • 可先写所有计数器的工作方式控制字,再装入各计数器的计数值(但先控制字再计数值的顺序不能错); • 计数值先写低再写高的顺序不能错; • 其他顺序无关紧要
例:选择计数器0工作于方式3,计数初值为1234,十进制计数方式;计数器2工作于方式2,计数初值为61H,采用二进制计数方式,设8253的端口地址为40~43H。其初始化编程如下:例:选择计数器0工作于方式3,计数初值为1234,十进制计数方式;计数器2工作于方式2,计数初值为61H,采用二进制计数方式,设8253的端口地址为40~43H。其初始化编程如下: MOV AL,00110111B ;对计数器0送工作方式字 OUT 43H,AL MOV AX,1234H ;送计数初值 OUT 40H,AL MOV AL,AH OUT 40H AL MOV AL,10010100B ;对计数器2送工作方式字 OUT 43H,AL MOV AL,61H ;送计数初值 OUT 42H,AL
8253初始化规则 (1)对计数器设置初值前必须先写入控制字,此时,全部控制逻辑电路复位,输出OUT为初始状态(高电平或低电平); (2)初值写入后,要经过1个时钟CLK的上升沿和1个下降沿后,计数执行部件才开始计数; (3)在CLK的上升沿时,计数器对门控信号GATE进行采样,来决定工作状态(计数、触发、停止、重新置初值); (4)在CLK的下降沿时,计数器执行部件从初值开始作减1计数;其中0是最大初值,1是最小初值; 若以二进制数制计数,则0相当于216=65536 若以BCD(十进制)数制计数,则0相当于104=10000
读计数值——将某计数器的计数值读到CPU中 读到的是执行输入指令瞬间计数器的现行值。16位计数值要分两次读至CPU,故必须将数据锁存。 有两种办法: • 利用外加控制信号 GATE使计数器暂停计数,然后按照工作方式控制字中RL1RL0的规定读取规定字节 • CPU向8253发出锁存命令字(SC1SC000XXXX)锁存计数器的当前计数值(当前计数值锁存在输出锁存器OL,而减1计数器可以继续计数),再读取输出锁存器的计数值。当CPU读取了规定的字节数后,OL自动解除锁存状态,其值又跟随计数器而变化。
8.2.4 8253的工作方式 8253有6种工作方式:不同方式下,启动方式、GATE信号的作用、OUT输出波形都有所不同,但以下几条基本规则是相同的: • 工作方式控制字写入计数器时,输出端OUT进入初始状态(高电平或低电平); • 计数初值写入CR后,在下一个 CLK脉冲才装入减 1计数器 CE,因此该 CLK脉冲并不影响计数; • CE的减1计数操作发生在CLK的下降沿; • 计数器对门控信号GATE的采样是在CLK上升沿
WR CLK GATE OUT 1. 方式0——计数结束产生中断 CW N=4 N N 4 3 2 1 0 FF 计数结束 装控制字 计数开始 装初值 说明:①初值装入后,要经过1个CLK的周期(1个上升沿和1个下降沿)后,计数器才开始计数,所以,输出OUT要经过N+1个时钟周期后才有输出; ②输出OUT的有效电平为高电平,并可同时触发中断请求; ③门控GATE的作用:高电平时计数,低电平或下降沿时停止计数; ④CW为写入控制字,N=4表示写入初值。
WR CLK GATE OUT 2. 方式1——可重触发的单稳态触发器 CW N=3 N N 3 2 1 0 FF 3 2 1 0 FF 计数结束 装控制字 计数开始 装初值 说明:①方式字和初值装入后,在门控GATE的上升沿触发下,经过1个CLK的上升沿和1个下降沿后,计数器开始从初值减1计数,同时使OUT=0;当计数结束(归0)时,OUT=1,使输出产生1个宽度为TW=N×TCLK的负脉冲——单稳态触发器。 ②在GATE的上升沿触发下,输出可再次产生1个宽度为TW负脉冲——可重触发。
WR CLK GATE OUT 3. 方式2——分频器 CW N=3 N N 3 2 1 3 2 1 3 2 1 3 说明:①方式字装入后,OUT=1为初始状态。 ②初值装入后,经过1个CLK的周期,计数器开始从初值减1计数,计到1(不是0)时,使输出OUT=0并保持1个CLK周期,然后OUT=1,开始下一个新的计数周期,使输出为CLK的时钟1/N分频信号,占空比q=(N-1)/N。 ③门控GATE的作用:高电平时计数,低电平停止计数;用GATE的上升沿可以触发分频重新开始——称为硬同步;而在GATE=1时,用装初值的方法启动分频开始——称为软同步
WR CLK GATE OUT 4. 方式3——方波发生器 CW N=4 N N 4 3 2 1 4 3 2 1 4 3 2 • 说明:特点与方式2类似,主要区别:输出方波,其占空比q为 • ①当N为偶数时,q=0.5; • ②当N为奇数时,q=(N+1)/2N。
WR CLK GATE OUT 5. 方式4——软件触发的选通信号发生器 N=3 CW N=3 N N 3 2 1 0 FF FE 3 2 1 0 FF 说明:①初值装入后,经过1个CLK的周期,计数器开始从初值减1计数,计数结束(归0)时,使输出OUT产生一个宽度为1个CLK周期的负脉冲——选通信号。 ②(用指令)重新装入初值后,经过N+1个CLK周期,又可使OUT产生一个选通信号——(用软件)可重触发。 ③门控GATE的作用:高电平时计数,低电平时停止计数;
WR CLK GATE OUT 6. 方式5——硬件触发的选通信号发生器 CW N=3 N N 3 2 1 0 FF FE 3 2 1 0 FF 说明:①初值装入后,在GATE的上升沿的触发下,经过1个CLK的周期,计数器开始从初值减1计数,计数结束(归0)时,使输出OUT产生一个宽度为1个CLK周期的负脉冲——选通信号。 ②用GATE的上升沿可重新触发,使OUT产生一个选通信号——(用硬件)可重触发。
总结: • 方式2、4、5的输出波形是相同的,都是宽度为一个CLK周期的负脉冲。 • 但方式2是连续工作, • 方式4由软件(设置奇数值)触发启动 • 方式5由门控脉冲触发启动 • 写入计数值后才能开始计数 • 方式0、2、3、4在写入计数值后,计数过程就开始了 • 方式1、5需要外部触发启动,才开始计数 • 6种方式中只有方式2、3是连续计数,其他4种方式都是一次计数,要继续工作需要重新启动,方式0、4由写入计数值(软件)启动,方式1、5要由外部信号(硬件)启动。
分析: ①计数器0工作于方式2分频方式,每隔50个CLK0产生一个中断INT;方式控制字为:00010101B(15H),即方式2,只装低8位,BCD数制,初值为50(H)。 ②计数器1工作于方式3方波方式,产生2000Hz喇叭音调,方式控制字为:01110111B(77H),即方式3,先低后高,BCD数制; 初值(分频比)=(1.4×106)/2000=700(H)。
主程序段: MOV AL,15H;置计数器0方式 • OUT 43H,AL; • MOV AL,50H;装初值 • OUT 40H,AL; • MOV AL,00H;关8255的PC0 • OUT 63H,AL; • MOV AL,77H;置计数器1方式 • OUT 43H,AL; • MOV AL,00H;装初值 • OUT 41H,AL; • MOV AL,07H; • OUT 41H,AL; • STI; • LOP: HLT; • JMP LOP;
中断服务程序: • INTP: MOV AL,01H;开8255的PC0 • OUT 63H,AL; • CALL DLY5S;调5S延迟子程序 • MOV AL,00H;关8255的PC0 • OUT 63H,AL; • IRET; • (说明:在装入8253计数器的初值时,不管是二进制数制还是BCD数制,初值后均要加“H”。)
8253在IBM-PC机中的应用 1. 计数器0——向系统提供定时中断:工作于方式3(方波),CLK0=1193181.6Hz,二进制数制,初值=0(即65536),OUT0输出频率为1193181.6/65536=18.2Hz(周期为55ms)的方波控制8259A的IRQ0(日时钟)的中断,即每隔55ms产生一次中断。 2. 计数器1——向DMAC系统提供定时中断,刷新动态RAM:工作于方式2(分频),CLK1=1193181.6Hz,BCD数制,初值=18,OUT1输出频率为1193181.6/18=66.287KHz(周期为15.0857s)的矩形波向DMAC提供定时中断。
3. 计数器2——提供喇叭的音调:工作于方式3(方波),CLK2=1193181.6Hz,BCD数制,初值=533,OUT2输出频率为1193181.6/533=900Hz的方波作为喇叭的声源。 练习:按上述要求写出8253的初始化程序。
CLK0 GATE0 OUT0 CLK1 GATE1 OUT1 CLK2 GATE2 OUT2 2MHz 5ms 1s 送8259产生INT 练习:用8253设计洗衣机定时程序,设输入频率为2MHz,要求能产生3分、6分和12分的定时,定时到产生中断,试画出8253的连接示意图并编写相应的程序段。 分析:计数器0工作于方式3,初值N=0(10000)(H) 计数器1工作于方式3,N=200(H) 计数器2工作于方式0,初值由3分、6分、12分除1S(减1)得出
MOV AL,00110111B;计数器零 OUT 43H,AL; MOV AL,00H; OUT 40H,AL; OUT 40H,AL; MOV AL,01110111B; OUT 43H,AL; MOV AL,00H; OUT 41H,AL; MOV AL,02H; OUT 41H,AL;
3分定时:N=180/1=180 MOV AL,10110001B; OUT 43H,AL; MOV AL,80H; OUT 42H,AL; MOV AL,01H; OUT 42H,AL; 6分定时:N=360/1=360 MOV AL,10110001B; OUT 43H,AL; MOV AL,60H; OUT 42H,AL; MOV AL,03H; OUT 42H,AL;