《微机系统与接口教学资料第八章.ppt》由会员分享,可在线阅读,更多相关《微机系统与接口教学资料第八章.ppt(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第八章第八章 定时与计数器定时与计数器一、基本概念一、基本概念一、基本概念一、基本概念二、定时二、定时二、定时二、定时/计数器计数器计数器计数器 Intel 8253 Intel 8253三、三、三、三、IBM PC/XT IBM PC/XT 中的定时中的定时中的定时中的定时/计数器电路计数器电路计数器电路计数器电路四、应用举例四、应用举例四、应用举例四、应用举例一、基本概念一、基本概念一、基本概念一、基本概念 1.1.定时信号的需求:定时信号的需求:定时信号的需求:定时信号的需求:在计算机系统中,经常要用到定时信号,比如:在计算机系统中,经常要用到定时信号,比如:在许多个人计算机中,在许多个
2、人计算机中,动态存储器的刷新定时;系统日历时钟的计时;喇叭的动态存储器的刷新定时;系统日历时钟的计时;喇叭的动态存储器的刷新定时;系统日历时钟的计时;喇叭的动态存储器的刷新定时;系统日历时钟的计时;喇叭的 声源;声源;声源;声源;都是用定时信号来产生的。都是用定时信号来产生的。在计算机实时控制与处理系统中,在计算机实时控制与处理系统中,计算机需要每隔一段时间采样一次,在对采计算机需要每隔一段时间采样一次,在对采计算机需要每隔一段时间采样一次,在对采计算机需要每隔一段时间采样一次,在对采 样的数据处理、控制,样的数据处理、控制,样的数据处理、控制,样的数据处理、控制,也要用到定时信号。也要用到定
3、时信号。2.2.定时信号的产生定时信号的产生定时信号的产生定时信号的产生 定时信号的产生有两种方式:定时信号的产生有两种方式:软件方法:延时子程序;软件方法:延时子程序;硬件方法:用定时硬件方法:用定时/计数器(简单的软件控制,产生准确的时间延迟)。计数器(简单的软件控制,产生准确的时间延迟)。3.3.可编程定时可编程定时可编程定时可编程定时/计数器的工作原理计数器的工作原理计数器的工作原理计数器的工作原理 CPU对计数器设定工作方式,装入初值,在对计数器设定工作方式,装入初值,在GATE(门控信号)的启动(门控信号)的启动下,计数器开始工作,在输入脉冲下,计数器开始工作,在输入脉冲CLK的作
4、用下做减的作用下做减 1 计数(来一个脉冲计计数(来一个脉冲计数值减数值减 1),减至),减至 0时,输出端时,输出端 OUT 输出一个信号。输出一个信号。4.4.可编程定时可编程定时可编程定时可编程定时/计数器的功能计数器的功能计数器的功能计数器的功能(1)计数计数 在设定好计数初值后,做减在设定好计数初值后,做减 1 计数,减为计数,减为 0 时,输出一个信号。时,输出一个信号。(2)定时定时 在设定好计数初值后,做减在设定好计数初值后,做减 1 计数,并按定时常数不断输出为时计数,并按定时常数不断输出为时(3)钟周期整数倍的定时间隔。钟周期整数倍的定时间隔。二、可编程定时二、可编程定时二
5、、可编程定时二、可编程定时/计数器计数器计数器计数器 Intel 8253 Intel 82531.1.原理原理原理原理(1)主要功能主要功能(2)芯片上有三个独立的芯片上有三个独立的16位计数器通道;位计数器通道;(3)每个计数器可以按照二进制或二每个计数器可以按照二进制或二十进制计数;十进制计数;(4)每个计数器的计数速率可达每个计数器的计数速率可达 2MHZ;(5)每个通道有每个通道有 6 种工作方式,可有程序设置和改变;种工作方式,可有程序设置和改变;(6)所有的输入输出都与所有的输入输出都与 TTL 兼容。兼容。(2)结构结构数据总线数据总线缓冲器缓冲器读读/写写逻辑逻辑控制字控制字
6、寄存器寄存器计数器计数器0号号计数器计数器1号号计数器计数器2号号初始化时,由初始化时,由CPU写入控制字以决定写入控制字以决定某通道的工作方式。某通道的工作方式。计数器计数器/定时器通定时器通道。道。由由16位的位的可预置值可预置值的减法计的减法计数器构成。数器构成。8位双向三态。用于与位双向三态。用于与CPU交换信息。交换信息。初始化时,初始化时,CPU向其写入命令字等,向其写入命令字等,计数值;计数值;CPU读取计数值。读取计数值。接收来自系统总线接收来自系统总线的控制信号,以产的控制信号,以产生控制整个芯片工生控制整个芯片工作的控制信号作的控制信号管脚信号管脚信号D7D7D0 D0 数
7、据总线(双向)数据总线(双向)RD RD 读输入读输入WR WR 写输入写输入A0,AA0,A1 1 选择内部寄存器地址选择内部寄存器地址CS CS 片选片选CLK 输入脉冲(计数器即输入脉冲(计数器即 对此脉冲计数)对此脉冲计数)GATE GATE 门控信号输入(控制门控信号输入(控制 计数器工作的外部信计数器工作的外部信 号,为低时,禁止计号,为低时,禁止计 数器工作)数器工作)OUT 输出引脚(计数到输出引脚(计数到0 时,时,OUT上必有输出上必有输出,输出信号的波形由输出信号的波形由 工作方式决定)工作方式决定)端口选择端口选择(3)控制字控制字 在在8253的初始化编程时,由的初始
8、化编程时,由CPU向向8253的控制字寄存器的控制字寄存器(4)写入一个控制字,它规定了写入一个控制字,它规定了8253的工作方式。的工作方式。2.2.工作方式工作方式工作方式工作方式 8253共有六种工作方式共有六种工作方式(1)方式方式0 计数结束中断计数结束中断(2)方式方式1 可编程的单拍脉冲可编程的单拍脉冲(3)方式方式2 频率发生器频率发生器(4)方式方式3 方播频率发生器方播频率发生器(5)方式方式4 软件触发选通软件触发选通(6)方式方式5 硬件触发选通硬件触发选通3.82533.8253编程编程编程编程(1)(1)方式方式方式方式0 0 计数结束中断计数结束中断计数结束中断计
9、数结束中断 当控制字写入控制字寄存器时,即使当控制字写入控制字寄存器时,即使OUT输出端变低,在写入计数初值后,输出端变低,在写入计数初值后,计数器开始计数(此时计数器开始计数(此时GATE信号必须为高),计数结束后信号必须为高),计数结束后OUT输出端变高。输出端变高。特点:特点:1.计数器只计一遍。当计数到计数器只计一遍。当计数到 0 时,并不恢复计数初值,不开始重新时,并不恢复计数初值,不开始重新 计数,且输出一直保持为高。只有在写入下一个计数值时,计数,且输出一直保持为高。只有在写入下一个计数值时,OUT 变低,开始新的计数。变低,开始新的计数。特点:特点:3.在计数过程中,可改变计数
10、值。在写入新的计数之后,计数器按新在计数过程中,可改变计数值。在写入新的计数之后,计数器按新 的值重新开始计数。的值重新开始计数。特点:特点:2.在计数过程中,可由门控信号在计数过程中,可由门控信号GATE控制暂停。控制暂停。GATE=0,计数暂停,计数暂停,GATE变高后,接着计数。变高后,接着计数。特点:特点:4.8253内部没有中断控制电路,也没有专用的中断请求引线,因此,内部没有中断控制电路,也没有专用的中断请求引线,因此,若要用于中断,则可用若要用于中断,则可用OUT 信号作为中断请求信号,但需要有外接信号作为中断请求信号,但需要有外接 的中断优先权排队电路与中断向量产生电路。的中断
11、优先权排队电路与中断向量产生电路。在在PC机中,用机中,用 8259A 作中断优先权排队电路与中断向量产生电路。作中断优先权排队电路与中断向量产生电路。Watchdog timer的概念的概念(2)(2)方式方式方式方式1 1 可编程的单拍脉冲可编程的单拍脉冲可编程的单拍脉冲可编程的单拍脉冲 当控制字写入控制字寄存器后,当控制字写入控制字寄存器后,OUT输出保持为高,当输出保持为高,当CPU写完计数值后,写完计数值后,计数器并不开始计数,直到计数器并不开始计数,直到 GATE 信号启动之后的下一个输入信号启动之后的下一个输入CLK脉冲的下降沿脉冲的下降沿开始计数),开始计数),OUT输出端变低
12、。在整个计数过程中,输出端变低。在整个计数过程中,OUT 都维持为低,直到计数都维持为低,直到计数为为 0 时,输出变为高,输出一个单脉冲。时,输出变为高,输出一个单脉冲。特点:特点:1.若设置的计数值为若设置的计数值为N,则输出的单脉冲宽度即为,则输出的单脉冲宽度即为N个输入脉冲间隔。个输入脉冲间隔。2.当计数到当计数到 0 后,可再次由外部触发启动,输出一个同样宽度的后,可再次由外部触发启动,输出一个同样宽度的 单拍脉冲,而不用再次送计数值。单拍脉冲,而不用再次送计数值。特点:特点:3.在计数过程中,外部可发门控信号进行再触发,在触发脉冲上升沿在计数过程中,外部可发门控信号进行再触发,在触
13、发脉冲上升沿 后的下一个后的下一个CLK脉冲的下降沿,计数器将重新开始工作。脉冲的下降沿,计数器将重新开始工作。特点:特点:4.在计数过程中,在计数过程中,CPU可改变计数初值,这时计数过程不受影响,计可改变计数初值,这时计数过程不受影响,计 数到数到 0 后输出为高。若再次触发启动,则计数器将按新的计数值计数。后输出为高。若再次触发启动,则计数器将按新的计数值计数。所以改变计数值是下次有效的。所以改变计数值是下次有效的。(3)(3)方式方式方式方式2 2 频率发生器频率发生器频率发生器频率发生器 当控制字写入控制字寄存器后,当控制字写入控制字寄存器后,OUT输出为高。在写入计数值后,计数输出
14、为高。在写入计数值后,计数器将立即自动对输入脉冲器将立即自动对输入脉冲 CLK 计数。在计数过程中,计数。在计数过程中,OUT一直保持为高,直一直保持为高,直到计数器减到到计数器减到 1 时,时,OUT变低,经过一个变低,经过一个CLK后,后,OUT恢复为高,计数器重恢复为高,计数器重新开始工作。新开始工作。特点:特点:1.不用重新设置计数值,计数器能够连续工作,输出固定频率的脉冲。不用重新设置计数值,计数器能够连续工作,输出固定频率的脉冲。特点:特点:2.计数过程可由门控信号计数过程可由门控信号GATE控制。当控制。当GATE变低时,暂停计数;在变低时,暂停计数;在 GATE变高后的下一个变
15、高后的下一个CLK脉冲使计数器恢复初值,重新开始计数。脉冲使计数器恢复初值,重新开始计数。特点:特点:3.在计数过程中可以改变计数值,这对正在进行的计数过程没有影响,在计数过程中可以改变计数值,这对正在进行的计数过程没有影响,但在计数到但在计数到 1 输出变低后,下一个计数周期,计数器将按新的计数输出变低后,下一个计数周期,计数器将按新的计数 值计数。所以改变计数值是下次有效的。值计数。所以改变计数值是下次有效的。(4)(4)方式方式方式方式3 3 方波频率发生器方波频率发生器方波频率发生器方波频率发生器 同频率发生器,区别在于,方波频率发生器在计数过程中输出一半时间为同频率发生器,区别在于,
16、方波频率发生器在计数过程中输出一半时间为高,一半时间为低。即其输出是高,一半时间为低。即其输出是N(N为计数值)个为计数值)个CLK脉冲的方波。脉冲的方波。特点:特点:1.若计数值为偶数,在装入计数值后,每个若计数值为偶数,在装入计数值后,每个CLK脉冲使计数值减脉冲使计数值减2,当计数,当计数 到到 0 时,一方面输出改变状态,一方面重新装入计数值开始新的计数。时,一方面输出改变状态,一方面重新装入计数值开始新的计数。若计数值为奇数,装入计数值后,第一个若计数值为奇数,装入计数值后,第一个CLK脉冲使计数器减脉冲使计数器减1,以后每,以后每 个个CLK使计数器减使计数器减2。所以,若计数值所
17、以,若计数值N为奇数,则(为奇数,则(N+1)/2个个CLK脉冲为高电平,(脉冲为高电平,(N-1)/2 个个CLK脉冲为低电平。脉冲为低电平。特点:特点:2.GATE信号能使计数过程重新开始。信号能使计数过程重新开始。GATE=0,计数停止,当,计数停止,当GATE=1后,后,计数器将重新装入计数初值,重新开始计数。计数器将重新装入计数初值,重新开始计数。特点:特点:3.若在计数期间写入新的计数值,并不影响现行计数过程。但若此时收到若在计数期间写入新的计数值,并不影响现行计数过程。但若此时收到 GATE信号,则计数器将在下一个信号,则计数器将在下一个CLK脉冲时装入新的计数值并开始计数。脉冲
18、时装入新的计数值并开始计数。(5)(5)方式方式方式方式4 4 软件触发选通软件触发选通软件触发选通软件触发选通 在这种方式下,当写入控制字后,输出为高,当写入计数值后立即开始计数。在这种方式下,当写入控制字后,输出为高,当写入计数值后立即开始计数。计数到计数到 0 后,输出变低,经过一个后,输出变低,经过一个CLK周期,输出又变高,计数器停止计数。这周期,输出又变高,计数器停止计数。这种计数方式是一次性的,当输入新的计数值后,才能开始新的计数。种计数方式是一次性的,当输入新的计数值后,才能开始新的计数。特点:特点:1.CPU写入计数值的下一个写入计数值的下一个CLK脉冲,将计数值装入计数器,
19、再下一个脉冲,将计数值装入计数器,再下一个 CLK脉冲开始计数,即在装入计数值后的第脉冲开始计数,即在装入计数值后的第 N+1 个脉冲后,才输出一个个脉冲后,才输出一个 负脉冲。负脉冲。特点:特点:3.若在计数期间写入新的计数值,则按新的计数值重新开始计数。若在计数期间写入新的计数值,则按新的计数值重新开始计数。特点:特点:2.GATE=0,禁止计数,禁止计数,GATE=1,允许计数。因此要做到软件触发,允许计数。因此要做到软件触发,GATE必须保持为高。但必须保持为高。但GATE不影响输出。不影响输出。(6)(6)方式方式方式方式5 5 硬件触发选通硬件触发选通硬件触发选通硬件触发选通 在这
20、种方式下,当写入控制字后,输出为高,当写入计数值后,计数器并不在这种方式下,当写入控制字后,输出为高,当写入计数值后,计数器并不立即开始计数,而是由门控信号的上升沿触发启动。计数到立即开始计数,而是由门控信号的上升沿触发启动。计数到 0 后,输出变低,经后,输出变低,经过一个过一个CLK周期,输出又变高,计数器停止计数。等到下一次门控信号的触发才周期,输出又变高,计数器停止计数。等到下一次门控信号的触发才能开始新的计数。能开始新的计数。特点:特点:1.CPU写入计数值的下一个写入计数值的下一个CLK脉冲,将计数值装入计数器,再下一个脉冲,将计数值装入计数器,再下一个 CLK脉冲开始计数,即在装
21、入计数值后的第脉冲开始计数,即在装入计数值后的第 N+1 个脉冲后,才输出一个个脉冲后,才输出一个 负脉冲。负脉冲。特点:特点:2.若在计数过程中使用若在计数过程中使用GATE信号,则使计数器重新开始计数。但信号,则使计数器重新开始计数。但GATE不不 影响输出。影响输出。特点:特点:3.若在计数期间改变计数值,只要没有门控信号的触发,不影响计数过程,若在计数期间改变计数值,只要没有门控信号的触发,不影响计数过程,计数到计数到0后,若有门控信号触发,则按新的计数值开始计数;若未计数到后,若有门控信号触发,则按新的计数值开始计数;若未计数到 0,即有门控信号触发,则立即按新的计数值重新开始计数。
22、,即有门控信号触发,则立即按新的计数值重新开始计数。3.82533.8253编程编程编程编程 要使用要使用 8253 必须首先对其进行初始化编程。初始化编程的步骤是:必须首先对其进行初始化编程。初始化编程的步骤是:(1)写入通道控制字,规定通道的工作方式;写入通道控制字,规定通道的工作方式;(2)写入计数值写入计数值 若规定只写低若规定只写低8位,则写入的为计数值的低位,则写入的为计数值的低8位,高位,高8位自动置位自动置0;若规定只写高若规定只写高8位,则写入的为计数值的高位,则写入的为计数值的高8位,低位,低8位自动置位自动置0;若是若是16位计数值,则分两次写入,先写入低位计数值,则分两
23、次写入,先写入低8位,在写入高位,在写入高8位。位。4.8253 4.8253 编程举例编程举例编程举例编程举例(1)初始化编程:使用通道初始化编程:使用通道0,工作在方式,工作在方式 1 下,按二下,按二十进制计数,计数值为十进制计数,计数值为5080。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的地址
24、为的地址为 04H 07H ;0 0 0 0,0 1 0 0 0 0 0 0,0 1 1 1(2)CPU 读取计数器的计数值。读取计数器的计数值。(3)因为计数值在不断地变化,故读取计数值时,必须将当前计数值锁因为计数值在不断地变化,故读取计数值时,必须将当前计数值锁存。存。(4)通常的做法是:向通常的做法是:向8253送一个控制字,令通道中的锁存器将计数值锁送一个控制字,令通道中的锁存器将计数值锁存,存,(5)然后由然后由CPU读取。读取。(6)例:读取通道例:读取通道1 中的计数值。中的计数值。通道控制字通道控制字 MOV AL,40H OUT 07H,AL IN AL,05H MOV C
25、L,AL IN AL,05H MOV CH,AL 0 1 0 0 0 0 0 0通道通道1 计数器锁存计数器锁存三、三、三、三、IBM PC/XT IBM PC/XT 中的定时中的定时中的定时中的定时/计数器电路计数器电路计数器电路计数器电路 PC机中,机中,8253 的三个计数器都得到使用,三个计数器的时钟脉冲都是的三个计数器都得到使用,三个计数器的时钟脉冲都是1.1931816MHZ,即时钟信号发生器即时钟信号发生器8284A的的PCLK外围设备用时钟信号。外围设备用时钟信号。1.1931816 MHZIRQ0到82591.1.计数器计数器计数器计数器0 0 计数器计数器0工作在方式工作在
26、方式3(方波频率发生器)下,在系统运行期间:(方波频率发生器)下,在系统运行期间:GATE恒接于恒接于+5V,处于开启状态,当装入一个初值后,即开始计数。,处于开启状态,当装入一个初值后,即开始计数。计数初值为计数初值为 0(65536),输出的方波频率为),输出的方波频率为 18.2 HZ。输出输出OUT0 接于接于 8259 的中断请求线的中断请求线 IRQ0 上,这样便每隔上,这样便每隔 1/18.2=55ms 产产 生一次生一次 0 级中断,级中断,当当 0 级中断发生时,系统便进入级中断发生时,系统便进入 BIOS 日时钟中断子程序,产生日时钟计数日时钟中断子程序,产生日时钟计数;此
27、外,还作为软盘驱动器的马达开启时间管理,当开启一定的时间后,令其自此外,还作为软盘驱动器的马达开启时间管理,当开启一定的时间后,令其自 动关闭。动关闭。方式方式31.1931816 MHZ06553618.2 HZ2.2.计数器计数器计数器计数器1 1计数器计数器1工作在方式工作在方式 2(频率发生器方式)下,在系统运行期间:(频率发生器方式)下,在系统运行期间:GATE恒接恒接+5V,处于常启状态;,处于常启状态;OUT1 接接 DMA控制器控制器 8237 的的 0 通道通道 DREQ0,计数初值定为计数初值定为 18,输出频率,输出频率=1.1931816 MHZ/18=66.287 K
28、HZ 的一系列负脉的一系列负脉冲,冲,即:即:每隔每隔 1/66.287=15.0857 s 向向DMA控制器提出控制器提出DMA请求,由请求,由DMA控制控制 器的器的 0 通道完成对动态存储器的刷新。通道完成对动态存储器的刷新。用于定时的向用于定时的向DMA控制器提出请求,以对动态存储器刷新。控制器提出请求,以对动态存储器刷新。方式方式21.1931816 MHZ3.3.计数器计数器计数器计数器 2 2计数器计数器3工作在方式工作在方式3(方波频率发生器方式)下,在系统运行期间:(方波频率发生器方式)下,在系统运行期间:预置初值为预置初值为 533H,GATE2 信号受系统并行接口芯片信号
29、受系统并行接口芯片8255 PB0 的控制;的控制;OUT2 受系统并行接口芯片受系统并行接口芯片8255 PB1 的控制。的控制。用于提供系统喇叭发声的音调。用于提供系统喇叭发声的音调。8255 PB 口口 7 6 5 4 3 2 1 0 8253计数器计数器2CLKGATE喇叭驱喇叭驱动电路动电路喇叭喇叭PCLK1.1931816MHZ4.8253 4.8253 的的的的 BIOS BIOS 功能调用功能调用功能调用功能调用 INT 1AH 读当前时钟;设置当前时钟。读当前时钟;设置当前时钟。INT 1CH 在时钟中断处理程序(在时钟中断处理程序(INT 8)中有一条软中断指令)中有一条软
30、中断指令 INT 1CH INT 1CH 的处理程序只是一条返回指令(的处理程序只是一条返回指令(IRET指令),用户可在此指令),用户可在此 程序中加入程序中加入自己自己的程序,当发生时钟中断时则可执行此程序,以实现的程序,当发生时钟中断时则可执行此程序,以实现 时实控制。时实控制。5.8253 5.8253 的的的的 DOS DOS 功能调用功能调用功能调用功能调用 INT 21H 的的 AH=2AH 设置日期设置日期 2BH 读日期读日期 2CH 设置时间设置时间 2DH 读时间读时间 四、应用举例四、应用举例四、应用举例四、应用举例 1.编写时钟中断处理程序编写时钟中断处理程序日时钟日
31、时钟CLK0CLK1CLK2OUT0IRQ0INTINTRINTAINTAS2 S1 S0D70类型码类型码0000591F0000000020000231F59:0000中中断断向向量量表表中中断断服服务务程程序序82538253825982598086808682888288内存内存内存内存时间常数的计算时间常数的计算时间常数的计算时间常数的计算要求要求 8253 每隔每隔 10ms 发一次定时中断。发一次定时中断。计数初值计数初值=PCLK/计数器输出频率计数器输出频率 =PCLK*计数器输出周期计数器输出周期 =1.1931816*106*(*10*10-3)=11932 方式方式31
32、.1931816 MHZ011932地址地址地址地址 寄存器寄存器寄存器寄存器40H 计数器计数器141H 计数器计数器242H 计数器计数器343H 控制寄存器控制寄存器PCPC机中机中机中机中8253 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 ;分的十位数分的十位
33、数 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
34、 ;数据段中存放时间的首地址数据段中存放时间的首地址 mov cx,8 cld rep 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,双
35、字节写,方式,双字节写,方式2,二进制,二进制 out 43h,al mov bx,11932 ;送计数值送计数值 mov al,bl out 40h,al mov al,bh out 40h,al mov al,fch ;设设8259 屏蔽寄存器屏蔽寄存器允许时钟和键盘中断允许时钟和键盘中断 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,se
36、cond ;取秒数取秒数 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 ;处理秒处理秒 jle timerx mov second,0 inc tensec cmp tensec,6 jl timerx mov tensec,0 inc minute ;处理分处理分 cmp minute,9 jle t
37、imerx 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 20h,al pop ax iret Timer endp Dispchar proc near ;显示显示 push bx mov bx,0 mov ah,14h ;用显示器功能调用用显示器功
38、能调用 int 10h pop bx retDispchar endpStart endpCode ends end begin2.扬声器控制扬声器控制设计一个程序,使扬声器发出设计一个程序,使扬声器发出600Hz频率的声音,按下频率的声音,按下任意键声音停止任意键声音停止PC机的发声系统以计数器机的发声系统以计数器2为核心。为核心。CLK2的输入频率的输入频率1.19MHz,改变计数器初值可以由改变计数器初值可以由OUT2得到不同频率的得到不同频率的方波输出对于方波输出对于600Hz,计数初值,计数初值1.19MHz/600Hz=1938发声系统受发声系统受8255芯片芯片B口的两个输出端线
39、口的两个输出端线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 8255 PB 口口61H 7 6 5 4 3 2 1 0 8253计数器计数器2CLKGATE喇叭驱喇叭驱动电路动电路喇叭喇叭PCLK1.1931816MHZ
40、MOVAH,01H INT 21H IN Al,61H AND AL,0FCH OUT 61H,AL MOVAH,4CH INT 21HCODE ENDS END START3.PC机机8253的应用的应用-程序运行时间计算程序运行时间计算方法方法1:时钟中断处理程序(:时钟中断处理程序(INT 8)通过)通过8235的计的计数器数器0,工作方式,工作方式3,预置的数为,预置的数为0000H,故故OUT将将输入的输入的1.19318MHz以以216分频,输出分频,输出18.2Hz的方波的方波提供给提供给8259 int0,每每55ms产生一次中断,在时钟中断产生一次中断,在时钟中断处理程序(处
41、理程序(INT 8)中有一条软中断指令)中有一条软中断指令 INT 1CH,INT 1CH 的处理程序只有一条返回的处理程序只有一条返回指令(指令(IRET指令),用户可在此指令),用户可在此 程序中加入自己的程序中加入自己的程序(或修改中断向量使其指向用户自己的程序),程序(或修改中断向量使其指向用户自己的程序),例如设置计数器,例如设置计数器,当发生时钟中断时则可执行此程当发生时钟中断时则可执行此程序,则可以判断程序运行的时间。序,则可以判断程序运行的时间。使用前提:计数是以使用前提:计数是以55ms为单位,为单位,故程序运行的时故程序运行的时间应该至少大于间应该至少大于55ms 方法方法2:若程序运行时间小于:若程序运行时间小于55ms,可以直接读取可以直接读取8253计算器计算器0的计数值,的计数值,步骤是步骤是1.先发计数锁存命令,先发计数锁存命令,2.然后读然后读OL的值的值(程序运行前程序运行前)3.再次读再次读OL的值的值(程序运行后程序运行后)4.两次的差值就是程序的运行时间两次的差值就是程序的运行时间问题:问题:如果想设计一个完善的程序运行计时方案(任意时如果想设计一个完善的程序运行计时方案(任意时长),长),可以考虑何种方法?可以考虑何种方法?
限制150内