已知: 8253的基地址为318H,时钟频率为1MHz。要求画出接口电路图,并用程序实现如下功能: (1)通道0输出频率为4KHz的方波; (2)通道1产生宽度为1ms的负脉冲; (3)通道2输出频率为2KHz的周期性负脉冲。
时间: 2024-05-10 08:15:16 浏览: 67
接口电路图如下:
```
┌───┐ ┌───┐ ┌───┐
IN_CLK ─────►│ │───│ │───│ │─── OUT_CH0 (4KHz 方波)
│8253│ │ │ │
OUT_CH1 ◄────│ │───│ │───│ │─── (1ms 负脉冲)
├───┤ │ │ │
OUT_CH2 ◄────│ │───│ │───│ │─── (2KHz 周期性负脉冲)
└───┘ └───┘ └───┘
│ │ │
GATE GATE GATE
│ │ │
LOAD LOAD LOAD
▼ ▼ ▼
┌───┐ ┌───┐ ┌───┐
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
└───┘ └───┘ └───┘
CH0 CH1 CH2
```
程序实现如下:
```assembly
.model small
.stack 100h
.data
; 8253 的基地址
TIMER_BASE equ 318h
.code
mov ax, @data
mov ds, ax
; 初始化 8253,将通道 0、1、2 都设置为模式 2(rate generator)
mov al, 00110110b
out TIMER_BASE, al
mov al, 10000000b
out TIMER_BASE, al
mov al, 10110110b
out TIMER_BASE, al
; 设置通道 0 的输出频率为 4KHz
mov bx, 1193 ; 计算装载值:1MHz / (2 * 4KHz) - 1 = 1193
mov al, byte ptr bx
out TIMER_BASE, al
mov al, ah
out TIMER_BASE, al
; 设置通道 1 的输出为 1ms 的负脉冲
mov bx, 1000 ; 计算装载值:1ms * 1MHz - 1 = 999
mov al, byte ptr bx
out TIMER_BASE+1, al
mov al, ah
out TIMER_BASE+1, al
mov al, 10110101b ; 设置为输出低电平的脉冲
out TIMER_BASE+1, al
; 设置通道 2 的输出频率为 2KHz
mov bx, 4999 ; 计算装载值:1MHz / (2 * 2KHz) - 1 = 4999
mov al, byte ptr bx
out TIMER_BASE+4, al
mov al, ah
out TIMER_BASE+4, al
mov al, 10110101b ; 设置为输出低电平的脉冲
out TIMER_BASE+4, al
; 开启通道 0、1、2 的输出
in al, 61h
or al, 00000111b
out 61h, al
; 等待用户按下任意键退出
mov ah, 0
int 16h
; 关闭通道 0、1、2 的输出
in al, 61h
and al, 11111000b
out 61h, al
mov ax, 4c00h
int 21h
end
```
阅读全文