微机原理 8253/8254编程示例
题目
已知8254各通道时钟接8MHz信号,端口地址为700H,702H,704H和706H。
1、 在OUT0产生周期为10µs的方波
2、 OUT1产生2KHz的连续脉冲信号
3、 OUT2产生一个最大的负脉冲
答案:
第一问
方式3可以产生方波,初始值n = 10µs * 8MHz = 80。所以我们的程序为:
MOV DX,706H ; 控制端口地址
MOV AL,00010110B ;输入控制字 通道0 只读/写计数器低字节 方式3 二进制计数
OUT DX,AL
MOV DX,700H ; 端口地址
MOV AX,80D ; 输入初值
OUT DX,AL ; 写入初值
第二问:
方式2可以产生连续脉冲信号,初始值n = 8MHz / 2KHz = 4000D。所以我们的程序为:
MOV DX,706H ; 控制端口地址
MOV AL,01110100B ; 输入控制字 通道1 先读/写计数器低字节 后读/写计数器高字节 方式2 二进制计数
OUT DX,AL ; 将控制字输入到DX
MOV DX,702H ; 通道1端口地址
MOV AX,4000D ; 输入初值到AX
OUT DX,AL ; 先写低字节
MOV AL,AH ; 取高字节
OUT DX,AL ; 后写高字节
第三问:
产生负脉冲我们可以使用方式2,这里需要注意的是,我们输出最大的负脉冲,初值n应为0。程序为:
MOV DX,706H ; 控制端口地址
MOV AL,10110010 ; 控制字 通道2 先读/写计数器低字节 后读/写计数器高字节 方式2 二进制计数
OUT DX,AL
MOV DX,704H ; 端口地址
MOV AL,0 ; 写入初值
OUT DX,AL ;先写低字节
OUT DX,AL; 后写高字节