11 可编程定时器/计数器
计算机系统中常常需要定时信号或者对外部信号进行计数。
一般定时操作可以通过软件和硬件两种方法实现:
- 软件定时:通过执行延时程序,通过计算程序运行的机器周期数来计算定时时间,CPU执行延时程序将增加时间开销,降低CPU效率,并且结果往往不准确
- 硬件定时:通过外加硬件实现,一般采用定时器/计数器
定时器与计数器的区别:
- 触发来源不同:定时器的触发来源是外部脉冲,而计数器的触发来源是时钟信号。
- 计数对象不同:定时器实际上也是计数器,只是计数是由固定周期的脉冲触发的,计数器只计数时间。
计算机系统中采用可编程定时/计数器有I8253和I8254,其中8254具备8253的全部功能。
#
8254内部结构8254内部有3个独立的16位计数器,每个计数器有6种工作方式,计数初值的数制可设定为二进制或BCD码,每个计数器允许的最高计数频率为10MHz,有读出命令。
- 数据总线缓冲器
- 读写逻辑
- 控制字寄存器
- 计数器
#
附:端口地址当等于0的前提下,
选中 | |
---|---|
00 | 0#计数器 |
01 | 1#计数器 |
10 | 2#计数器 |
11 | 控制字寄存器 |
#
8254的工作方式方式0:计数结束输出正跃变信号
方式1:单脉冲发生器
方式2:分频器
方式3:方波发生器
方式4:软件触发的单脉冲发生器
方式5:硬件触发的单脉冲发生器
#
8254的控制字8254的控制字有两个,两个控制字共用一个控制口地址,由标识符区分
- 方式控制字:设置计数器的工作方式
- 读出控制字:设置读出命令
#
8254编程方法#
8254初始化编程8254是可编程芯片,使用之前需要进行初始化编程,分为两步:
- 向控制字寄存器写入方式控制字,对使用的计数器规定其工作方式等
- 向使用的计数器写入计数初值
#
8254读取当前计数值8254任一计数器的计数值,可用输入指令读取,由于计数器为16位,因而要分两次读。
#
8254编程实例EXA113.ASM
CODE SEGMENT ASSUME CS:CODEBEG: IN AL, 61H OR AL, 03H OUT 61H,AL ;接通扬声器🔈 MOV DX, 12H MOV AX, 34DEH ;计数初值 MOV CX, 800 DIV CX OUT 42H,AL ;先写低8位 MOV AL, AH ;再写高8位 OUT 42H,ALSCAN: MOV AH, 1 INT 16H ;等待按键 JZ SCAN IN AL, 61H AND AL, 0FCH OUT 61H,AL ;关闭扬声器🔈 MOV AH, 4CH INT 21HCODE ENDS END BEG
Run