微机原理复习-8254

8254计数初值计算公式:N = f(clk) /   f(out)

8254工作方式

方式0--计数结束输出正跃变信号

(1).计数过程中OUT为低,计数值减为9时,OUT变为高
(2).改变初值,则在写入新的计数初值后,计数器将以新的值为计数初值
(3).GATE = 1,允许计数;GATE = 0,暂停计数

方式1--单脉冲发生器

(1).GATE上升沿启动,计数期间OUT维持低电平,所以负脉冲宽度 = 计数初值XCLK脉冲周期
(2).改变初值只有当GATE再次出现0->1跃变后,计数器才能按新初值减1计数
            计数过程中GATE有正脉冲,计数初值重新装载,计数重新开始

方式2--分频器(OUT端对GATE端信号N分频;具备初值自动重装)

(1).只在GATE为高时,计数器计数计数值为1时,OUT输出宽度为CLK周期的低电平信号之后初值重装,计数重新开始
(2).计数过程中GATE变低,则计数暂停,GATE的上升沿会导致计数器重新开始
(3).GATE为高电平时,写入新的计数初值,不会影响正在进行的计数,只有计数器见减到1后初值才能重装

方式3--方波发生器(具备初值自动重装)

每来一个CLK脉冲,计数值减2
(1).初值为偶数:当计数值为0时,OUT端反转,输出为1:1方波,正负脉冲宽度为N/2个CLK周期
(2).初值为奇数:实际装入初值为写入初值减一。输出正脉冲期间,当计数值减到-2时,OUT端变低,初值重装;输出负脉冲期间,当计数器减到0时,OUT端变高,初值重装

方式4--软件触发的单脉冲发生器

(1).只有当计数值减到0时,OUT才为低,负脉冲宽度为CLK周期
(2).GATE = 1,允许计数;GATE = 0,停止计数
(3).在计数过程中,如果改变计数值,则按新的计数值重新开始计数

方式5--硬件触发的单脉冲发生器

(1). 与方式1相似,区别在于:方式5输出的负脉中宽度为一个 CLK周期,而方式1的负脉冲宽度为N 倍的CLK周期                                                                                                                                                                                                                                                                                                                                                              



8254控制字

方式控制字

         (1)  D7D6:计数器选择:D7D6 = 00,选择0号计数器;

                                                            D7D6 = 01,选择1号计数器;

    D7D6 = 10,选择2号计数器;

            D7D6 =  11,读出控制字的标志。

         (2)  D5D4:读/写方式选择:D5D4 = 00,锁存计数器当前值;D5D4 = 01,写入时,只写低8位计数初值,高8位置0,读出时,只读低8位的当前计数值;D5D4 = 10,与                                     前相反;D5D4 = 11,先读/写低8位计数值,后读/写高8位。

         (3)  D3D2D1:000--计数器工作在方式0

                                         001--计数器工作在方式1

 X10--计数器工作在方式2

                                         X11--计数器工作在方式3

                                         100--计数器工作在方式4

                                         101--计数器工作在方式5

         (4) D0:数值选择--D0 = 0,计数初值被认为是二进制数

                                                D0 = 1,计数初值被认为是十进制数

读出控制字

D7D6 = 11(必须为11) D0 = 0.
D5 = 0:锁存计数值,以便CPU读取
D4 = 0:将状态信息锁存入状态寄存器
D3~D1:计数器选择

8254状态字

D7 = 1:表示OUT引脚为高电平
(OUTPUT)D7 = 0:表示OUT引脚为低电平
(NULL COUT)D6 = 0,:表示计数初值已装入


eg1.系统使用外扩一片可编程定时器/计数器8254,输入时钟是1MHz。8254的初始化程序如下:

MOV AL,01100101B
MOV DX,203H
OUT DX,AL
MOV AL,1000H
MOV DX,201H
OUT DX,AL
由上述程序可知,设计时使用了8254的(1)号计数器,其口地址为(201)H,工作在方式(2),使用(十)进制计数,输出信号的频率为(1000)Hz。


8254在PC/AT中的使用
计数器0用于定时(55ms)中断
MOV AL,00110110B ;方式3,二进制计数
OUT 43H,AL
MOV AL,0 ;初值为0000H
OUT 40H,AL
OUT 40H,AL
计数器1用于动态存储器刷新定时(每隔15us提出一次请求)
MOV AL,01010100B ;方式2,只写低8位,二进制计数
OUT 43H,AL
MOV AL,12H ;初值为18
OUT 41H,AL
计数器2用于产生约900Hz方波送至扬声器
MOV AL,10110110B ;方式3,二进制计数
OUT 43H,AL
MOV AX,0533H ;初值为533H
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
































你可能感兴趣的:(微机原理,8254)