硬件设计
仿真图: 具有对应指示灯
程序设计
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created: 周三 十一月 7 2018
; Processor: 8086
; Compiler: MASM32
; Before starting simulation set Internal Memory Size
; in the 8086 model properties to 0x10000
;====================================================================
DATA SEGMENT
;U1
IOCON EQU 8006H ;设置com
IOA EQU 8000H ;设置A端口
IOB EQU 8002H ;设置B端口
IOC EQU 8004H ;设置C端口
;U2
IOCON2 EQU 9006H ;设置com
IOA2 EQU 9000H ;设置A端口
IOB2 EQU 9002H ;设置B端口
IOC2 EQU 9004H ;设置C端口
X0 DB 0FEH
X1 DB 0FDH
X2 DB 0FBH
X3 DB 0F7H
X4 DB 0EFH
X5 DB 0DFH
X6 DB 0BFH
X7 DB 07FH
DISPLAY DB 6FH, 7FH, 07H, 7DH, 6DH, 66H, 4FH, 5BH, 06H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV BX,OFFSET DISPLAY ;把DISPLAY的有效地址送到BX
MOV AL,80H ;设置8255(1)的工作方式:方式0
MOV DX,IOCON
OUT DX,AL
MOV AL,80H ;设置8255(2)的工作方式:方式0
MOV DX,IOCON2
OUT DX,AL
MOV DX,IOC ;按键保持高电平状态
MOV AL,0FFH
OUT DX,AL
MOV DX,IOC2 ;按键保持高电平状态
MOV AL,0FFH
OUT DX,AL
MOV DX,IOA2
MOV AL,0FFH
OUT DX,AL
MOV AL,0FFH ;设置LED灯初始保持关闭状态
MOV DX,IOB
OUT DX,AL
MOV CX,9 ;设置重复次数
BEGIN: MOV DX,IOC2 ;获取IOC2的状态
IN AL,DX ;把IOC2的状态传送到累加器AX(AL)
CMP AL,X0 ;主持人按下启动
JE TIMER
JMP BEGIN
TIMER:
MOV AL,0FEH
MOV DX,IOA2
OUT DX,AL
MOV DX,IOC ;获取IOC的状态
IN AL,DX ;把IOC的状态传送到累加器AX(AL)
CMP AL,X0 ;比较两个数的大小 LED0
JE LED0
CMP AL,X1 ;比较两个数的大小 LED1
JE LED1
CMP AL,X2 ;比较两个数的大小 LED2
JE LED2
CMP AL,X3 ;比较两个数的大小 LED3
JE LED3
CMP AL,X4 ;比较两个数的大小 LED4
JE LED4
CMP AL,X5 ;比较两个数的大小 LED5
JE LED5
CMP AL,X6 ;比较两个数的大小 LED6
JE LED6
CMP AL,X7 ;比较两个数的大小 LED7
JE LED7
MOV DX,IOA
MOV AL,[BX] ;取一个数据送到AL
OUT DX,AL ;IO输出对应断码
INC BX ;修改地址指针
DEC CX ;循环次数减1
JZ LED ;CX=0跳转LED
CALL DELAY1 ;延时一段时间
JMP TIMER
LED0: MOV AL,X0
MOV DX,IOB
OUT DX,AL
MOV AL,0FDH
MOV DX,IOA2
OUT DX,AL
JMP STOP
LED1: MOV AL,X1
MOV DX,IOB
OUT DX,AL
MOV AL,0FDH
MOV DX,IOA2
OUT DX,AL
JMP STOP
LED2: MOV AL,X2
MOV DX,IOB
OUT DX,AL
MOV AL,0FDH
MOV DX,IOA2
OUT DX,AL
JMP STOP
LED3: MOV AL,X3
MOV DX,IOB
OUT DX,AL
MOV AL,0FDH
MOV DX,IOA2
OUT DX,AL
JMP STOP
LED4: MOV AL,X4
MOV DX,IOB
OUT DX,AL
MOV AL,0FDH
MOV DX,IOA2
OUT DX,AL
JMP STOP
LED5: MOV AL,X5
MOV DX,IOB
OUT DX,AL
MOV AL,0FDH
MOV DX,IOA2
OUT DX,AL
JMP STOP
LED6: MOV AL,X6
MOV DX,IOB
OUT DX,AL
MOV AL,0FDH
MOV DX,IOA2
OUT DX,AL
JMP STOP
LED7: MOV AL,X7
MOV DX,IOB
OUT DX,AL
MOV AL,0FDH
MOV DX,IOA2
OUT DX,AL
JMP STOP
STOP: MOV DX,IOA
MOV AL,[BX] ;取一个数据送到AL
OUT DX,AL ;IO输出对应断码
MOV DX,IOC2
IN AL,DX
CMP AL,X1
JE START
JMP STOP