我是靠谱客的博主 疯狂煎饼,最近开发中收集的这篇文章主要介绍实验六、8254定时/计数器实验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

实验六、8254定时/计数器实验

1、实验目的

  1. 了解定时计数器8254的初始化及用法。
  2. 了解定时计数器8254各种工作方式的特点。

2、实验内容

编写程序,使8254的计数器1 分别工作在方式 0、1、2、3下,在示波器上观察各工作方式下 OUT1 的输出波形。

3、实验原理

8253/8254 是 Intel公司生产的通用定时/计数器。8254是在8253的基础上稍加改进而推出的改进型产品,它们的引脚定义与排列、硬件组成等基本上是相同的。因此 8254 的编程方式与 8253 是兼容的,凡是使用 8253 的地方均可用 8254代替。 相对 8253,8254芯片的改进之处包括:

  1. 允许最高计数脉冲(CLK)的频率不同。8253的最高频率为2MHz,而 8254允许的最高计数脉冲频率可达 10MHz。
  2. 8254每个计数器内部都有一个状态寄存器和状态锁存器,而8253没有。
  3. 8254有一个读回命令字,用于读出当前减 1 计数器CE的内容和状态寄存器的内容,而8253没有此读回命令字。

8254的工作方式如下述:
(1)方式0:计数到0结束输出正跃变信号方式。
(2)方式1:硬件可重触发单稳方式。
(3)方式2:频率发生器方式。
(4)方式3:方波发生器。
(5)方式4:软件触发选通方式。
(6)方式5:硬件触发选通方式。

8254 的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。控制字格式如表 1、表 2 所示。
表1 方式控制字表2 读回控制字

4、实验记录

(博主做完实验后,将一些需要理解的点在此记录一下。)

引脚说明:每个计数器都有CLK,OUT,GATE三个接口
  1. CLK 连接外部时钟,外部时钟信号的每次输入都会使计数值减一。(假设外部时钟频率为 x Hz,则计数器初值设置为 x 可以作成计时1秒的计数器)
  2. OUT 是计数器的输出端,每当计数器归零时,会按工作方式输出不同的信号。(连接到AD转换器可以在示波器里观察到波形)
  3. GATE 是由外部输入的门控制端,用于控制和启动计数器的工作。(在某些工作方式下用于控制启动计数器,在某些工作方式下用于控制允许或禁止计数)
工作方式:基础实验要求熟悉使用工作方式0~3
  1. 方式0:写入计数器初值,计数器工作期间维持输出低电平,计数器归零后维持输出高电平。如果在计数器归零后重新赋予计数器初值,则会让计数器重新进入工作状态。(无须启动,GATE置零时禁止计数)
  2. 方式1:写入计数器初值,启动计数器,计数器工作期间维持输出低电平,计数器归零后维持输出高电平。如果在计数器归零后重新赋予计数器初值,则需要重新启动计数器才能让计数器重新进入工作状态。(GATE出现0->1上升沿时启动计数)
  3. 方式2:写入计数器初值,计数器工作期间维持输出高电平,当计数到1时,输出低电平,当计数到0时,重新填充初值,并开启下一轮计数。(无须启动,GATE置零时禁止计数)
  4. 方式3:写入计数器初值,计数器会输出近似1:1的方波,计数器归零后,会自动重新填充初值,并开启下一轮计数。(无须启动,GATE置零时禁止计数)
扩展:计数器串联(降频)

已知计数器的CLK引脚输入的信号会让该计数器的计数值减一,所以将计数器1CLK和(工作方式3的)计数器0OUT相接时,可以实现 “由计数器0充当计数器1的CLK输入时钟“ 的效果。(假设计数器0计时1秒,那么计数器1的计数值将每秒减1)

5、代码记录:

A8254 EQU 0600H          	;8254的计数器0地址 
B8254 EQU 0602H           	;8254的计数器1地址 
C8254 EQU 0604H           	;8254的计数器2地址 
M8254 EQU 0606H      		;8254的控制寄存器地址 

CODE SEGMENT
    ASSUME CS:CODE
    
START:
    ;MOV AL,30H        ;timer0 work on mode 0
    ;MOV AL,32H        ;timer0 work on mode 1
    ;MOV AL,34H        ;timer0 work on mode 2
    MOV AL,36H        ;timer0 work on mode 3
    MOV DX,M8254
    OUT DX,AL      
    
    MOV DX,A8254		;因为连接到18.432kHz的时钟上,所以2400H刚好是0.5秒的计时
    MOV AL,00H
    OUT DX,AL
    MOV AL,24H
    OUT DX,AL
    
    ;MOV AL,70H        ;timer1 work on mode 0
    ;MOV AL,72H        ;timer1 work on mode 1
    MOV AL,54H        ;timer1 work on mode 2
    ;MOV AL,56H        ;timer1 work on mode 3
    MOV DX,M8254
    OUT DX,AL      
    
    MOV DX,B8254
    MOV AL,03H		;三分频
    OUT DX,AL
    
LP:	JMP LP		;在循环里等待并观察计数器工作

CODE ENDS
    END START

最后

以上就是疯狂煎饼为你收集整理的实验六、8254定时/计数器实验的全部内容,希望文章能够帮你解决实验六、8254定时/计数器实验所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部