《微机系统与接口教学资料第八章.ppt》由会员分享,可在线阅读,更多相关《微机系统与接口教学资料第八章.ppt(40页珍藏版)》请在三一办公上搜索。
1、第八章 定时与计数器,一、基本概念,二、定时/计数器 Intel 8253,三、IBM PC/XT 中的定时/计数器电路,四、应用举例,一、基本概念 1.定时信号的需求:在计算机系统中,经常要用到定时信号,比如:在许多个人计算机中,动态存储器的刷新定时;系统日历时钟的计时;喇叭的 声源;都是用定时信号来产生的。在计算机实时控制与处理系统中,计算机需要每隔一段时间采样一次,在对采 样的数据处理、控制,也要用到定时信号。2.定时信号的产生 定时信号的产生有两种方式:软件方法:延时子程序;硬件方法:用定时/计数器(简单的软件控制,产生准确的时间延迟)。,3.可编程定时/计数器的工作原理,CPU对计数
2、器设定工作方式,装入初值,在GATE(门控信号)的启动下,计数器开始工作,在输入脉冲CLK的作用下做减 1 计数(来一个脉冲计数值减 1),减至 0时,输出端 OUT 输出一个信号。,4.可编程定时/计数器的功能,计数 在设定好计数初值后,做减 1 计数,减为 0 时,输出一个信号。,定时 在设定好计数初值后,做减 1 计数,并按定时常数不断输出为时 钟周期整数倍的定时间隔。,二、可编程定时/计数器 Intel 8253,原理,主要功能 芯片上有三个独立的16位计数器通道;每个计数器可以按照二进制或二十进制计数;每个计数器的计数速率可达 2MHZ;每个通道有 6 种工作方式,可有程序设置和改变
3、;所有的输入输出都与 TTL 兼容。,(2)结构,管脚信号,D7D0 数据总线(双向)RD 读输入WR 写输入A0,A1 选择内部寄存器地址CS 片选CLK 输入脉冲(计数器即 对此脉冲计数)GATE 门控信号输入(控制 计数器工作的外部信 号,为低时,禁止计 数器工作)OUT 输出引脚(计数到0 时,OUT上必有输出,输出信号的波形由 工作方式决定),端口选择,控制字 在8253的初始化编程时,由CPU向8253的控制字寄存器 写入一个控制字,它规定了8253的工作方式。,2.工作方式 8253共有六种工作方式,(1)方式0 计数结束中断,(2)方式1 可编程的单拍脉冲,(3)方式2 频率发
4、生器,(4)方式3 方播频率发生器,(5)方式4 软件触发选通,(6)方式5 硬件触发选通,3.8253编程,(1)方式0 计数结束中断,当控制字写入控制字寄存器时,即使OUT输出端变低,在写入计数初值后,计数器开始计数(此时GATE信号必须为高),计数结束后OUT输出端变高。,特点:1.计数器只计一遍。当计数到 0 时,并不恢复计数初值,不开始重新 计数,且输出一直保持为高。只有在写入下一个计数值时,OUT 变低,开始新的计数。,特点:3.在计数过程中,可改变计数值。在写入新的计数之后,计数器按新 的值重新开始计数。,特点:2.在计数过程中,可由门控信号GATE控制暂停。GATE=0,计数暂
5、停,GATE变高后,接着计数。,特点:4.8253内部没有中断控制电路,也没有专用的中断请求引线,因此,若要用于中断,则可用OUT 信号作为中断请求信号,但需要有外接 的中断优先权排队电路与中断向量产生电路。在PC机中,用 8259A 作中断优先权排队电路与中断向量产生电路。,Watchdog timer的概念,(2)方式1 可编程的单拍脉冲,当控制字写入控制字寄存器后,OUT输出保持为高,当CPU写完计数值后,计数器并不开始计数,直到 GATE 信号启动之后的下一个输入CLK脉冲的下降沿开始计数),OUT输出端变低。在整个计数过程中,OUT 都维持为低,直到计数为 0 时,输出变为高,输出一
6、个单脉冲。,特点:1.若设置的计数值为N,则输出的单脉冲宽度即为N个输入脉冲间隔。2.当计数到 0 后,可再次由外部触发启动,输出一个同样宽度的 单拍脉冲,而不用再次送计数值。,特点:3.在计数过程中,外部可发门控信号进行再触发,在触发脉冲上升沿 后的下一个CLK脉冲的下降沿,计数器将重新开始工作。,特点:4.在计数过程中,CPU可改变计数初值,这时计数过程不受影响,计 数到 0 后输出为高。若再次触发启动,则计数器将按新的计数值计数。所以改变计数值是下次有效的。,(3)方式2 频率发生器,当控制字写入控制字寄存器后,OUT输出为高。在写入计数值后,计数器将立即自动对输入脉冲 CLK 计数。在
7、计数过程中,OUT一直保持为高,直到计数器减到 1 时,OUT变低,经过一个CLK后,OUT恢复为高,计数器重新开始工作。,特点:1.不用重新设置计数值,计数器能够连续工作,输出固定频率的脉冲。,特点:2.计数过程可由门控信号GATE控制。当GATE变低时,暂停计数;在 GATE变高后的下一个CLK脉冲使计数器恢复初值,重新开始计数。,特点:3.在计数过程中可以改变计数值,这对正在进行的计数过程没有影响,但在计数到 1 输出变低后,下一个计数周期,计数器将按新的计数 值计数。所以改变计数值是下次有效的。,(4)方式3 方波频率发生器,同频率发生器,区别在于,方波频率发生器在计数过程中输出一半时
8、间为高,一半时间为低。即其输出是N(N为计数值)个CLK脉冲的方波。,特点:1.若计数值为偶数,在装入计数值后,每个CLK脉冲使计数值减2,当计数 到 0 时,一方面输出改变状态,一方面重新装入计数值开始新的计数。若计数值为奇数,装入计数值后,第一个CLK脉冲使计数器减1,以后每 个CLK使计数器减2。所以,若计数值N为奇数,则(N+1)/2个CLK脉冲为高电平,(N-1)/2 个CLK脉冲为低电平。,特点:2.GATE信号能使计数过程重新开始。GATE=0,计数停止,当GATE=1后,计数器将重新装入计数初值,重新开始计数。,特点:3.若在计数期间写入新的计数值,并不影响现行计数过程。但若此
9、时收到 GATE信号,则计数器将在下一个CLK脉冲时装入新的计数值并开始计数。,(5)方式4 软件触发选通,在这种方式下,当写入控制字后,输出为高,当写入计数值后立即开始计数。计数到 0 后,输出变低,经过一个CLK周期,输出又变高,计数器停止计数。这种计数方式是一次性的,当输入新的计数值后,才能开始新的计数。,特点:1.CPU写入计数值的下一个CLK脉冲,将计数值装入计数器,再下一个 CLK脉冲开始计数,即在装入计数值后的第 N+1 个脉冲后,才输出一个 负脉冲。,特点:3.若在计数期间写入新的计数值,则按新的计数值重新开始计数。,特点:2.GATE=0,禁止计数,GATE=1,允许计数。因
10、此要做到软件触发,GATE必须保持为高。但GATE不影响输出。,(6)方式5 硬件触发选通,在这种方式下,当写入控制字后,输出为高,当写入计数值后,计数器并不立即开始计数,而是由门控信号的上升沿触发启动。计数到 0 后,输出变低,经过一个CLK周期,输出又变高,计数器停止计数。等到下一次门控信号的触发才能开始新的计数。,特点:1.CPU写入计数值的下一个CLK脉冲,将计数值装入计数器,再下一个 CLK脉冲开始计数,即在装入计数值后的第 N+1 个脉冲后,才输出一个 负脉冲。,特点:2.若在计数过程中使用GATE信号,则使计数器重新开始计数。但GATE不 影响输出。,特点:3.若在计数期间改变计
11、数值,只要没有门控信号的触发,不影响计数过程,计数到0后,若有门控信号触发,则按新的计数值开始计数;若未计数到 0,即有门控信号触发,则立即按新的计数值重新开始计数。,3.8253编程,要使用 8253 必须首先对其进行初始化编程。初始化编程的步骤是:(1)写入通道控制字,规定通道的工作方式;(2)写入计数值 若规定只写低8位,则写入的为计数值的低8位,高8位自动置0;若规定只写高8位,则写入的为计数值的高8位,低8位自动置0;若是16位计数值,则分两次写入,先写入低8位,在写入高8位。,4.8253 编程举例,(1)初始化编程:使用通道0,工作在方式 1 下,按二十进制计数,计数值为5080
12、。,0 0 1 1 0 0 1 1 通道0 先写低8位 方式1 BCD计数 再写高8位,通道控制字,计数值的低8位为80,高8位为50。MOV AL,33H OUT 07H,AL MOV AL,80 OUT 04H,AL MOV AL,50 OUT 04H,AL,;假设8253的地址为 04H 07H;0 0 0 0,0 1 0 0 0 0 0 0,0 1 1 1,CPU 读取计数器的计数值。因为计数值在不断地变化,故读取计数值时,必须将当前计数值锁存。通常的做法是:向8253送一个控制字,令通道中的锁存器将计数值锁存,然后由CPU读取。例:读取通道1 中的计数值。通道控制字 MOV AL,4
13、0H OUT 07H,AL IN AL,05H MOV CL,AL IN AL,05H MOV CH,AL,三、IBM PC/XT 中的定时/计数器电路,PC机中,8253 的三个计数器都得到使用,三个计数器的时钟脉冲都是1.1931816MHZ,即时钟信号发生器8284A的PCLK外围设备用时钟信号。,1.1931816 MHZ,IRQ0到8259,1.计数器0 计数器0工作在方式3(方波频率发生器)下,在系统运行期间:GATE恒接于+5V,处于开启状态,当装入一个初值后,即开始计数。计数初值为 0(65536),输出的方波频率为 18.2 HZ。输出OUT0 接于 8259 的中断请求线
14、IRQ0 上,这样便每隔 1/18.2=55ms 产 生一次 0 级中断,当 0 级中断发生时,系统便进入 BIOS 日时钟中断子程序,产生日时钟计数;此外,还作为软盘驱动器的马达开启时间管理,当开启一定的时间后,令其自 动关闭。,方式3,1.1931816 MHZ,0,65536,18.2 HZ,2.计数器1,计数器1工作在方式 2(频率发生器方式)下,在系统运行期间:GATE恒接+5V,处于常启状态;OUT1 接 DMA控制器 8237 的 0 通道 DREQ0,计数初值定为 18,输出频率=1.1931816 MHZ/18=66.287 KHZ 的一系列负脉冲,即:每隔 1/66.287
15、=15.0857 s 向DMA控制器提出DMA请求,由DMA控制 器的 0 通道完成对动态存储器的刷新。用于定时的向DMA控制器提出请求,以对动态存储器刷新。,方式2,1.1931816 MHZ,3.计数器 2,计数器3工作在方式3(方波频率发生器方式)下,在系统运行期间:预置初值为 533H,GATE2 信号受系统并行接口芯片8255 PB0 的控制;OUT2 受系统并行接口芯片8255 PB1 的控制。用于提供系统喇叭发声的音调。,4.8253 的 BIOS 功能调用,INT 1AH 读当前时钟;设置当前时钟。INT 1CH 在时钟中断处理程序(INT 8)中有一条软中断指令 INT 1C
16、H INT 1CH 的处理程序只是一条返回指令(IRET指令),用户可在此 程序中加入自己的程序,当发生时钟中断时则可执行此程序,以实现 时实控制。,5.8253 的 DOS 功能调用,INT 21H 的 AH=2AH 设置日期 2BH 读日期 2CH 设置时间 2DH 读时间,四、应用举例 1.编写时钟中断处理程序日时钟,CLK0,CLK1,CLK2,OUT0,IRQ0,INT,INTR,INTA,INTA,S2 S1 S0,D70,类型码,0000591F,00000,00020,00023,1F59:0000,中断向量表,中断服务程序,8253,8259,8086,8288,内存,时间常
17、数的计算,要求 8253 每隔 10ms 发一次定时中断。,计数初值=PCLK/计数器输出频率=PCLK*计数器输出周期=1.1931816*106*(*10*10-3)=11932,地址 寄存器40H 计数器141H 计数器242H 计数器343H 控制寄存器,PC机中8253 地址分配,Stack segment para stack stack db 256 dup(?)Stack endsData segment public dataCount100 db 100;100计数器Tenhour db 0;时的十位数 Hour db 0;时的个位数 db:Tenmin db 0;分的十位
18、数 Minute db 0;分的个位数 db:Tensec db 0;秒的十位数 Second db 0;秒的个位数 Data ends Code segment para public codeStart proc far assume cs:code,da:data,es:data,ss:stackBegin:push ds xor ax,ax push ax,mov ax,data mov ds,ax mov es,ax mov si,82h;PSP中命令行参数hh:mm:ss存放地址 mov di,offset tenhour;数据段中存放时间的首地址 mov cx,8 cld rep
19、 movsb;将8个字串从PSP中移到数据段中存放时间的单元中 mov ah,0;键盘功能调用等待按键 int 16h cli;关中断 mov ax,0 mov es,ax mov di,20h mov ax,offset timer stosw mov ax,seg timer stosw;将中断服务程序入口地址存入中断向量表,mov al,36h;设8253 控制字选计数器0,双字节写,方式2,二进制 out 43h,al mov bx,11932;送计数值 mov al,bl out 40h,al mov al,bh out 40h,al mov al,fch;设8259 屏蔽寄存器允许
20、时钟和键盘中断 out 21h,al sti;开中断 Forever:mov bx,offset tenhour;取 hh:mm:ss 8个字串进行显示 mov cx,8 Dispclk:mov al,bx call dispchar inc bx loop dispclk mov al,second;取秒数 Wait:cmp al,second jz wait;等待变化 jmp forver;变了则重新显示,Timer proc far push ax dec count100;计数值减1,jnz timerx;不到 0,返回 inc second;到0,秒加1 cmp second,9;处
21、理秒 jle timerx mov second,0 inc tensec cmp tensec,6 jl timerx mov tensec,0 inc minute;处理分 cmp minute,9 jle timerx mov minute,0 inc tenmin cmp tenmin,6 jl timerx mov tenmin,0 inc hour;处理时 cmp hour,4 jl timerx,mov hour,0 inc tenhour cmp tenhour,2 jl timerx mov tenhour,0Timerx:mov al,20h;对8259发EOI命令 out
22、 20h,al pop ax iret Timer endp Dispchar proc near;显示 push bx mov bx,0 mov ah,14h;用显示器功能调用 int 10h pop bx retDispchar endpStart endpCode ends end begin,2.扬声器控制,设计一个程序,使扬声器发出600Hz频率的声音,按下任意键声音停止PC机的发声系统以计数器2为核心。CLK2的输入频率1.19MHz,改变计数器初值可以由OUT2得到不同频率的方波输出对于600Hz,计数初值1.19MHz/600Hz=1938发声系统受8255芯片B口的两个输出端
23、线PB0、PB1的控制PB0为1,使GATE2为1,计数器2能正常计数PB1为1,打开输出控制门,2.扬声器控制,CODE SEGMENT ASSUME CS:CODESTART:MOV AL 0B6H OUT 43H,AL:IN AL,61H OR AL,03H OUT 61H,AL MOVAX,1983 OUT42H,AL MOVAL,AH OUT 42,AL,MOVAH,01H INT 21H INAl,61H AND AL,0FCH OUT 61H,AL MOVAH,4CH INT 21HCODE ENDS END START,3.PC机8253的应用-程序运行时间计算,方法1:时钟中
24、断处理程序(INT 8)通过8235的计数器0,工作方式3,预置的数为0000H,故OUT将输入的1.19318MHz以216分频,输出18.2Hz的方波提供给8259 int0,每55ms产生一次中断,在时钟中断处理程序(INT 8)中有一条软中断指令 INT 1CH,INT 1CH 的处理程序只有一条返回指令(IRET指令),用户可在此 程序中加入自己的程序(或修改中断向量使其指向用户自己的程序),例如设置计数器,当发生时钟中断时则可执行此程序,则可以判断程序运行的时间。使用前提:计数是以55ms为单位,故程序运行的时间应该至少大于55ms,方法2:若程序运行时间小于55ms,可以直接读取8253计算器0的计数值,步骤是1.先发计数锁存命令,2.然后读OL的值(程序运行前)3.再次读OL的值(程序运行后)4.两次的差值就是程序的运行时间问题:如果想设计一个完善的程序运行计时方案(任意时长),可以考虑何种方法?,