8253芯片的接口地址是0D0D0H~0DOD3H,时钟信号为2MHZ,先利用计数器0,1,2分别产生10us的方波、每隔10ms和1s产生一个负脉冲,试画出与系统的连接图,并写出初始化程序。三个初始值是多少
时间: 2024-10-21 14:10:23 浏览: 36
8253是一个古老的定时器/计数器集成块,常用于早期计算机系统中的时间间隔管理。它的接口地址范围0D0D0H至0DOD3H表明它有4个独立的工作通道,每个通道有自己的控制寄存器。
为了满足你的需求,我们将会配置三个计数器:
- 计数器0产生10us方波,周期 = 2MHz / (2^16 - 1) ≈ 10.48us
- 计数器1产生10ms的正脉冲,周期 = 2MHz / 1000 ≈ 2kHz
- 计数器2产生1s的负脉冲,周期 = 2MHz
以下是连接图的大致示意:
1. 将8253芯片的地址总线(A0~A3)通过跳线或硬件接线接到CPU的数据输入/输出线上,如D7~D4。
2. 连接时钟输入CLK到8253的输入端,假设这个引脚接到了系统主频信号源的分频后的2MHz信号。
3. 对于计数器0,我们需要设置其工作模式为模式1,作为计数初值加载计数器并设定中断标志位。对于10us的方波,计数值应为大约964(= (2^16 - 1) * 10us / 2MHz)。
4. 计数器1作为模式0,设定为溢出中断,计数值为2^(16-1) - 1(约等于32767),每溢出一次即表示10ms过去。
5. 计数器2也是模式0,设定为溢出中断,计数值同样为2^(16-1) - 1,用于产生1s的长脉冲。
以下是简单的初始化程序示例(假设使用汇编语言,因为不同的微处理器可能有不同的指令集和库函数):
```assembly
; 初始化8253芯片
; 寄存器地址通常取决于具体的微处理器架构
; 计数器0初始化
MOV AL, 0x01 ; 模式1(等比计数)
OUT 0D0D0H, AL ; 写入计数器0控制寄存器
MOV AX, 0x9640 ; 转换为10us计数值(2^16 - 1取模)
OUT 0D0D2H, AL ; 写入计数初值寄存器
; 计数器1初始化
MOV AL, 0x00 ; 模式0(模式计数)
OUT 0D0D4H, AL ; 写入计数器1控制寄存器
MOV AX, 0x3FFF ; 产生10ms正脉冲
OUT 0D0D6H, AL ; 写入计数初值寄存器
; 计数器2初始化
MOV AL, 0x00 ; 模式0(模式计数)
OUT 0D0DAH, AL ; 写入计数器2控制寄存器
MOV AX, 0x3FFF ; 产生1s负脉冲
OUT 0D0DCH, AL ; 写入计数初值寄存器
阅读全文