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

两种控制字:

方式控制字:

8位,D7D6用于选择计数器

D5D4用于选择读写方式

 D3D2D1用于选择工作方式

 D0用于选择数制

如果使用二进制计数,计数初值最大值为65536(0000H) 初值取值范围为0000H~FFFFH

如果使用BCD计数,计数初值最大值为10000,(0000H)  初值取值范围为0000H~9999H

 读出控制字:

 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

注意:!!!D5D4先写低8位后写高8位,而不是先写高8位,后写低8位。

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即B2H

A:1010,B:1011,C:1100,D:1101,E:1110,F:1111

MOV AL,0B2H
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

外扩8254应用举例:

给定2兆信号,在ISA总线上外扩一片8254。口地址为218H~21BH,要求:

设计硬件电路,编程产生8KHZ方波和1.6KHZ的连续脉冲。

解:

0号计数器初值N0=2兆/8k=250<256(所以最多只有8位),工作在方式3、

1号计数器初值N0=2兆/1.6K=1250,有16位,工作在方式2。

所以0号计数器方式控制字 : 00(0号计数器),01(只写低8位), 011(方式3) 0(二进制)

所以1号计数器方式控制字 : 01(1号计数器),11(高8位和低8位),010(方式2),0(二进制)

8254的初始化:

;写入方式控制字

MOV DL,21BH;出错

MOV DX,21BH

MOV AL,16H

OUT AL,DX;出错

OUT DX,AL;CPU把AL的内容送入端口DX

;0号计数器写入计数初值

MOV AL,250

MOV DX,218H

OUT AL,DL;出错

OUT DX,AL

;写入方式控制字

MOV DX,21BH

MOV AL,74H

OUT AL,DL;出错

OUT DX,AL

;1号计数器写入计数初值

MOV AX,1250

MOV DX,219H

;写低8位

OUT AL,DX;出错

OUT DX,AL

;写高8位

MOV AL,AH

OUT AL,DX;出错

OUT DX,AL

in、out 方向从右向左

使用DX存放4字节的端口地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值