实验五 可编程定时器/计数器(8254)

386 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

实验目的

掌握8254的基本要作原理和编程方法

D8254是一个可编程间隔定时器/计数器,是二进制的符合行业标准82C54。D8254解决了所有微型计算机系统中的一个最常见的问题,在软件控制下产生精确的时间延迟。D8254可以被用作一个:

  • 实时时钟
  • 偶数计数器
  • 数字单稳态
  • 可编程速率发生器
  • 方波发生器
  • 二进制速率乘法器
  • 复杂的波形发生器
  • 复杂的电机控制器

特性

  • 3个独立的16位计数器

  • 6个可编程的计数器模式:

    • 终端计数中断
    • 硬件可重触发单稳态
    • 波特率发生器
    • 方波模式
    • 软件触发选通
    • 硬件触发选通
  • 二进制或BCD计数

  • 状态读回指令

  • 简单的接口可以方便地连接到微控制器

  • 完全可综合,静态同步设计并且没有内部三态

实验代码

我就直接上实验代码了

Data segment
IOA equ 280H
IOcon equ 283H 
Data ends
Code segment
assume cs:code,ds:data


;编程控制字
;D7         D6          D5          D4          D3          D2          D1          D0
;------------           ---------------         --------------------------          -
;      |                        |                           |                       |
;计数器选择                   读写操作                  工作方式选择               0 -> 二进制
;00 -> 计数器0         00 -> 锁定当前计数器             000 ~ 101                 1 -> BCD码
;01 -> 计数器1         01 -> 读/写低8位                 方式0 ~ 5
;10 -> 计数器2         10 -> 读/写高8位                 110 ~ 111
;11 -> 不选择          11 -> 先读/写低8位后高           无效



start:
mov ax,data
mov ds,ax
mov dx,IOcon
mov al,11H      ;计数器0,读写低8位,方式0,BCD码
out dx,al
again:
mov al,9H   
mov dx,IOA
out dx,al       ;初始化计数器0  --->  9
input :
mov dx,IOA
in al,dx        ;读取A口
and al,0FH      ;高四位清零
call disp
cmp al,0h
jnz input
call delay
jmp again
mov ax,4c00H   ;ah = 4cH 带返回码al结束  al = 0 
int 21h

delay proc
push cx
mov cx,0ffffh
n:
nop
loop n
pop cx
ret
delay endp

disp proc near
push ax
push bx
push cx
push dx
mov dl,al
add dl,30h   ;相当于显示al个位数字0 ~ 9
mov ah,2     ;显示输出,dl是输出的字符
int 21h

mov dl,0dh    ;0dH  -->  归位键
int 21h
mov dl,0ah   ;0aH   -->  换行键
int 21h
pop dx
pop cx
pop bx
pop ax
ret
disp endp
code ends
end start