当前位置: 代码迷 >> 综合 >> 计算机组成原理实验:数码管显示实验
  详细解决方案

计算机组成原理实验:数码管显示实验

热度:62   发布时间:2023-09-29 18:13:41.0

1实验目的:要求掌握8255芯片的工作原理、初始化、编程应用。

2实验原理:通过端口A和端口B的输出实现数字在数码管的显示。

3实验内容:修改或自己编写程序将自己学号分三次、间隔1秒显示出来。

提示:多个数码管同时显示可以通过设置余辉时间实现.

程序及解释如下:
Data  segment
PortA equ 404H    ;8255的PA口地址xz db 0f9h,92h,0c0h,92hqs db 0c0h,0b0h,0c0h,0b0hqd db 0f9h,90h
s     db "Display a b c d at the same time. Press any key to exit...",0dh,0ah,"$"    ;程序功能提示
Data  ends
Code  segmentassume cs:code,ds:data
Start:mov ax,data mov ds,ax mov dx,offset s    ;显示提示mov ah,9int 21hmov dx, PortA+3mov al,80H out dx,al         ;PA、PB口初始化为基本输出方式
L0:   lea si,xz         ;将xz地址给simov ah,08h        ;置位选初值,从左边开始显示
L1:   push ax           ;  栈堆指令,数据进桟mov al,[si]       ;显示数字mov dx,PortAout dx,almov al,ahmov dx,PortA+1 ;地址加一out dx,al      ;到端口dxcall de;         延时inc si;        准备显示下一数字pop ax    ;栈堆指令,将数据打出shr ah,1;        选择下一数码管cmp ah,0;   判断是否显示完"d"jnz l1shr ah,1 ;        选择下一数码管push ax  ;栈堆指令,数据进桟mov dx,PortAout dx,almov al,ahmov dx,PortA+1out dx,alpop ax;栈堆指令,将数据打出call de
L2:   lea si,qsmov ah,08h        ;置位选初值,从左边开始显示
L3:   push ax;栈堆指令,数据进桟mov al,[si]       ;显示数字mov dx,PortAout dx,almov al,ahmov dx,PortA+1out dx,alcall de;         延时inc si;        准备显示下一数字pop ax;栈堆指令,将数据打出shr ah,1;        选择下一数码管cmp ah,0;   判断是否显示完"d"jnz l3shr ah,1push ax;栈堆指令,数据进桟mov dx,PortAout dx,almov al,ahmov dx,PortA+1out dx,alpop ax;栈堆指令,将数据打出call de
L4:   lea si,qdmov ah,08h        ;置位选初值,从左边开始显示
L5:   push ax;栈堆指令,数据进桟mov al,[si]       ;显示数字mov dx,PortAout dx,almov al,ahmov dx,PortA+1out dx,alcall de;         延时inc si;        准备显示下一数字pop ax;栈堆指令,将数据打出shr ah,1;        选择下一数码管cmp ah,2;   判断是否显示完"d"jnz l5shr ah,1shr ah,1push axmov dx,PortAout dx,almov al,ahmov dx,PortA+1out dx,alpop ax;栈堆指令,将数据打出call dejmp l0
Exit:mov ah,4ch          ; 结束程序int 21h
de  proc near        ; 循环延时子程序push cxpush bxmov cx,0000H
d1:   mov bx,9f00h
d2:   dec bxjnz d2loop d1pop bx;栈堆指令,将数据打出pop cx;栈堆指令,将数据打出retde endpCode  endsend Start
  相关解决方案