我是靠谱客的博主 搞怪荷花,最近开发中收集的这篇文章主要介绍【微机接口】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字节的端口地址

最后

以上就是搞怪荷花为你收集整理的【微机接口】8254的控制字与编程方法的全部内容,希望文章能够帮你解决【微机接口】8254的控制字与编程方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部