- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 并行接口与定时——定时器部分
第8章 并行接口及定时/计数技术;8.4 可编程计数/定时器8253/8254 ;1. 3 个独立的16位计数器 ; 2. 控制命令寄存器
此寄存器用来保存来自CPU送入的控制字。每个计数器都有一个控制命令寄存器,用于保存计数器的控制信息。 控制字将决定计数器的工作方式、计数形式及输出方式,亦能决定应如何装入计数器初值。 8253的 3 个控制寄存器只占用一个地址号,而靠控制字中最高二位来指定当前的控制字是发给哪个计数器的。 控制寄存器只能写入,不能读出。 ; 3. 读/写逻辑
读/写逻辑的任务是接收来自CPU的控制信号,完成对8253各计数寄存器的读/写操作。这些控制信号包括读信号RD、写信号WR、片选信号和片内寄存器寻址信号A0、A1。 ; 4. 数据总线缓冲器
这是一个双向、三态8位缓冲器。它用于8253和系统数据总线连接。CPU通过数据总线缓冲器将控制命令字和计数值写入8253计数器,或者从8253计数器中读取当前计数值。
8253的8位数据线D0~D7通常与系统数据总线D0~D7相连。
8253共占用4个I/O地址。当A1A0=00时,为计数器0中的CR和OL寄存器的共用地址。同时,当A1A0=01和10时,分别为计数器1和2的CR和OL的共用地址。当A1A0=11时,是3个计数器内的3个控制寄存器的共用的地址号。但CPU给哪一个计数器送控制字,这由控制字格式中最高两位(计数器选择位)SC1、SC0的编码来决定。 ;表 8.4 8253端口的地址分配 ;8.4.2 8253的控制字、 读/写操作和初始化编程
1. 8253的控制字格式 ; 2. 8253的读/写操作
(1) 读操作。 所谓读操作是指读出某计数器的计数值至CPU中。 有两种读数方法。
① 先使计数器停止计数(在GATE端加低电平或关闭CLK脉冲): 根据送入的控制字中RL1、RL0的状态,用一条或两条输入IN指令读CE的内容,通常第一次读低字节(LSB),第二次读出高字节。实际上,CPU是通过输出锁存器OL中读出的,因为在计数过程中OL的内容是跟随CE内容变化的。此时由于CE不再计数, 故可稳定地读出OL(即CE)的内容。 ; ② 在计数过程中不影响CE的计数而读取计数值: 这称为“飞读”方法。为达此目的,应先对8253写入一个具有锁存功能的控制字,即D5D4位(RL1、RL0)应取00,而其余位不变。这样就可将当前的CE内容锁存入OL中,然后再用两条输入指令将OL中的内容取到CPU中,从而实现“飞读”。当CPU读取了计数值后,或对计数器重新初始编程后8253会自动解除锁存状态, OL中的值又随计数器CE值变化。 ; (2) 写操作。 所谓写操作是指CPU对8253写入控制字或写入计数初值。 8253中3个计数器的控制寄存器地址号是共用的,并由控制字中D7D6位(SC1、SC0)的状态来确定是哪一个计数器的控制字, 从而计数初值会分别写入各对应的端口计数器CR中。
8253投入工作之前,CPU要对它进行初始化编程。初始化编程的步骤为:
① 写入计数器的控制字, 规定其工作方式及相应功能; ; ② 写入计数初值。当计数初值为8位,则控制字中RL1,RL0应取01,只写入CR的低8位,CR的高8位会自动置0;若是16位计数,而低8位是0,则应取RL1、RL0为10,只写入高8位, 低8位会自动置0。若是16位的计数初值,则LR1,LR0=11,应分两次写入初值,先写低8位,再写入高8位。由于计数器采用递减方式计数,因此如果计数初值为0000H,则是最大的计数初值。
若选择0计数器,工作在方式3,计数初值为2354H,十进制计数方式;或选择1#计数器,工作在方式2,计数初值为18H, 二进制计数方式。并设8253端口地址为40~43H。 ;则根据上述各计数器的功能, 其初始化编程如下: ;;对1#计数器初始化编程。
MOV AL, ; 对1#计数器送控制字。
OUT 43H, AL
MOV AL, 18H ; 计数初值送低8位。
OUT 41H, AL
当采用“飞读”的方法读取1#计数器的计数值时,可采用如下程序片段:
MOV AL, ; 对1#计数器送锁存控制字。
OUT 43H, AL
IN AL, 41H ; 读低8位。
MOV CL, AL ; 读取的计数
文档评论(0)