天天看點

流水燈8086和8255Proteus仿真

流水燈8086和8255Proteus仿真
DATAS SEGMENT
    ;此處輸入資料段代碼 
    IOYO equ 0C400h;對應的端口位址
    MY8255_A equ IOYO+00H*4
    MY8255_B equ IOYO+01H*4
    MY8255_C equ IOYO+02H*4
    MY8255_MODE equ IOYO+03H*4
    LA DB ?
    LB DB ?
DATAS ENDS

STACKS SEGMENT
    ;此處輸入堆棧段代碼
    dw 256 dup(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此處輸入代碼段代碼
    mov dx,MY8255_MODE;定義8255工作方式
    mov al,80h;工作方式0,a口和b口為輸出
    out dx,al
Begin: 
    mov dx,MY8255_A;寫A口發出的起始資料 
    mov al,01h;1000 0000
    out dx,al    
    mov LA,al
    
    mov dx,MY8255_B;寫B口發出的起始資料
    mov al,80h
    out dx,al
    mov LB,al
    mov cx,7
LOOP1:
	call delay
	mov al,LA;将a口的起始資料右移再寫入a口
	rol al,1;循環右移
	mov LA,al
	
	mov dx,MY8255_A
	out dx,al
	mov al,lb;将b口的起始資料左移再寫入b口
	ror al,1;循環左移
	mov LB,al
	
	mov dx,my8255_B
	out dx,al
	loop loop1
	mov cx,7
Loop2:
	call delay
	mov al,la
	ror al,1
	mov la,al
	mov dx,MY8255_A
	
	out dx,al
	mov al,lb
	rol al,1
	mov lb,al
	mov dx,MY8255_B
	out dx,al
	loop loop2
	jmp begin
Quit:
    MOV AH,4CH;結束程式退出   
    INT 21H
delay proc near;軟體延時程式
	push cx
	push ax
	mov cx,0fh
D1:
	mov ax,0fffh
D2:
	dec ax
	jnz d2
	loop d1
	pop ax
	pop cx
	ret
delay endp
CODES ENDS
    END START
           

這裡隻實作了變化閃爍簡單的功能在這個基礎上可以實作更加複雜的功能,比如通過按鍵選擇輸出不同的流水燈樣式。

繼續閱讀