基于8086的8路抢答器proteus仿真 汇编语言程序设计

硬件设计

仿真图: 具有对应指示灯
基于8086的8路抢答器proteus仿真 汇编语言程序设计_第1张图片

程序设计

;====================================================================
; 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

附:http://www.jh-tec.cn/archives/7276

你可能感兴趣的:(技术分享,proteus)