本文已参与「新人创作礼」活动,一起开启掘金创作之路。
实验目的
掌握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