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

实验目的

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

实验代码

我就直接上实验代码了

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

你可能感兴趣的:(32位新概念汇编,编程语言)