0#计数器:340H;1#计数器:341H;2#计数器:342H;控制口:343H;汇编语言编写程序:设已有信号源频率为1MHz,现要求用一片8253定时1秒钟,设计出硬件链接图并编程初始化
时间: 2024-02-13 22:02:18 浏览: 27
以下是8086汇编代码:
```
MOV AL, 00110110B ; 将控制字写入端口 343H
OUT 343H, AL
MOV AL, 10110100B ; 将计数器 0 写入端口 340H
OUT 340H, AL
MOV AL, 00110010B ; 将计数器 0 写入端口 340H
OUT 340H, AL
MOV AL, 00000010B ; 将计数器 0 写入端口 340H
OUT 340H, AL
```
硬件链接图如下:
```
+----------+
| |
CLK ----| 8253 |---- OUT
| |
| 0 |---- OUT
| |
| 1 |---- OUT
| |
| 2 |---- GATE
| |
+----------+
```
其中,CLK 为信号源输入,OUT 为计数器输出,GATE 为计数器控制端口。
相关问题
8253计时器:0#计数器:340H;1#计数器:341H;2#计数器:342H;控制口:343H;编写程序:设已有信号源频率为1MHz,现要求用一片8253定时1秒钟,设计出硬件链接图并编程初始化
以下是8086汇编代码:
```
MOV AL, 00110110B ; 将控制字写入端口 343H
OUT 343H, AL
MOV AL, 10110100B ; 将计数器 0 写入端口 340H
OUT 340H, AL
MOV AL, 00110010B ; 将计数器 0 写入端口 340H
OUT 340H, AL
MOV AL, 00000010B ; 将计数器 0 写入端口 340H
OUT 340H, AL
MOV AL, 11101110B ; 将计数器 0 的初值写入端口 340H
OUT 340H, AL
MOV AL, 00110110B ; 将控制字写入端口 343H
OUT 343H, AL
MOV AL, 10110110B ; 将计数器 0 的计数方式和工作模式写入端口 340H
OUT 340H, AL
MOV AL, 00001111B ; 将计数器 0 的计数值写入端口 340H
OUT 340H, AL
WAIT:
IN AL, 342H ; 等待计数器 0 计数完毕
AND AL, 00000001B
JZ WAIT
MOV AL, 10110100B ; 将计数器 0 写入端口 340H
OUT 340H, AL
MOV AL, 00110010B ; 将计数器 0 写入端口 340H
OUT 340H, AL
MOV AL, 00000010B ; 将计数器 0 写入端口 340H
OUT 340H, AL
```
硬件链接图如下:
```
+----------+
| |
CLK ----| 8253 |---- OUT
| |
| 0 |---- OUT
| |
| 1 |
| |
| 2 |
| |
+----------+
```
其中,CLK 为信号源输入,OUT 为计数器输出,GATE 为计数器控制端口。这里使用计数器 0 实现了定时 1 秒钟的功能。
假定有一片8253接在系统中,其端口地址分配如下所示:0#计数器:220H 1#计数器:221H,2#222H;控制口:223H;汇编语言编写程序:1.利用0#计数器高、低8位计数,计数值为1000,BCD计数,选用方式2工作,试编程初始化
以下是汇编语言编写程序的代码:
```
; 初始化0#计数器
MOV AL, 00110110B ; 设置计数器0工作模式为方式2,BCD计数
OUT 43H, AL ; 将控制字写入控制寄存器
MOV AX, 1000 ; 设置计数器0的计数初始值为1000
OUT 40H, AL ; 将计数的低8位写入计数器0的LSB寄存器
MOV AL, AH ; 将计数的高8位写入计数器0的MSB寄存器
OUT 40H, AL
```
解释一下以上代码的各个部分:
1. 首先,我们将控制字写入控制寄存器。控制字的第0-3位表示计数器选择,第4-5位表示工作模式,第6位表示计数器读/写方式,第7位表示计数器的计数方式。00110110B的二进制表示中,第4-5位为10,表示选择方式2工作模式;第6位为0,表示计数器的读/写方式为“先写低字节,再写高字节”;第7位为1,表示计数器采用BCD计数方式。
2. 然后,我们将计数器的初始计数值写入计数器0的LSB寄存器和MSB寄存器。由于计数值为1000,因此低8位为0xE8,高8位为0x03,需要将AX寄存器的值分别写入计数器0的LSB寄存器和MSB寄存器中。
这样,我们就完成了8253计数器的初始化。