设PC系统机外扩了一片8254及相应的实验电路。① 根据由门电路构成的译码电路,分析出该片8254 的四个端口地址。其中控制口的地址是什么(填16进制格式)? ② 已知1号计数器的输入时钟为4MHz,要求输出2KHz的方波。请编写8254初始化程序段(采用二进制计数方式)。
时间: 2023-12-10 08:42:19 浏览: 212
单片机与DSP中的基于89C51单片机的编码译码显示实验电路设计
① 根据8254的芯片手册,8254的四个端口地址如下:
- 端口0:计数器0的数据端口
- 端口1:计数器1的数据端口
- 端口2:计数器2的数据端口/读写控制字端口
- 控制口地址为 0x43
② 8254的计数器可以分为三个,编号分别为0、1、2。每个计数器都有一个16位的计数器值,用于指定计数器的计数范围。计数器0和计数器1都有一个输入时钟,可以选择不同的时钟源,而计数器2只有一个外部时钟输入。根据题目要求,我们需要使用计数器0输出2KHz的方波,计数器0的输入时钟为4MHz,计数范围为2KHz,那么计数器0的计数器值应该为 4000(即 0xFA0)。
8254的初始化程序段如下:
```assembly
mov al, 00110110b ; 控制字,选择计数器0,二进制计数方式,工作模式为3(方波输出)
out 43h, al ; 将控制字写入控制口(端口0x43)
mov ax, 0FA0h ; 计数器值为0xFA0,用于产生2KHz的方波
out 40h, al ; 先输出低8位
mov al, ah
out 40h, al ; 再输出高8位
```
以上程序段将控制字写入控制口,并将计数器的值写入计数器0的数据端口(端口0x40)。由于计数器值是16位的,因此需要分别输出低8位和高8位。
阅读全文