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

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

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

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

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

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

     end Start
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的书包哪里去了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值