已知某系统中8253的端口地址为1E0H、1E2H、1E4H、1E6H,系统时钟为2MHZ。试编写8253的初始化程序, 使其产生周期为1s的方波输出。请画出8253与微处理器8086的线路连接图,并
时间: 2024-10-19 18:15:15 浏览: 58
在8086微处理器系统中,要利用8253定时器作为1秒周期的方波发生器,我们需要完成以下几个步骤:
1. **设置计数初值**:
- 对于8253芯片,我们通常选择通道1(Timer 0)来产生1秒长的方波,因为它的定时周期更易于控制。将初始计数值设为97735(对于2MHz时钟频率,1秒大约等于2^16次计数周期,减去1个空闲状态周期)。
2. **配置定时器0**:
- 设置8253的控制字寄存器TCON0(地址1E6H):
- 方式选择位W1(第7位)置0,表示工作于模式0,即单次脉冲输出。
- 脉宽调制位M0(第6位)置0,关闭脉宽调制功能。
- 停止触发位STB(第5位)置1,使定时器开始计数。
- 计数溢出中断标志IF0(第4位)置1,开启中断请求。
- 其他位保持默认,如D7~D1置0,表示无外部门控输入。
3. **硬件连接**:
- 连接8253的地址线(1E0H、1E2H、1E4H)到8086的数据总线上。
- 连接TCON0控制字寄存器的地址线(地址1E6H)到8086的地址总线上。
- 当8253产生计数溢出时,会通过INT0中断向8086报告,此时需要配置8086的中断控制器(通常是8259A),并将中断服务程序与中断号0关联起来。
以下是简化的伪代码示例(注意这只是一个指导,实际编程语言需根据具体的系统环境和汇编语言语法来编写):
```plaintext
; 假设使用8086汇编语言
; 导入必要的寄存器和内存地址
org 100h ; 指定代码起始位置
; 函数入口点
start:
mov al, 0x0F ; 初始化TCON0 (方式0, 单次脉冲)
out 1E6h, al ; 写入控制字寄存器
mov ax, 97735
out 1E4h, al ; 写入计数初值
mov ah, 2 ; 开启中断
int 21h ; 发送中断请求
loop:
jmp loop ; 循环等待中断
; 中断服务程序
int_0:
cli ; 关闭全局中断
in al, 1E6h ; 读取TCON0状态
and al, 0xFE ; 清除IF0中断标志
out 1E6h, al ; 更新TCON0
iret ; 返回主循环
end start ; 段结束
```
阅读全文