8253的初始化编程
第八章 8253定时计数器(例程)
➢ 在计数过程中,如GATE变为低电平,这时只是暂停计数 ,等待GATE信号变为高电平后,计数器继续“减1”计数
例题,向8253的A1A=0 11B的地址写入0011 0000B,则表示 计数器0设置成方式0,并且采用16位时常数,假设时常数为 1500,则计数器0的初始化程序段如下:
通过计数通道的端口地址可以访问通道中的CR、OL,当对通 道进行写操作时,实际上表示将计数初值(即时常数)写入CR; 当对通道进行读操作时,表示将从OL中读取计数值。
8253的控制字
定时/计数器8253一共有6种工作方式,由控制字 寄存器的内容来设定。方式控制字如下所示:
D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC0 RL1 RL0 M2 M1 M0 BCD
电源(+5V) 地
连接去向 CPU
译码电路 CPU CPU CPU 外部
外部 外部
/ /
8253的原理结构及工作原理
每个计数通道主要包含四个部件: 计数寄存器CR(Conut Register, 16位)、 计数工作单元CE(Counting Element, 16位)、 输出锁存器OL(Output Latch, 16位)、 控制字寄存器(Control Word Register, 8位)。
计数过程中写入新的时常数,它只能在下一次分频脉冲后起作用
方式2的特点:
➢在置方式2的控制字后,OUT端变为高电平;
➢在置入时常数后,下一个CLK脉冲期间,将时常数从CR读 入CE,并开始“减1”计数;
➢当CE计数到01时,在OUT端输出一个负脉冲,并重新读入 时常数进行计数;
微型计算机原理及接口技术第8章8253
计数器/定时器的内部结构
8253内部包含三个完全一样的计数器/定时器通道, 每个通道的工作是完全独立的
每个通道包含:
① 一个8位控制字寄存器:由编程设定该通道的工作方式、读 写格式和数制
② 一个16位计数初值寄存器:由程序设定初始计数值,可分 成高8位和低8位两个部分,可作8位寄存器使用
③ 一个计数器执行部件(实际的计数器):实际上是一个16 位减法计数器,它的起始值是初始寄存器的值,由程序设 定。可分成高8位和低8位两个部分
优点:电路结构简单,价格便宜,通过 改变电阻或电容值,可以在一定的定时 范围内改变定时时间
缺点:电路在硬件已连接好的情况下, 定时时间和范围就不能由程序来控制和 改变,而且定时精度也不高
555定时器外部引脚和内部结构
可编程硬件定时
定时原理:利用可编程定时器/计数器芯 片附加硬件电路实现定时
输出信号的波形由工作方式决定,同时还要受 到GATE引脚上的门控信号控制,它决定是否 允许计数
计数器/定时器的定时功能
当加到CLK引脚上的脉冲为精确的时钟脉 冲,可实现定时的功能。
定时时间决定于计数脉冲的频率和计数 器的初值。
定时时间=时钟脉冲周期×预置的计数初值
计数器/定时器的计数功能
方式1:可编程单稳态输出方式
写入控制字后OUT初始状态:高电平 门控信号GATE的作用:①高电平或低电平均不起作用;
②只有在GATE发生由低到高的正跳变,输出OUT由高
到低跳变,并开始计数;③在计数过程中,若GATE产 生负跳变,不影响计数;④在计数器回0之前,GATE 又产生由低到高的正跳变,8253又将初始值装入,重 新开始计数,使生成脉冲加宽。 计数过程中OUT状态:保持低电平 计数结束OUT状态:发生由低到高的正跳变。 计数器回0后,是否重新计数:否 应用:用于定时
8253、8255A、8259A初始化程序
8253、8255A、8259A初始化程序8253的初始化程序1.确定端口地址:0310H、0312H、0314H、0316H2.确定工作方式(假设工作方式为):通道0,方式3通道1,方式1通道2,方式53.确定计数值:通道0:N0=1MHz/2KHz=500通道1:N1=480us/(1/1mhz)=480通道2:N2=264确定控制字:通道0:00110111B通道1:01110011B通道2:10011011B对3个通道的初始化程序如下:;通道0初始化程序MOV DX, 316HMOV AL,00110111BOUT DX,ALMOV DX,310HMOV AL,00HOUT DX, ALMOV AL,05HOUT DX,AL;通道1的初始化程序MOV DX, 316HMOV AL, 001110011B OUT DX, ALMOV DX, 312HMOV AL, 80HOUT DX, ALMOV AL, 04HOUT DX, AL;通道2初始化程序MOV DX, 316HMOV AL, 10011011B OUT DX, ALMOV DX, 314HMOV AL,26HOUT DX,AL; MOV AL,00H; OUT DX,AL8255A初始化程序对8255A进行初始化,要求端口A工作于方式1,输入;端口B 工作于方式0,输出;端口C的高4位配合端口A工作,低4位为输入。
1.确定控制字端口地址:006CH。
2.确定工作方式:端口A,工作方式1,输入端口B,工作方式0,输出端口C,C0为输入,C4为配合工作3.确定方式选择控制字:1 011 100 1H(B9H)对3个端口的初始化程序如下MOV AL,B9HMOV DX,006CHOUT DX,AL另一个8255A初始化程序已知某8255A在系统中占用88~8BH号端口地址,现欲安排其PA,PB,PC口全部为输出,PA,PB口均工作于方式0模式,并将PC6置位,使PC3复位,试编写出相应的初始化程序:1.确定端口地址控制字以及PC口置位复位端口,8BH2.确定工作方式3.确定方式选择控制字MOV AL,80HOUT 8BH,ALMOV AL,ODHOUT 8BH,ALMOV AL,06HOUT 8BH,AL在8259A内部有两组寄存器:一组为命令寄存器,用于存放CPU写入的初始化命令字ICW1~ICW4(initialization command words);另一组为操作命令寄存器,用于存放CPU写入的操作命令字OCW1~OCW3(operation command words)。
微机原理与接口技术82558253初始化编程原
微机原理与接口技术8255 8253初始化编程原微机原理与接口技术--8255|8253初始化编程原理解析000微机原理与接口技术研究方向:指令数据在计算机中是如何传输的;(1)控制总线(2)地址总线(3)数据总线在计算机中要研究数据是如何传输的,就是知道计算机是如何寻址的(地址译码)、CPU与外设是如何进行数据交互的、CPU中的控制器是如何控制外设进行数据传输的;一、8253芯片74LS138芯片的工作原理:当一个选通端(G1)为高电平,另外选通端G2A、G2B为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端一低电平译出;(1)8253与8086CPU的连接方式注意:z如果8253与8位数据总线的微机相连,只要将A1A0分别与地址总线的最低两位A1A0相连即可。
z如果系统采用的是8086CPU,则数据总线为16位。
CPU在传送数据时,总是将低8位数据送往偶地址端口,将高8位数据送到奇地址端口。
偶地址端口的数据总是通过低8位数据总线送到CPU,奇地址端口的数据总是通过高8位数据总线送到CPU。
当仅具有8位数据总线的存储器或I/O接口芯片与8086的16位数据总线相连时,既可以连到高8位数据总线,也可以接在低8位数据总线上。
在实际设计系统时,常将这些芯片的数据线D7~D0接到系统数据总线的低8位,这样,CPU就要求芯片内部的各个端口为偶地址(地址总线的A0=0)。
应改用地址总线中的A2A1实现端口选择,即将A2连到8253的A1引脚,而将A1与8253的A0引脚相连。
(如上如所示)例题解析:5.若8253的地址为:04H-07H,要使计数器2工作于方式2,按二进制计数,计数值为02F0H,写出初始化程序。
若要读取通道1的16位计数值,写出其程序。
(1)初始化程序的步骤二、初始化编程步骤和门控信号的功能1.8253的初始化编程步骤接通电源时,8253处于未定义状态,在使用之前,必须用程序把它们初始化为所需的特定模式,这个过程称为初始化编程。
可编程定时器计数器8253及其应用
第八章可编程定时器/计数器8253及其应用【回顾】可编程芯片的概念,端口的概念。
【本讲重点】定时与计数的基本概念及其意义,定时/计数器芯片Intel8253的性能概述,内、外部结构及其与CPU的连接。
8.1 定时与计数1.定时与计数在微机系统或智能化仪器仪表的工作过程中,经常需要使系统处于定时工作状态,或者对外部过程进行计数。
定时或计数的工作实质均体现为对脉冲信号的计数,如果计数的对象是标准的内部时钟信号,由于其周期恒定,故计数值就恒定地对应于一定的时间,这一过程即为定时,如果计数的对象是与外部过程相对应的脉冲信号(周期可以不相等),则此时即为计数。
2.定时与计数的实现方法(1) 硬件法专门设计一套电路用以实现定时与计数,特点是需要花费一定硬设备,而且当电路制成之后,定时值及计数范围不能改变。
(2) 软件法利用一段延时子程序来实现定时操作,特点,无需太多的硬设备,控制比较方便,但在定时期间,CPU不能从事其它工作,降低了机器的利用率。
(3) 软、硬件结合法即设计一种专门的具有可编程特性的芯片,来控制定时和计数的操作,而这些芯片,具有中断控制能力,定时、计数到时能产生中断请求信号,因而定时期间不影响CPU的正常工作。
8.2 定时/计数器芯片Intel8253Intel8253是8086微机系统常用的定时/计数器芯片,它具有定时与计数两大功能。
一、8253的一般性能概述1.每个8253芯片有3个独立的16位计数器通道;2.每个计数器通道都可以按照二进制或二—十进制(BCD码)计数;3.每个计数器的计数速率可以高达2MHz;4.每个通道有6种工作方式,可以由程序设定和改变;5.所有的输入、输出电平都与TTL兼容。
二、8253内部结构8253的内部结构如图8-1所示,它主要包括以下几个主要部分:图8-1 8253的内部结构1.数据总线缓冲器实现8253与CPU数据总线连接的8位双向三态缓冲器,用以传送CPU向8253的控制信息、数据信息以及CPU从8253读取的状态信息,包括某时刻的实时计数值。
第八章 可编程计数器定时器8253及其应用
LSB=4 CR=4
CLK GATE
OUT CRCE 4 CRCE 2 4 CRCE 2 4 CRCE 2 4 CRCE 2 4
8253方式3 计数初值为奇数时的波形 CW=16H WR LSB=5
CR=5
CLK GATE OUT
CRCE
5 4
CRCE 2 5 2
CRCE 5 4
CRCE 4 3
8253方式0
两种特殊情况:
中途改变计数初值
CW=10H WR CR=3 CLK GATE OUT CR=3 LSB=3
LSB=3
CRCE 3 2
CRCE 1 3 2
1
0
8253方式1
2、方式1——可编程单稳态输出方式
时序图
CW=12H WR
LSB=3 CR=3
CLK GATE
OUT
CRCE
CRCE 3 2
1
0
8253方式1
工作过程
① 写入控制字,OUT立即变为高,并保持不变。 ② 写计数初值N,只有当GATE形成一个上升沿时,才在
下一个时钟脉冲的下降沿,将n装入实际计数器,同 时OUT由高变为低,开始减1计数(再来一个脉冲)。
③ 计数期间,OUT一直为低;当计数结束(计数值为0)
8253综述
Intel 8253是一种可编程的计数器/定时器芯片。 8253内部具有3个独立的16位计数器通道,通过对
它进行编程,每个计数器通道均有6种工作方式,并 且都可以按2进制或10进制2种格式进行计数,最高 计数频率能达到2MHz。 8253还可用作可编程方波频 率产生器、分频器、程控单脉冲发生器等。
教材第八章内容
第八章 可编程计数器/定时器8253及应用
微机原理——8253
1、若8253的地址为04H~07H,要使用计数器1工作在方式0,仅用8位二进制计数,计数值为128,初始化程序为(可能端口地址,工作方式,计数器初始值会改变)解:MOV AL , 50HOUT 07H , ALMOV AL , 80HOUT 05H , AL2、试编写一段程序,按下列要求设置如下图中8254的三个计数器;计数器0:二进制计数,在操作方式0下操作,计数初值为1234H解:MOV AL , 30HOUT 4CH , ALMOV AL , 34HOUT 40H , ALMOV AL , 12HOUT 40H , AL3、要求8253输出周期为100ms的方波。
设系统时钟为2MHz,口地址为1E0H~1E3H,CPU 为8088解:计数器初值N=100ms /(1/ 2MHz )=20×10000>65535,故需要两个计数通道协助完成,设选用通道0和通道1MOV AL , 17HMOV DX , 1E3HOUT DX , ALMOV AL , 20HMOV DX , 1E0HOUT DX , ALMOV AL , 57HMOV DX , 1E3HOUT DX , ALMOV AL , 00MOV DX , 1E1H4、若8253的地址为04H~07H,要使用计数器0工作在方式1,按BCD计数,计数值为3000,初始化程序为解:MOV AL , 23HOUT 07H , ALMOV AL , 30HOUT 04H , AL5、若8253的地址为04H~07H,要使用计数器2工作在方式2,按二进制计数,计数值为02F0H,初始化程序为解:MOV AL , 0B4HOUT 07H , ALMOV AL , 0F0HOUT 06H , ALMOV AL , 02HOUT 06H , AL6、用计数器0,工作在方式1,按BCD码计数,计数值为5080H,初始化编程如下,端口地址为F8H~FBHMOV AL , 33HOUT 0FBH , ALMOV AL , 80HOUT 0F8H , ALMOV AL , 50HOUT 0F8H , AL7、设8253芯片的端口地址为230H~233H。
8253初始化程序
8253的初始化编程8253的初始化编程内容:一是首先向控制寄存器写入控制字,以选定计数通道(三个中之一),规定该计数的工作方式和计数方式以及计数初值的长度和装入顺序(初值写入方式);二是向已选定的计数器按控制字的要求写入计数初值。
8253初始化的要求:(1)对每个计数器,控制字必须写在计数值之前。
这是因为计数器的读/写格式由它的控制字决定。
(2)计数值必须按控制字所规定的格式写入。
若控制字规定只写8位,只需写入一次(8位)计数值即可(规定写低8位则高8位自动置0,规定写高8位则低8位自动置0);规定写16位时必须写两次,先写低8位,后写高8位。
当初值为0时,也要分两写入,因在二进制计数时,“0”表示65336,在BCD码计数时“0”表示10000=104。
(3)对所有方式计数器都可以在计数过程中或计数结束后改变计数值,重写计数值也必须遵守控制字所规定的格式,并且不会改变当前计数器的工作方式。
(4)计数值不能直接写到减1计数器中,而只能写入计数值寄存器中,并由写操作之后的下一个CLK脉冲将计数值寄存器的内容装入减1计数器开始计数。
(5)初始化编程必须明确各个计数器的控制字和计数值不是写到同一个地址单元。
各个计数器的控制字各自独立确定,但它们都写入同一个端口地址(控制字寄存器)中,各个计数器的计数值则根据需要独立确定并写入各自计数器的相应寄存器中。
例1:设8086系统中8253的三个计数器的端口地址为060H,062H和064H,控制口地址为066H,要求计数器0为方式 1,按BCD计数;计数初值为1800D,计数器1为方式0,按二进制计数;计数初值为1234H,计数器2为方式3,按二进制计数;当计数初值为065H时,试分别写出计数器0,1,2的初始化程序。
计数器0的初始化:计数0的控制字:00100011B=23HMOV AL,23H ;计数器0的控制字OUT 0 66H,AL ;控制字写入8253的控制器MOV AL,18H ;取计数初值的高8位,低8位00可不送OUT 060H,AL ;计数初值送计数器0端口计数器1和初始化:计数器1的控制字:01110000B=70HMOV AL,70H ;计数器的控制字:方式0,送高8位和低8位,二进制计数OUT 066H,AL ;控制字写入8253的控制器MOV AL,034H ;取计数初值的低8位OUT 062H,AL ;计数初值的低8位,写入计数器1端口MOV AL, 12H ;取计数初值的高8位OUT 062H,AL ;计数初值的高8位写入计数器1端口计数器2的初始化:计数器2的控制字:10010110B=96HMOV AL,96H ;计数器2的控制字96H:方式3,只送低8位,二进制计数OUT 066H,AL ;控制字写入8253的控制口MOV AL,056H ;计数初值的低8位OUT 064H,AL ;计数初值的低8位写入计数器2的端口例2:要求读出计数器2的当前计数值,并检查是否为全“1”。
微型计算机原理与接口技术第八章课后答案
第八章1. 8253芯片有哪几个计数通道?每个计数通道可工作于哪几种工作方式?这些操作方式的主要特点是什么?答:8253内部包含3个完全相同的计数器/定时器通道,即0~2计数通道,对3个通道的操作完全是独立的。
8253的每个通道都有6种不同的工作方式。
方式0——计数结束中断方式:当对8253的任一个通道写入控制字,并选定工作于方式0时,该通道的输出端OUT立即变为低电平。
要使8253能够进行计数,门控信号GATE 必须为高电平。
经过n十1个脉冲后,计数器减为0,这时OUT引脚由低电平变成高电平。
OUT引脚上的高电平信号,一直保持到对该计数器装入新的计数值,或设置新的工作方式为止。
在计数的过程中,如果GATE变为低电平,则暂停减1计数,计数器保持GATE有效时的值不变,OUT仍为低电平。
待GATE回到高电平后,又继续往下计数。
方式1——可编程单稳态输出方式:当CPU用控制字设定某计数器工作于方式1时,该计数器的输出OUT立即变为高电平。
GATE出现一个上升沿后,在下一个时钟脉冲的下降沿,将n装入计数器的执行部件,同时,输出端OUT由高电平向低电平跳变。
当计数器的值减为零时,输出端OUT产生由低到高的正跳变,在OUT引脚上得到一个n个时钟宽度的负单脉冲。
在计数过程中,若GATE产生负跳变,不会影响计数过程的进行。
但若在计数器回零前,GATE又产生从低到高的正跳变,则8253又将初值n装入计数器执行部件,重新开始计数,其结果会使输出的单脉冲宽度加宽。
方式2——比率发生器:当对某一计数通道写入控制字,选定工作方式2时,OUT端输出高电平。
如果GATE为高电平,则在写入计数值后的下一个时钟脉冲时,将计数值装入执行部件,此后,计数器随着时钟脉冲的输入而递减计数。
当计数值减为1时,OUT端由高电乎变为低电平,待计数器的值减为0时,OUT引脚又回到高电平,即低电平的持续时间等于一个输入时钟周期。
与此同时,还将计数初值重新装入计数器,开始一个新的计数过程,并由此循环计数。
可编程定时计数器8253
OUT DX,AL MOV AL,04H;计数值低字节 MOV DX,04C4H;设置计数器2地址 OUT DX,AL;写入计数值低字节 MOV AL,03H;计数值高字节 OUT DX,AL;写入计数值高字节
8位的控制寄存器 16位的初值寄存器 16位计数执行单元CE 16位输出锁存器OL
CLK:计数时钟,输入。用于输入定时脉冲或计数脉 冲信号。计数器用其下降沿作减1计数。
GATE:门控信号,输入,由外部信号通过GATE端控 制计数器的启动计数和停止计数的操作。
OUT:输出信号。在不同的模式下,可输出不同波形。
8253的工作方式-方式4(软件触发选通)
软件启动,不自动重复
8253的工作方式-方式4(软件触发选通)
GATE为低
8253的工作方式-方式4(软件触发选通)
计数过程中重新写入计数初值
8253的工作方式-方式5(硬件触发选通)
硬件触发选通方式,完全由GATE端引入 的触发信号控制定时和计数
MOV AL,00011010B;二进制,方式5,写低字节,计数器0 MOV DX,04C6H;设置8253控制口地址 OUT DX,AL;写入工作方式控制字 MOVAL,46H;计数值的低字节 MOVDX,04C0H;设置8253计数器0地址 OUT DX,AL;写入计数值的低字节 MOV AL,01110011B;BCD数,方式1,写16位数,计数器1 MOV DX,04C6H;设置8253控制器地址 OUT DX,AL;写入工作方式控制字 MOV AL,00H;计数值低字节 MOV DX,04C2H;设置8253计数器1地址 OUT DX,AL;写入计数值低字节
8253的初始化编程
8253的初始化编程与应用举例8253的初始化编程内容:一是首先向控制寄存器写入控制字,以选定计数通道(三个中之一),规定该计数的工作方式和计数方式以及计数初值的长度和装入顺序(初值写入方式);二是向已选定的计数器按控制字的要求写入计数初值。
8253初始化的要求:(1)对每个计数器,控制字必须写在计数值之前。
这是因为计数器的读/写格式由它的控制字决定。
(2)计数值必须按控制字所规定的格式写入。
若控制字规定只写8位,只需写入一次(8位)计数值即可(规定写低8位则高8位自动置0,规定写高8位则低8位自动置0);规定写16位时必须写两次,先写低8位,后写高8位。
当初值为0时,也要分两写入,因在二进制计数时,“0”表示65336,在BCD码计数时“0”表示10000=104。
(3)对所有方式计数器都可以在计数过程中或计数结束后改变计数值,重写计数值也必须遵守控制字所规定的格式,并且不会改变当前计数器的工作方式。
(4)计数值不能直接写到减1计数器中,而只能写入计数值寄存器中,并由写操作WH之后的下一个CLK脉冲将计数值寄存器的内容装入减1计数器开始计数。
(5)初始化编程必须明确各个计数器的控制字和计数值不是写到同一个地址单元。
各个计数器的控制字各自独立确定,但它们都写入同一个端口地址(控制字寄存器)中,各个计数器的计数值则根据需要独立确定并写入各自计数器的相应寄存器中。
例1:设8086系统中8253的三个计数器的端口地址为060H,062H和064H,控制口地址为066H,要求计数器0为方式1,按BCD计数;计数初值为1800D,计数器1为方式0,按二进制计数;计数初值为1234H,计数器2为方式3,按二进制计数;当计数初值为065H时,试分别写出计数器0,1,2的初始化程序。
计数器0的初始化:计数0的控制字:00100011B=23HMOV AL,23H ;计数器0的控制字OUT 66H,AL ;控制字写入8253的控制器MOV AL,18H ;取计数初值的高8位,低8位00可不送OUT 060H,AL ;计数初值送计数器0端口计数器1和初始化:计数器1的控制字:01110000B=70HMOV AL,70H ;计数器的控制字:方式0,送高8位和低8位,二进制计数OUT 066H,AL ;控制字写入8253的控制器MOV AL,034H ;取计数初值的低8位OUT 062H,AL ;计数初值的低8位,写入计数器1端口MOV AL,12H ;取计数初值的高8位OUT 062H,AL ;计数初值的高8位写入计数器1端口计数器2的初始化:计数器2的控制字:10010110B=96HMOV AL,96H ;计数器2的控制字96H:方式3,只送低8位,二进制计数OUT 066H,AL ;控制字写入8253的控制口MOV AL,065H ;计数初值的低8位OUT 064H,AL ;计数初值的低8位写入计数器2的端口例2:要求读出计数器2的当前计数值,并检查是否为全“1”。
实验三 8253计数器定时器的应用
实验三 8253计数器/定时器的应用一、实验目的:学习掌握8253用作定时器的编程原理;二、8253应用小结I8253和I8254都是可编程计数器,它们的引脚兼容,功能与使用方法相同。
I8254是I8253的改进型。
1.微机系统定时器和实验箱定时器(1)微机系统使用的8254,其3个通道均有固定的用途:0号计数器为系统时钟源,每隔55ms向系统主8259IR0提一次中断请求;1号计数器用于动态存储器的定时刷新控制;2号计数器为系统的发声源。
用户在使用微机系统的时候,可以使用0号和2号计数器,但不能改变对1号计数器的初始化。
(2)实验箱上的8253,其数据线D7—D0,地址线A1、A0和控制线RD、WR通过总线驱动卡和微机系统的三总线相连。
除此之外,三个计数器的引出段和片选端都是悬空的,这意味着实验箱上的8253的三个计数器都归用户使用,你可以单独使用其中的一个计数器,也可以串联使用其中的2个或3个计数器。
(3)8253计数器的输入信号,其频率不能超过2MHz,否则长时间使用,芯片过热,容易烧毁。
2.8253初始化使用8253前,要进行初始化编程。
初始化编程的步骤是:①向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。
②向使用的计数器端口写入计数初值。
3.8253控制字D7D6=00:使用0号计数器,D7D6=01:使用1号计数器D7D6=10:使用2号计数器,D7D6=11:无效D5D4=00:锁存当前计数值D5D4=01:只写低8位(高8位为0),读出时只读低8位D5D4=10:只写高8位(低8位为0),读出时只读高8位D5D4=11:先读/写低8位,后读/写高8位计数值D3D2D1=000:选择方式0,D3D2D1=001:选择方式1D3D2D1=X10:选择方式2,D3D2D1=X11:选择方式3D3D2D1=100:选择方式4,D3D2D1=101:选择方式5D0=0:计数初值为二进制,D0=1:计数初值为BCD码数三、实验电路蜂鸣器电路四、实验内容1.完成一个音乐发生器,通过蜂鸣器放出音乐,并在数码管上显示乐谱。
8253的工作方式解读
8253的工作方式1.方式0 计数结束产生中断8253用作计数器时一般工作在方式0。
所谓计数结束产生中断,是指在计数值减到0时,输出端(OUT)产生的输出信号可作为中断申请信号,要求CPU进行相应的处理。
方式0有如下特点:① 当控制字写进控制字寄存器确定了方式0时,计数器的输出(OUT端口)保持低电平,一直保持到计数值减到0。
② 计数初值装入计数器之后,在门控GATE信号为高电平时计数器开始减1计数。
当计数器减到0时输出端OUT才由低变高,此高电平输出一直保持到该计数器装入新的计数值或再次写入方式0控制字为止。
若要使用中断,可以计数到0的输出信号向CPU发出中断请求,申请中断。
③ GATE为计数控制门,方式0的计数过程可由GATE控制暂停,即GATE=1时,允许计数;GATE=0时,停止计数。
GATE 信号的变化不影响输出OUT端口的状态。
④ 计数过程中,可重新装入计数初值。
如果在计数过程中,重新写入某一计数初值,则在写完新计数值后,计数器将从该值重新开始作减1计数。
2.方式1 可编程的单拍负脉冲可编程的单拍负脉冲又称为单稳态输出方式,简称单稳定时。
方式1的特点是:① CPU写入控制字后,计数器输出OUT端为高电平作为起始电平,在写入计数值后计数器并不开始计数(不管此时GATE 是高电平还是低电平),而要由外部门控GATE脉冲上升沿启动,并在上升沿之后的下一个CLK输入脉冲的下降沿开始计数。
② GATE上升沿启动计数的同时,使输出OUT变低,每来一个计数脉冲,计数器作减一计数,直到计数减为 0时,OUT 输出端再变为高电平。
OUT端输出的单拍负脉冲的宽度为计数初值乘以CLK端脉冲周期。
设计数初值为N,则单拍脉冲宽度为N个CLK时钟脉冲周期。
③ 如果在计数器未减到0时,GATE又来一触发脉冲,则由下一个时钟脉冲开始,计数器将从初始值重新作减1计数。
当减至0时,输出端又变为高电平。
这样,使输出脉冲宽度延长。
8353练习题及答案
8353练习题及答案一、简答题1、8253的功能作用是什么?它有哪些工作方式?答案:8253起着计数或定时的作用,提供可编程的三个16位定时/计数器通道.它有方式0到方式5共6种工作方式,分别是:计数结束中断方式,可编程单程方式,频率发生器,方波发生器,软件触发的选通信号,硬件触发的选能信号.2、8253定时/计数器的定时与计数方式有什么区别?8254在方式0工作时,各通道的CLK、GATE信号有什么作用?各通道的控制字地址都相同,8254是怎样区分的?解:(1)8254作为计数器和定时器使用时的区别:用途不同:定时器用于产生连续的、周期恒定的信号;计数器用于对输入脉冲进行计数。
对CLK输入的信号要求不同:用作定时器时,CLK输入的信号必须有相同的周期;用作计数器时,允许CLK输入的信号没有固定的周期;使用方式不同:定时器方式下计数的过程周而往复,重复进行;计数器方式下计数的过程只进行一次,除非重新初始化,或者用GA TE重新触发;(2)8254工作在方式0时,CLK端输入计数用的脉冲信号;GATE信号为高电平时,对CLK端输入的脉冲进行计数;GATE信号为低电平时,暂停计数;GATE信号重新为高电平后,恢复原先的计数。
(3)由8254的方式控制字中的D7、D6两位来选择计数通道。
3、设8253计数器的时钟输入频率为1.91MHz,为产生25KHz的方波输出信号,应向计数器装入的计数初值为多少?4、、设8253的计数器0,工作在方式1,计数初值为2050H;计数器1,工作在方式2,计数初值为3000H;计数器2,工作在方式3,计数初值为1000H。
如果三个计数器的GATE都接高电平,三个计数器的CLK 都接2MHz时钟信号,试画出OUT0、OUT1、OUT2的输出波形。
5、试简述微机系统中定时器/计数器的必要性和重要性,以及定时实现的常用方法。
6、、可编程定时器/计数器8253/8254有几个通道?各通道有几种工作方式?各种工作方式的主要特点是什么?8254与8253有什么区别?7、8253芯片有哪几个计数通道?每个计数通道可工作于哪几种工作方式?这些操作方式的主要特点是什么?答:8253内部具有三个独立的16位计数通道:通道0、通道1、通道2.8253每个计数通道可工作于6中不同的工作方式:(1)方式0——计数结束中断方式(Interrupt on Terminal Count),在写入控制字后,输出端即变低,计数结束后,输出端由低变高,常用该输出信号作为中断源。
8253计数器初始化编程
8253计数器级联
FIN0=2MHz,FOUT0提供 微秒刷新信号(1000Hz), FOUT1提供秒刷新信号(1Hz), FOUT2提供分刷新信号,计数 器0工作在方式3下,二进制计数; 计数器1工作在方式2下,BCD码 计数;计数器2工作在方式2下, 二进制计数。
N0=2000 N1=1000 N2=60
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
1 0 0 0 0 0 1 1 1 1 1 0 1 1 0 0(01,10,11)
83ECH,83EDH,83EEH,83EFH
初始化编程
• MOV DX, 83EFH • MOV AL, CW0 • OUT DX,AL • ;写时间常数 • MOV DX, 83ECH • MOV AX, 1000 • OUT DX, AL • MOV AL,AH • OUT DX,AL
8253计数器初始化编程
步骤:先写入控制字,在写时间常数
以计数器0为例:
;写入控制字(通过控制口地址) MOV DX, CONTROL; 假设CONTROL为控制口地址 MOV AL, CW0 ;CW0为计数器0的控制值 OUT DX,AL ;写时间常数 MOV DX, CONT0;CONT0为计数器0的端口地址 MOV AX, N0;N0为计数器0的时间常数,16位 OUT DX, AL MOV AL,AH OUT DX,AL
8253的初始化编程
8253的初始化编程8253的初始化编程内容:一是首先向控制寄存器写入控制字,以选定计数通道(三个中之一),规定该计数的工作方式和计数方式以及计数初值的长度和装入顺序(初值写入方式);二是向已选定的计数器按控制字的要求写入计数初值.8253初始化的要求:(1)对每个计数器,控制字必须写在计数值之前.这是因为计数器的读/写格式由它的控制字决定.(2)计数值必须按控制字所规定的格式写入.若控制字规定只写8位,只需写入一次(8位)计数值即可(规定写低8位则高8位自动置0,规定写高8位则低8位自动置0);规定写16位时必须写两次,先写低8位,后写高8位.当初值为0时,也要分两写入,因在二进制计数时,“0”表示65336,在BCD码计数时“0”表示10000=104.(3)对所有方式计数器都可以在计数过程中或计数结束后改变计数值,重写计数值也必须遵守控制字所规定的格式,并且不会改变当前计数器的工作方式.(4)计数值不能直接写到减1计数器中,而只能写入计数值寄存器中,并由写操作WR之后的下一个CLK脉冲将计数值寄存器的内容装入减1计数器开始计数.(5)初始化编程必须明确各个计数器的控制字和计数值不是写到同一个地址单元.各个计数器的控制字各自独立确定,但它们都写入同一个端口地址(控制字寄存器)中,各个计数器的计数值则根据需要独立确定并写入各自计数器的相应寄存器中.例1:设8086系统中8253的三个计数器的端口地址为060H,062H和064H,控制口地址为066H,要求计数器0为方式 1,按BCD计数;计数初值为1800D,计数器1为方式0,按二进制计数;计数初值为1234H,计数器2为方式3,按二进制计数;当计数初值为065H时,试分别写出计数器0,1,2的初始化程序.计数器0的初始化:计数0的控制字:00100011B=23HMOV AL,23H ;计数器0的控制字OUT 0 66H,AL ;控制字写入8253的控制器MOV AL,18H ;取计数初值的高8位,低8位00可不送OUT 060H,AL ;计数初值送计数器0端口计数器1和初始化:计数器1的控制字:01110000B=70HMOV AL,70H ;计数器的控制字:方式0,送高8位和低8位,二进制计数OUT 066H,AL ;控制字写入8253的控制器MOV AL,034H ;取计数初值的低8位OUT 062H,AL ;计数初值的低8位,写入计数器1端口MOV AL, 12H ;取计数初值的高8位OUT 062H,AL ;计数初值的高8位写入计数器1端口计数器2的初始化:计数器2的控制字:10010110B=96HMOV AL,96H ;计数器2的控制字96H:方式3,只送低8位,二进制计数OUT 066H,AL ;控制字写入8253的控制口MOV AL,056H ;计数初值的低8位OUT 064H,AL ;计数初值的低8位写入计数器2的端口例2:要求读出计数器2的当前计数值,并检查是否为全“1”.8253在读取计数器的当前计数值时,必须分两步进行.首先发一锁存命令(即控制字中RL1RL0=00),将当前计数值锁存到输出锁存器中.第二步执行读操作,即用IN指令将锁存器中内容读入CPU.假设计数初值只有低8位,设其程序段如下(控制口地址为066H,计数器2的口地址为064H):KEEP:MOV AL,80H ;计数器2的锁存命令OUT 066H,AL ;锁存命令写入控制寄存器IN AL,064H ;读输出锁存器中的当前计数值(从计数器2端口读)CMP AL,0FFH ;比较当前计数值是否为全“1”JME KEEP ;非全“1”继续读HLT ;为全“1”暂停8253的应用举例例1:将8253的计数器1作为5ms定时器,设输入时钟频率为200kHz,试编写8253的初始化程序.(1)计数初值N计算已知输入时钟CLK频率为200kHz,则时钟周期为T=1/f=1/200kHz=5μs,于是计数初值N为:N=5ms/T=5ms/5μs=1000.(2)确定控制字按题意选计数器1,按BCD码计数,工作于方式0,由于计数初值N=1000,控制字D5D4应为11,于是8253的控制字为:01110001B=71H.(3)选择8253各端口地址设计数器1的端口地址为3F82H,控制口地址为3F86H.(4)初始化程序如下MOV AL,71H ;控制字MOV DX,3F68H ;控制口地址OUT DX,AL ;控制字送8253控制寄存器MOV DX,3F82H ;计数器1端口地址MOV AL,00 ;将计数初值N=1000的低8位写入计数器1OUT DX,ALMOV AL,10 ;将N的高8位写入计数器1OUT DX,AL例2:以8086为CPU的某微机系统中使用了一块8253芯片,其通道端口地址为308H, 30AH,30CH,控制口地址为30EH,3个通道使用同一输入时钟,频率为2MHz,要求完成如下功能:利用计数器0采用硬件触发,输出宽度等于时钟周期的单脉冲,定时常数为36H;利用计数器1输出频率为2kHz的对称方波;利用计数器2产生宽度为0.6ms的单脉冲,试设计该定时系统硬件电路和初始化程序.(1)硬件电路设计硬件电路设计主要是地址译码电路设计及时8253与CPU间的连接.根据给定的端口地址可知,地址总线低位部分的 A9~A0分别为:A9A8=11,A7~A4=0000,A3A2A1=100~111,A0=0,由它们经译码器译码产生8253的片选信号CS, 8253的数据线D7~D0必须与系统数据总线的低8位相连,8253的端口的选择信号A1A0应连系统地址的A2A1.根据上述要求,译码器应选3-8译码器74LS138.该译码器有3个代码输入端(C,B,A),输入3位代码决定译码信号从 Y0~Y7中哪一个输出,本例中显然应以Y2输出.(2)初始化编程根据题意要求,对3个通道的工作方式,计数初值确定如下:由CLK0~CLK2=2MHz可得,时钟周期T=1/f=1/2MHz=0.5μs.选计数器0:选择方式5,门控信号GATE应接一正跳变信号,OUT端当计数为0时产生一个宽度等于时钟周期的单脉冲.计数系数为36,用BCD计数.所以,计数器0的控制字应为00011011B=1BH.选计数器1:选择方式3,GATE按+5V,CLK1=2MHz输出方波频率为2kHz,所以,计数常数N1=2MHz/2kHz=1000,采用 BCD计数,于是计数器1的控制字为:01110111B=77H.选计数器2:选择方式1,以构成一个单稳态电路,输出脉冲宽度由计数常数N2决定,计数常数N2=600μs/0. 5μs=1200,采用BCD 计数,于是计数器2的控制字为:10110011B=B3H.根据以上分析可得3个计数通道的初始化程序如下.计数通道0的初始化程序:MOV DX,30EH ;8253的控制口地址MOV AL,1BH ;计数通道0的控制字,低8位,方式5,BCD计数OUT DX,AL ;控制字写入控制口MOV DX,308H ;计数器0的端口地址MOV AL,036H ;计数初值的低8位OUT DX,AL ;低字节写入计数器0端口计数通道1的初始化程序:MOV DX,30EH ;8253的控制口地址MOV AL,77H ;计数通道1的控制字,先写低字节,后写高字节,方式3,BCD计数OUT DX,AL ;控制字写入控制口MOV DX,30AH ;计数通道1的端口地址MOV AL,00H ;计数初值的低字节OUT DX,AL ;低字节写入计数通道1MOV AL,10D ;计数初值的高字节OUT DX,AL ;高字节写入计数通道1计数通道2的初始化程序MOV DX,30EH ;8253的控制口地址MOV AL,B3H ;计数通道2的控制字,先写低字节,后写高字节,方式1,BCD计数OUT DX,AL ;控制字写入控制口MOV DX,30CH ;计数通道的端口地址MOV AL,00H ;计数初值的低字节OUT DX,AL ;低字节写入计数通道MOV AL,12D ;计数初值的高字节OUT DX,AL ;高字节写入计数通道2计数通道2初始化程序:MOV AL,B0H ;计数通道2的控制字OUT 05FH,AL ;控制字写入控制器MOV AL,068H ;计数初值的低8位OUT 05DH,AL ;计数初值的低8位写入计数通道2。
可编程定时器计数器8253及其应用
合用标准文案第八章可编程准时器 / 计数器 8253 及其应用【回顾】可编程芯片的看法,端口的看法。
【本讲重点】准时与计数的基本看法及其意义,准时/ 计数器芯片 Intel8253的性能归纳,内、外面结构及其与CPU的连接。
准时与计数1.准时与计数在微机系统或智能化仪器仪表的工作过程中,经常需要使系统处于准时工作状态,也许对外面过程进行计数。
准时或计数的工作实质均表现为对脉冲信号的计数,若是计数的对象是标准的内部时钟信号,由于其周期恒定,故计数值就恒定地对应于必然的时间,这一过程即为准时,若是计数的对象是与外面过程相对应的脉冲信号(周期能够不相等),则此时即为计数。
2.准时与计数的实现方法(1)硬件法特地设计一套电路用以实现准时与计数,特点是需要开销必然硬设备,而且当电路制成此后,准市价及计数范围不能够改变。
(2)软件法利用一段延时子程序来实现准时操作,特点,无需太多的硬设备,控制比较方便,但在准时期间, CPU不能够从事其余工作,降低了机器的利用率。
(3)软、硬件结合法即设计一种特地的拥有可编程特点的芯片,来控拟定时和计数的操作,而这些芯片,拥有中断控制能力,准时、计数到时能产生中断央求信号,所以准时期间不影响CPU的正常工作。
准时/计数器芯片Intel8253Intel8253是8086微机系统常用的准时/计数器芯片,它拥有准时与计数两大功能。
一、 8253 的一般性能归纳1.每个 8253 芯片有 3 个独立的 16 位计数器通道;2.每个计数器通道都能够依照二进制或二—十进制(BCD码) 计数;3.每个计数器的计数速率能够高达2MHz;4.每个通道有 6 种工作方式,能够由程序设定和改变;5.所有的输入、输出电平都与TTL 兼容。
二、 8253 内部结构8253 的内部结构如图8-1 所示,它主要包括以下几个主要部分:图 8-1 8253的内部结构1.数据总线缓冲器实现 8253 与 CPU数据总线连接的 8 位双向三态缓冲器,用以传达 CPU向 8253 的控制信息、数据信息以及 CPU从 8253 读取的状态信息,包括某时辰的实时计数值。
8253 的初始化及编程_微型计算机原理及应用教程(第2版)_[共2页]
276
表9-8 253读/写操作及端口地址
9.4.3 8253的初始化及编程
每个计数器可通过输入/输出指令对其进行访问。
8253有两种工作状态,即计数模式、定时模式;有两个计数方式,即按二进制计数、按十进制(BCD码计数);还有6种工作方式,即方式0、方式1、方式2、方式3、方式4、方式5。
1.8253的初始化
使用8253必须首先进行初始化编程,初始化编程的工作有两点:一是向控制寄存嚣写入方式控制字,以选择计数器,确定工作方式,指定计数器计数初值的长度和装入顺序以及计数初值的码制;二是向已选定的计数器按方式控制字的要求写入计数初值。
如前所述,在有些方式下,写入计数初值后此计数器就开始工作了,而有的方式需要外界门控制信号的触发启动。
在初始化编程时,某一计数器的控制字和计数初值是通过两个不同的端口地址写入的。
任一个计数器的控制字都写入控制字寄存器(地址总线低3位A2A1A0=110),由控制字中的D7D6来确定是哪一个计数器的控制字;而计数初值是由各个计数器的端口地址写入的。
初始化编程的步骤如下。
(1)写入计数器控制字,规定计数器的工作方式。
(2)写入计数初值。
①若规定只写低8位,则写入的为计数初值的低8位,高8位自动置0。
②若规定只写高8位,则写入的为计数初值的高8位,低8位自动置0。
③若是16位计数初值,则分两次写入,先写入低8位,再写入高8位。
【例9-18】 8253初始化编程举例。
若要用计数器0,工作在方式1,按二—十进制计数,计数初值为5080H,则初始化编程的步骤如下。
(1)确定计数器控制字,控制字格式如下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8253的初始化编程内容:一是首先向控制寄存器写入控制字,以选定计数通道(三个中之一),规定该计数的工作方式和计数方式以及计数初值的长度和装入顺序(初值写入方式);二是向已选定的计数器按控制字的要求 写入计数初值。
8253初始化的要求:
(1)对每个计数器,控制字必须写在计数值之前。这是因为计数器的读/写格式由它的控制字决定。
(3)对所有方式计数器都可以在计数过程中或计数结束后改变计数值,重写计数值也必须遵守控制字所规定的格式,并且不会改变当前计数器的工作方式。
(4)计数值不能直接写到减1计数器中,而只能写入计数值寄存器中,并由写操作之后的下一个CLK脉冲将计数值寄存器的内容装入减1计数器开始计数。
(5)初始化编程必须明确各个计数器的控制字和计数值不是写到同一个地址单元。各个计数器的控制字各自独立确定,但它们都写入同一个端口地址(控制字寄存器)中,各个计数器的计数值则根据需要独立确定并写入各自 计数器的相应寄存器中。
例1:设8086系统中8253的三个计数器的端口地址为060H,062H和064H,控制口地址为066H,要求计数器0为方式 1,按BCD计数;计数初值为1800D,计数器1为方式0,按二进制计数;计数初值为1234H,计数器2为方式3,按二进制计数;当计数初值为065H时,试分别写出计数器0,1,2的初始化程序。
(2)初始化编程
根据题意要求,对3个通道的工作方式,计数初值确定如下:
由CLK0~CLK2=2MHz可得,时钟周期T=1/f=1/2MHz=0.5μs。
选计数器0:选择方式5,门控信号GATE应接一正跳变信号,OUT端当计数为0时产生一个宽度等于时钟周期的单脉 冲。计数系数为36,用BCD计数。所以,计数器0的控制字应为00011011B=1BH。
计数通道2初始化程序:
MOV AL,B0H ;计数通道2的控制字
OUT 05FH,AL ;控制字写入控制器
MOV AL,068H ;计数初值的低8位
OUT 05DH,AL ;计数初值的低8位写入计数通道2
按题意选计数器1,按BCD码计数,工作于方式0,由于计数初值N=1000,控制字D5D4应为11,于是8253的控制字 为:01110001B=71H。
(3)选择8253各端口地址
设计数器1的端口地址为3F82H,控制口地址为3F86H。
(4)初始化程序如下
MOV AL,71H ;控制字
MOV AL,036H ;计数初值的低8位
OUT DX,AL ;低字节写入计数器0端口
计数通道1的初始化程序:
MOV DX,30EH ;8253的控制口地址
MOV AL,77H ;计数通道1的控制字,先写低字节,后写高字节,方式3,BCD计数
8253的应用举例
例1:将8253的计数器1作为5ms定时器,设输入时钟频率为200kHz,试编写8253的初始化程序。
(1)计数初值N计算
已知输入时钟CLK频率为200kHz,则时钟周期为T=1/f=1/200kHz=5μs,于是计数初值N为:N=5ms/T=5ms/5μs=1000。
(2)确定控制字
利用计数器0采用硬件触发,输出宽度等于时钟周期的单脉冲,定时常数为36H;
利用计数器1输出频率为2kHz的对称方波;
利用计数器2产生宽度为0.6ms的单脉冲,
试设计该定时系统硬件电路和初始化程序。
(1)硬件电路设计
硬件电路设计主要是地址译码电路设计及时8253与CPU间的连接。根据给定的端口地址可知,地址总线低位部分的 A9~A0分别为:A9A8=11,A7~A4=0000,A3A2A1=100~111,A0=0,由它们经译码器译码产生8253的片选信号, 8253的数据线D7~D0必须与系统数据总线的低8位相连,8253的端口的选择信号A1A0应连系统地址的A2A1。根据上 述要求,译码器应选3-8译码器74LS138。该译码器有3个代码输入端(C,B,A),输入3位代码决定译码信号从 Y0~Y7中哪一个输出,本例中显然应以Y2输出。
MOV DX,3F68H ;控制口地址
OUT DX,AL ;控制字送8253控制寄存器
MOV DX,3F82H ;计数器1端口地址
MOV AL,00 ;将计数初值N=1000的低8位写入计数器1
OUT DX,AL ;控制字写入控制口
MOV DX,30AH ;计数通道1的端口地址
MOV AL,00H ;计数初值的低字节
OUT DX,AL ;低字节写入计数通道1
MOV AL,10D ;计数初值的高字节
计数器0的初始化:
计数0的控制字:00100011B=23H
MOV AL,23H ;计数器0的控制字
OUT 0 66H,AL ;控制字写入8253的控制器
MOV AL,18H ;取计数初值的高8位,低8位00可不送
OUT 060H,AL ;计数初值送计数器0端口
计数器1和初始化:
计数器1的控制字:01110000B=70H
选计数器1:选择方式3,GATE按+5V,CLK1=2MHz输出方波频率为2kHz,所以,计数常数N1=2MHz/2kHz=1000,采用 BCD计数,于是计数器1的控制字为:01110111B=77H。
选计数器2:选择方式1,以构成一个单稳态电路,输出脉冲宽度由计数常数N2决定,计数常数N2=600μs/0. 5μs=1200,采用BCD计数,于是计数器2的控制字为:10110011B=B3H。
根据以上分析可得3个计数通道的初始化程序如下。
计数通道0的初始化程序:
MOV DX,30EH ;8253的控制口地址
MOV AL,1BH ;计数通道0的控制字,低8位,方式5,BCD计数
OUT DX,AL ;控制字写入控制口
MOV DX,308H ;计数器0的端口地址
OUT DX,AL
MOV AL,10 ;将N的高8位写入计数器1
OUT DX,AL
例2:以8086为CPU的某微机系统中使用了一块8253芯片,其通道端口地址为308H, 30AH,30CH,控制口地址为30EH,3个通道使用同一输入时钟,频率为2MHz,要求完成如下功能:
(2)计数值必须按控制字所规定的格式写入。若控制字规定只写8位,只需写入一次(8位)计数值即可(规定写低8位则高8位自动置0,规定写高8位则低8位自动置0);规定写16位时必须写两次,先写低8位,后写高8位。当 初值为0时,也要分两写入,因在二进制计数时,“0”表示65336,在BCD码计数时“0”表示10000=104。
KEEP:MOV AL,80H ;计数器2的锁存命令
OUT 066H,AL ;锁存命令写入控制寄存器
IN AL,064H ;读输出锁存器中的当前计数值(从计数器2端口读)
CMP AL,0FFH ;比较当前计数值是否为全“1”
JME KEEP ;非全“1”继续读
HLT ;为全“1”暂停
例2:要求读出计数器2的当前计数值,并检查是否为全“1”。
8253在读取计数器的当前计数值时,必须分两步进行。首先发一锁存命令(即控制字中RL1RL0=00),将当前计数 值锁存到输出锁存器中。第二步执行读操作,即用IN指令将锁存器中内容读入CPU。
假设计数初值只有低8位,设其程序段如下(控制口地址为066H,计数器2的口地址为064H):
OUT DX,AL ;高字节写入计数通道1
计数通道2的初始化程序
MOV DX,30E制字,先写低字节,后写高字节,方式1,BCD计数
OUT DX,AL ;控制字写入控制口
计数器2的初始化:
计数器2的控制字:10010110B=96H
MOV AL,96H ;计数器2的控制字96H:方式3,只送低8位,二进制计数
OUT 066H,AL ;控制字写入8253的控制口
MOV AL,056H ;计数初值的低8位
OUT 064H,AL ;计数初值的低8位写入计数器2的端口
MOV AL,70H ;计数器的控制字:方式0,送高8位和低8位,二进制计数
OUT 066H,AL ;控制字写入8253的控制器
MOV AL,034H ;取计数初值的低8位
OUT 062H,AL ;计数初值的低8位,写入计数器1端口
MOV AL, 12H ;取计数初值的高8位
OUT 062H,AL ;计数初值的高8位写入计数器1端口
MOV DX,30CH ;计数通道的端口地址
MOV AL,00H ;计数初值的低字节
OUT DX,AL ;低字节写入计数通道
MOV AL,12D ;计数初值的高字节
OUT DX,AL ;高字节写入计数通道2