流水灯8086和8255Proteus仿真

流水灯8086和8255Proteus仿真_第1张图片

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

这里只实现了变化闪烁简单的功能在这个基础上可以实现更加复杂的功能,比如通过按键选择输出不同的流水灯样式。

你可能感兴趣的:(汇编,Proteus)