微机原理第四章.docx
《微机原理第四章.docx》由会员分享,可在线阅读,更多相关《微机原理第四章.docx(16页珍藏版)》请在冰豆网上搜索。
微机原理第四章
PC系列定时系统
PC系列定时系统由时钟和实时时钟两部分组成。
前者由定时器(8255或8254芯片)支持,后者由RT/CMOSRAM芯片支持。
下面分别说明。
4.1.1PC系列定时器
PC、PC/XT使用8253-5芯片,PC/AT使用8254-2芯片作为定时系统的核心器件。
两者的外形及功能都是兼容的,只是允许输入的最高时钟频率不同(前者为5MHZ,后者为10MHz)。
与它们相容的定时器还有8253(2MHz),8254(8MHz)和8254-5(5MHz)。
下面,以PC系列使用的8256-5和8254-2为例,分析定时器的作用。
一.8253/8254逻辑功能
8253/8254是可编辑的定时器芯片。
它们都包含三个独立的16位通道。
每个通道既可作定时器也可作计数器使用,可通过软件编程选定6种工作方式之任一种。
它们都用N沟道MOSt工艺制成,只需要一组+5V电源。
8253/8254芯片的外形与内部结构示于图4.1
1.结构说明
根据图4.1(a),8254芯片是24条引脚的双列直插式封装。
其内部结构(图(b))的各部分功能如下。
1)数据缓冲器具有三态双向8位数据缓冲功能,可支持控制字输入确定芯片工作方式,向各通道计数器预置初值,以及读出各通道计数器的初始值或当前计数值供三种基本操作。
2)读/写逻辑由
低电平有效作为片选输入。
根据最低2位地址线
选择3个通道之一或控制字寄存器,通过
或
低电平有效完成指定的读/写操作。
3)控制字寄存器接受数据缓冲器送来的控制字,可编程选定各个通道的计数方式,工作方式和操作方式。
4)通道计数器3个独立通道的内部构成相同,其逻辑框图如图4.2所示
由图4.2可知,初始装入通道的计数值被保存在16位的装入器中,然后送到16位的计数器。
计数器在CLK脉中(GATE允许)作用下进行减1计数,直至计数值为0,输出OUT信号。
16为存储器是根据锁存器操作锁存计数器的当前计数值。
2.通道计数/定时作用
每个通道的减法计数器可通过设置工作方式器计数或定时作用。
1)计数器工作当减法计数器赋以初值后,由CLK脉冲在GATE开启状态下进行减1计数。
在一串CLK脉冲作用下,当计数器减至“0”时,由OUT端输出一信号(高电平和负脉冲)。
2)定时器工作当减法计数器赋以初值后,在GATE开启状态下由CLK脉冲触发定时器工作。
工作过程也是减1计数,直至减到“0”。
但在OUT输出信号的同时,减法计数器又被装入器重新赋以初值,继续减1计数。
故而,定时器不间断地输出CLK时钟整数(即初始值)倍的周期信号(周期方波或周期负脉冲)。
通过上述分析可知,8253/8254芯片可以再软件控制下产生一个或一串精确时间延迟,计数器根据“减到0”输出一信号,或定时器根据“时间到”输出周期信号,使程序员不必为建立软件延时循环花费较大的软件开销。
二.8253/8254工作方式
8253/8254芯片三个通道计数器都可独立编程,选择6中工作方式之任一种,即方式0~方式5。
每种方式的含义如下。
1.方式0——计数器结束中断
方式设定后输出OUT为低电平,按装入初值开始减1直至减到“0”,OUT变成高电平.
方式0的特点有:
1)允许停止计数或继续计数由GATE控制计数开始(高)或停止计数(低)。
当GATE重新变高后计数器继续计数。
2)计数结束中断该方式意味着OUT输出为低电平一直保持到计数器结束(减至“0”)变成高电平(中断信号)。
此高电平也一直保持到该计数器置入新的初始值或选定新的工作方式为止。
3)计数期间允许重新装入方式0在计数期间并不禁止处理机对其重新装入初始值。
当接收到第1个字节初值(低电平)时,计数器被禁止当前计数过程,然后在接受到第2个字节初值(高字节)时,计数器按新的计数值开始工作。
2.方式1——可编程单稳
方式设定后在GATE输入有效上升沿之后的计数过程中,输出变成并保持低电平,直至计数结束OUT变成高电平。
即在输出端可获得宽度足够的单稳信号。
方式1的特点有下面2点。
1)允许继续计数或重新开始计数由GATE控制计数开始(高)或继续计数(低)。
当GATE重新变成高后,计数器重新从初值开始计数。
因此,可设置不同的初值或控制GATE的开闭,使输出端产生不同宽度低电平的单稳信号。
2)单稳宽度的稳定性除上述单稳的重触发性外,其单稳宽度(由初始值确定)具有稳定性,即在计数过程中可重新装入新的触发值。
与方式0不同,他在下一次触发之前将不改变当前计数过程,保持单稳脉冲的宽度。
3.方式2——频率发生器
方式设定后输出为低电位,在GATE为有效高电平后开始计数,直至输出一周期的负脉冲,负脉冲宽度是一个输入时钟周期。
其周期是输入时钟周期的N整数倍(N即为计数初值)。
方式2的特点有下面4点。
1)N分频计数器根据初值N产生时钟输入频率N分之一的负脉冲序列。
2)允许停止计数或重新开始计数利用GATE电平的控制计数器获得同步。
3)负脉冲频率的稳定性在计数过程中允许对计数器重新进行装入,但不影响当前的脉冲频率,而只在下一周期反映新的N值。
4)输出信号也能用软件同步除控制GATE输入信号同步计数器外,只能通道设置方式2,则在计数器重新进行装入之前,输出将保持高电平。
故而,通过软件建立N值输出将被同步。
4.方式3——方波频率发生器
此方式类似于方式2,但输出时分频的方波。
方波的频率是输入时钟频率的N分之一(N是装入计数器初值)。
方式3的特点有下面3点。
1)方波占空比约1:
1当N值为偶数时,在计数完成前一半之前输出是高电平,而在后一半计数输出变成低电平,但当N值为奇数时,在前(N+1)/2进行计数时输出高电平,而在后(N-1)/2进行计数时输出低电平,
2)允许停止计数或重新开始计数利用GATE电平的控制使计数器获得同步。
3)方波频率的立即变化在计数过程中,虽允许向计数器重新装入新值,但与方式2不同的是,这个新值将在计数输出跳变以后立即反映出来。
5.方式4——软件触发的选通信号
此方式其实是方式2与方式0的组合,即允许停止计数或继续计数,直至计数结束输出一负脉冲。
当计数过程中重新装入新值时,现行计数周期将不受影响,但在下一周期里将反映新值。
6.方式5——硬件触发的选通信号
此方式其实是方式2与方式1的组合,即允许继续计数或重新开始计数,直至计数结束输出一负脉冲。
方式0,1和方式4,5是选择计数器工作(输出一电平或以脉冲),方式2,3是选择定时器工作(输出一周期脉冲或周期方波)。
另外,在6中不同工作方式中,GATE电平的控制作用也不完全相同。
大致分成:
1)GATE由低变高上升沿时开启计数器工作(如方式1,2,3,5);
2)只有GATE变成高电平之后才允许计数器工作(如方式0,4);
3)计数器工作后,与GATE电平无关,即使GATE变低,仍继续计数(如方式1,5)。
上述3种情况均列于表4.1
表4.1GATE电平在不同方式下作用
方式\状态
低电平或有低变高
有低变高
高电平
0
禁止计数
—
允许计数
1
—
1)开始计数2)下一个输出复位
—
2
1)禁止计数2)输出为高电平
1)重装初值2)开始计数
允许计数
3
1)禁止计数2)输出为高电平
开始计数
允许计数
4
禁止计数
—
允许计数
5
—
开始计数
—
三.8253/8254读写操作
由于芯片的三个独立通道和一个控制字寄存器都有相应的I/O端口地址,因此,利用OUT和IN指令可方便地对芯片处完成读写操作。
操作的信号规定如表4.2所示。
根据表4.2,芯片的读写操作有三种情况。
1.写操作——通道初始化
通过对芯片的写操作完成通道的初始化,其步骤如下:
1)对方式控制字寄存器输出OUT指令,为选择的通道计数器赋以指定的工作方式;
2)对选择的通道计数器装入计数初值,这用另一条OUT指令输出到该通道的端口地址即可。
在通道初始化过程中,要注意:
1)可按任何顺序对三个通道分别进行初始化;
2)对某个通道初始化必须先装入方式控制字寄存器,而计数初值可在此后任何时间装入;
3)严格按方式控制字设定的计数初值的长度和装入顺序,对通道计数器装入初值,不得有误;
4)因计数器是递减的,故初值为“0”便是最大的计数值(二进制计数是
,而BCD进制计数是
)。
2.读操作——读装入计数值
8253/8254内部逻辑电路可提供读操作功能,使程序员能在不干扰实际计数过程的情况下,方便地读出装入的计数值,只需对选定的通道计数器发出IN命令即可。
第1次从16位装入器读出装入的计数值的低字节,第2次读出高字节。
但要注意
1)必须完成装入计数值的全部读操作,如16位计数值必须读出两个字节后才能向该计数器发出写命令;
2)为保证读出稳定的装入计数值,所选定的计数器的工作方式必须能被GATE电平输入禁止或能被禁止时钟输入的外部逻辑所禁止。
3.、锁存后读操作——读当前值
8253/8254内部逻辑电路可提供锁存后读操作功能,使程序员能在不干扰实际计数过程的情况下方便读出当前计数值。
其操作要分两步:
1)对方式控制字寄存器写一方式字,选择指定的通道执行锁存操作,即将当前计数值锁存到内部16位存储寄存器;
2)对指定的通道执行读操作,即得到存储寄存器的内容。
这种锁存后读操作对计数器的工作方式不会产生任何影响,但也必须将当前计数值整个读出才行。
四.8253/8254编程
根据8253/8254芯片提供的6种工作方式和读写操作规定,在使用读芯片实现定时或计数工作前,必须确定每个通道计数器的工作方式和装入的初值,否则,任何一个计数器的工作方式,计数值和OUT输出信号都是不确定的。
计数器的工作方式由方式控制字确定,写入控制字寄存器的数据格式如下:
SC1,SC0——计数器通道选择
00:
通道001:
通道1
10:
通道111:
非法
BL1,BL0——计数器读写操作选择
00:
计数器锁存
01:
低字节(LSB)读或装入
10:
高字节(LSB)读或装入
11:
先低字节后高字节的读或装入
M2,M1,M0——计数器工作方式选择
000:
方式0001:
方式1
X10:
方式2X11:
方式3
100:
方式4101:
方式5
(X:
与具体数字无关)
BCD——计数器计数进制选择
0:
16位二进制计数
1:
4个BCD码计数
对8253/8254芯片编程时,首先向控制字寄存器(A1A0=11)写入控制字,以选择指定通道计数器的工作方式,读写操作和计数进制,然后,对相应的计数器置入初始值(8位或16位)。
除了写各通道控制字与顺序无关,装入初始值可在控制字写后任何时间内,以及初始值装入长度和次序取决控制字RL位状态这几点注意外,还应明确:
只有当初始值写入芯片,并经过一个时钟上升沿和一个下降沿之后,其值才装入到计数器内。
若此时GATE处于开启状态,在下一个时钟到来时计数器开始递减计数。
因此,在初始值装入前,即在时钟下降之前企图读出计数器的内容是无效的。
4.1.2PC序列定时器使用
在PC,PC/XT系统使用8253-5定时器与在PC/AT系统使用8254-2定时器是相同的,即三个独立的计数器通道分别用于日时钟计时,动态RAM刷新定时及扬声器发声音调。
下面,从硬件逻辑和软件编程两方面描述定时器的使用。
一.定时器系统的硬件逻辑
8253-5或8254-2系列中应用于定时器系统,其硬件逻辑是完全兼容的,如图4.3所示
由图4.3可知,定时器三个通道的计数器都使用相同的时钟,即
的频率是PCLK频率的一半(2.38638/2=1.1931816MHz)。
通过一个D触发器构成2分频器获得。
另外,芯片的片选信号端
由
信号输入。
它由系统的I/O接口芯片译码器产生。
系统分配定时器的端口地址的范围是040~05FH,即当地址线
时,
为有效的低电平,使8253-5或8254-2被选中。
该芯片实际使用仅4个端口地址:
040~043H(分别对应三个通道和控制器)。
具体选择由最低两位地址
确定。
定时器三个通道的计数器的用途如下:
1.通道0计数器(端口地址040H)
该通道
端接+5V,处于常启状态。
它向系统=日时钟提供定时终中断。
其特点是:
1)选用方式3工作(方式字
);
2)置入计数初值为0,则计数器
产生一方波频率序列,其频率为1.19131816/65536=18.2Hz;
3)
直接连到8259-5中断控制器的第0级请求端
。
这样,利用方波的上升沿触发中断请求,使0级中断每秒出现18.2次或每次间隔54.9ms。
2.通道1计数器(端口地址041)
该通道
接端+5V,处于常启状态。
它向系统定时提出动态RAM刷新请求。
其特点是:
1)选用方式2工作(方式字
);
2)置入计数初值为18,则计数器
产生一负脉冲分频序列,其频率为1.1931816/18=66.2878KHz;
3)
连到一D型触发器的时钟输入端,而数据输入端D常接+5V。
这样,利用负脉冲的上升沿置触发器为1,产生有效高电平的刷新定时请求。
在PC/XT系统,借助DMA通道0,通过存储器读完成RAM刷新。
因此,D型触发器的输出值送到DMA控制器的
,作为DMA请求信号。
在PC/AT系统,设置专门的动态RAM刷新电路,故而,D型触发器输出值送到该刷新电路。
不管在那个系统,当刷新请求获得相应后,均由相应的刷新应答信号使D型触发器复位,以便接受下一个定时刷新输出信号(
)。
该计数器的负脉冲输出周期是15.0857us。
确定此值的依据是在XT系统选用64K×1位动态RAM芯片,要求在2ms内完成芯片128行的刷新(每次2ms/128=15.625us),或者,在AT系统选用128K×1动态RAM芯片,要求4ms内完成芯片256行的刷新(每次4ms/256=15.625us)。
3.通道2计数器(端口地址042H)
该通道的
用一信号TIME2GATE控制(可用软件编程置位或复位)。
它向系统的扬声器提供发声的音调。
其特点是:
1)选用方式3工作(方式字
);
2)置入计数初值为533H,则计数器
产生一方波频率序列,其频率等于1.1931816/533H=8896Hz;
3)该计数器能否开始计数,受控于TIME2GATE信号的电平。
同时,
的音调输出和扬声器数据信号SPKDARA(也由软件编程置位或复位)相“与”送到外围“与非”驱动器SN745477。
由驱动器输出Y端经RC滤波器接入扬声器,以增加驱动扬声器的输出功率和改善发声音质。
4.2.1PC系统两种发声源
由图4.3指出,定时器通道2计数器的门控信号(
)并非在常启状态。
它受控于TIME2GATE信号的电位。
另外,通道2计数器的输出(
)信号能否驱动扬声器,还取决于“与”门另一输入信号SPKDATA的电位。
这前后二个电位均来自外围接口芯片8255A的端口B(AT及兼容机虽不采用8255A,但仍有效电路使用同一I/O端口地址和位控制)。
一个完整的PC系列发声系统的硬件逻辑如图4.4所示。
由图4.4可知,驱动扬声器的声源可以来自两方面。
1.定时器芯片的发生源
此时,对定时器通道2计数器的编程为方式3.预置一固定的音调频率(输入一除数),设定8255端口B或相等电路的
即将定时器与扬声器接通,
发出一指定频率的方波。
方波经驱动器增强输出能力送至扬声器。
PC系列使用的是简易扬声器。
它使输入的方波上升沿和下降沿变得圆滑,即变得可听的正弦声波,但不足的是,
的输出振幅不能改变,故不能控制声源的音量。
需指出,SN75477是一个带输出箝位二极管的双“与非”驱动器。
但这里只使用一对(2A-2Y),另一对图中未标出。
其逻辑为
。
因S端接+5V,故该驱动器实际上起反相驱动作用(箝位端C也接在+5V,输出电压可高达+5V,输出电流为300mA),并通过RC滤波电路改善音质。
当8255端口B或相等效电路的
或
不为1时,均可使扬声器停止发声。
2.8255端口B的发生源
此时使8255端口B或相等效电路最低位
,关闭定时器声源的输出,
为常高(方式3所致)。
通过8255端口B或相等效电路的
位置1或置0.按指定的频率编程也能让“与”门输出一周期性方波,从而使声源发声。
例
利用8253/8254编程的发声程序1
psound.cpp
#include//pentiam8253各计数器端口
#include//通道0计数器040H(040H)
#include//通道1计数器041H(041H)
Extern“C”//声明汇编用C方式编写,调用//通道2计数器042H(042H)
voidpmusic()//声明汇编程序//方式控制字寄存器043H(043H)
voidmain()
{
printf(“Musicstart\”);
pmusic();
}
Psou,asm
.modelarge;定义大模式
.code
publicproc;说明为公共过程
_pmusicproc;过程开始
pushf;保存标志
pushbp;保留调用过程(主模块)的BP值
movbx,sp;建立本汇编过程的帧指针
moval,10110110B;8253机器工作方式确定,选通道2,先低字节装入计
out43H,al;数值,选择工作方式3,采用16为二进制计数
movax,533H;置入计数初值533H,计数器
产生一方波频率序列
out042H,al;,其频率为1.1931816/533H=896Hz,即533H放入042H
moval,ah;先低字节,后高字节放入
out42H,al
inal,061H;取控制8253TIME2GATE并行端口B的信息
movah,al;,保存061H端口B信息
orah,03;将061H端口B
位置1.
out061H,al;将
送回061H端口B。
subcx,cx;一次发声500ms
G7:
loopG7
decbl;发声结束
jnzG7;否,继续发声
moval,ah;
out061H,al;恢复端口B
popbx;返回调用
popf
ret
-pmusicendp
end