【微机接口】8254的控制字与编程方法

发布于:2022-11-01 ⋅ 阅读:(377) ⋅ 点赞:(0)

两种控制字:

方式控制字:

8位,D7D6用于选择计数器

D5D4用于选择读写方式

 D3D2D1用于选择工作方式

 D0用于选择数制

 读出控制字:

 D7D6为11,表示为读出控制字

D5,COUNT  非为0表示锁存计数值

D4,STATUS 非为0表示锁存计数器状态信息

如果读出命令仅锁存相应计数器的状态信息,则对相应计数器端口进行一次读操作,即可读出状态信息

如果读出命令仅锁存相应计数器的计数值,则对相应计数器端口进行两次读操作,依次读出计数值的低8位和高8位

如果读出命令仅锁存相应计数器的计数值,则对相应计数器端口执行三次读操作,第一次读出状态信息,第二次读出当前计数器的低8位,第三次读出当前计数器的高8位。

读出命令能同时锁存几个计数器的计数值。

8254初始化编程:

(1)向控制字寄存器写入方式控制字

(2)向使用的计数器写入计数初值

设8254端口地址为40H~43H,要求2号计数器工作在方式1,计数初值为十进制数4000,试写出初始化程序段。

40H:0号计数器,41H:1号计数器,42H:2号计数器,43H:控制字寄存器

2号计数器:D7D6=10

方式1:D3D2D1=001

解法一:

使用BCD计数:D0=1

十进制数4000,BCD表示为4000H,高8位为40H,低8位为00H。所以可以只写高8位,D5D4=10

所以方式控制字为10100011即0A3H(注意前面带0)

;写入端口43H
MOV AL,0A3H
OUT 43H,AL;    AL/AX用来IO端口的读写
;写计数器的高8位,低8位自动补0
MOV AL,40H
OUT 42H,AL;

解法二:

使用BCD计数,D0=1,可以先写低8位,后写高8位,D5D4=11,

方式控制字为10110011即B3H

MOV AL,B3H
OUT 43H,AL 

MOV AL,0
OUT 42H,AL

MOV AL,40H
OUT 42H,AL

注意:程序中BCD码的表示

MOV AX,1234H     1234H表示BCD码(注意加H)

MOV AX,1234        1234表示二进制数

当计数初值大于9999时,只能使用二进制,否则使用BCD码和二进制都可以。

解法三:

使用二进制数,D0=0,D5D4=11,低8位和高8位不能不写

方式控制字:10110010B即A2H

MOV AL,0A2H
OUT 43H,AL

MOV AX,4000  ;4000为二进制数
OUT 42H,AL   
MOV AL,AH
OUT 42H,AL

读取当前计数值:

方法1:D7D6=计数器编号,D5D4=00,D3D2D1D0=XXXX,锁存相应计数器的当前计数值,然后对相应的计数器端口进行两次读操作,依次读出计数值的低8位和高8位。

方式2:通过读出命令

例:设8254端口地址为40H~43H,试写出程序段,读取2号计数器当前计数值

读出命令:10,00, 0000=80H

;读出命令
MOV AL,80H
OUT 43H,AL


;读取低8位
IN AL,42H
MOV CL,AL


;读取高8位
IN AL,42H
MOV CH,AL

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到