3.1
编程提示
1、8253控制寄存器地址
283H
计数器0地址 280H 计数器1地址 281H CLK0连接时钟 1MHZ
;*************************; ;* 8253方式0计数器实验 *; ;*************************; io8253a equ 283h io8253b equ 280h code segment assume cs:code
start: mov al,14h ;设置8253通道0为工作方式2,二进制计数 mov dx,io8253a out dx,al
mov dx,io8253b ;送计数初值为0FH mov al,0fh out dx,al
lll: in al,dx ;读计数初值 call disp ;调显示子程序 push dx mov ah,06h mov dl,0ffh int 21h pop dx jz lll
mov ah,4ch ;退出 int 21h
disp proc near ;显示子程序 push dx
and al,0fh ;首先取低四位 mov dl,al
cmp dl,9 ;判断是否<=9
jle num ;若是则为'0'-'9',ASCII码加30H add dl,7 ;否则为'A'-'F',ASCII码加37H num: add dl,30h mov ah,02h ;显示 int 21h
mov dl,0dh ;加回车符 int 21h
mov dl,0ah ;加换行符
int 21h pop dx
ret ;子程序返回 disp endp code ends end start
3.2
编程提示
1、8253控制寄存器地址
;******************* ;* 8253分频 * ;******************* io8253a equ 280h io8253b equ 281h io8253c equ 283h code segment
assume cs:code
start:mov dx,io8253c ;向8253写控制字 mov al,36h ;使0通道为工作方式3 out dx,al
mov ax,1000 ;写入循环计数初值1000 mov dx,io8253a
out dx,al ;先写入低字节 mov al,ah
out dx,al ;后写入高字节 mov dx,io8253c
mov al,76h ;设8253通道1工作方式2 out dx,al
mov ax,1000 ;写入循环计数初值1000 mov dx,io8253b
out dx,al ;先写低字节 mov al,ah
out dx,al ;后写高字节 mov ah,4ch ;程序退出 int 21h
283H
计数器0地址 280H 计数器1地址 281H CLK0连接时钟 1MHZ
code ends
end start
4.1
编程提示
1、8255控制寄存器端口地址 28BH
;*******************************; ;* 8255方式0的C口输入,A口输出 *; ;*******************************; io8255a equ 288h io8255b equ 28bh io8255c equ 28ah code segment assume cs:code
start: mov dx,io8255b ;设8255为C口输入,A口输出 mov al,8bh out dx,al
inout: mov dx,io8255c ;从C口输入一数据 in al,dx
mov dx,io8255a ;从A口输出刚才自C口 out dx,al ;所输入的数据 mov dl,0ffh ;判断是否有按键 mov ah,06h int 21h
jz inout ;若无,则继续自C口输入,A口输出 mov ah,4ch ;否则返回 int 21h code ends end start
A口的地址 C口的地址
288H 28AH
5.2
编程提示
实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
data ends code segment
assume cs:code,ds:data start: mov ax,data mov ds,ax
mov dx,io8255b ;将8255设为A口输出 mov al,80h out dx,al
mov di,offset buffer1 ;设di为显示缓冲区 loop2: mov bh,02
lll: mov byte ptr bz,bh push di dec di add di, bz
mov bl,[di] pop di mov al,0 mov dx,io8255a out dx,al mov bh,0
mov si,offset led add si,bx mov al,byte ptr [si]
mov dx,io8255c out dx,al
mov al,byte ptr bz mov dx,io8255a out dx,al mov cx,3000
delay: loop delay mov bh,byte ptr bz shr bh,1 jnz lll mov dx,0ffh mov ah,06 int 21h
je loop2 mov dx,io8255a
mov al,0 out dx,al
mov ah,4ch int 21h code ends
end start
;bl为要显示的数 ;置led数码表偏移地址为SI;求出对应的led数码 ;自8255A的口输出 ;使相应的数码管亮 ;延时 ;有键按下则退出 ;关掉数码管显示 ;返回

