⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qd.asm

📁 利用8255芯片功能设计的8位抢答器
💻 ASM
字号:
 TITLE QD PROGRAMM                         ;标题伪指令

 DATA SEGMENT                              ;数据段定义
 IOPORT EQU 5400H-280H                     ;I/O基址变量
;...............定义数据表,用以控制七段数码管
 TABLE  DB  3FH,06H,5BH,0                  ;'0','1','2'的编码
        DB  4FH,3  DUP(0)                  ;'3'的编码
        DB  66H,7  DUP(0)                  ;'4'的编码
        DB  6DH,15 DUP(0)                  ;'5'的编码
        DB  7DH,31 DUP(0)                  ;'6'的编码
        DB  07H,63 DUP(0)                  ;'7'的编码
        DB  7FH                            ;'8'的编码
DATA  ENDS

STACK1 SEGMENT PARA STACK                  ;定义堆栈段
       DW   20H  DUP(0)
STACK1 ENDS

CODE   SEGMENT                             ;定义代码段
       ASSUME  CS:CODE,DS:DATA,SS:STACK1   ;定义cs,ds和ss寄存器
START: MOV  AX,DATA                        ;将DATA段的地址送给DS寄存器,以便寻址时使用
       MOV  DS,AX
;................判断键盘输入条件
SHOW:  MOV  AH,1                           ;DOS 01号功能调用
       INT  21H
       CMP  AL,' '                         ;是否是空格
       JE   QD                             ;等于转移,按下空格开始新一轮
       JMP  OUTF                           ;按下其他键退出程序
;................写控制端
QD:    MOV  DX,IOPORT+28BH                 ;将控制寄存器端口地址送入DX
       MOV  AL,8BH                         ;将 8BH控制字送入AL
       OUT  DX,AL                          ;将控制字送入控制寄存器,使8255工作方式为0,A口输出,B口和C口都是输入
       CALL SHOW_ZERO                      ;先显示0
;................从C口读
       MOV  DX,IOPORT+28AH                 ;将C口地址送入DX
       IN   AL,DX                          ;将C口读入的数据送入AL
;................判断输入端数据并查表
       CMP  AL,00H                         ;检查C口读入的数据是否为0
       JNE  C                              ;不为0则跳转到"C"
       JMP  QD                             ;为0则继续抢答,直至不为0
C:     MOV  BX,OFFSET TABLE                ;将数码管数据表的地址送入BX
       XLAT                                ;查询TABLE表中偏移量为AL的数据,并送入AL中
;................从A口输出
DIS:   MOV  DX,IOPORT+288H                 ;将A口地址送入DX
       OUT  DX,AL                          ;将AL中的数据,也就是数码管的显示代码从A口输出
       JMP  SHOW                           ;继续下一轮的按键判断
;................退出程序
OUTF:  MOV AX,4C00H                        ;终止当前程序并返回调用程序
       INT  21H                            ;返回DOS
;................子程序,显示0
SHOW_ZERO  PROC
       MOV  AL,3FH                         ;0是3FH
       MOV  DX,IOPORT+288H                 ;将A口地址送入DX
       OUT  DX,AL                          ;将0的显示代码从A口输出
       RET                                 ;返回主程序
       ENDP                                ;结束子程序
       CODE ENDS                           ;结束代码段
       END START                           ;结束汇编

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -