8086汇编控制8255实现开关控制LED以及跑马灯

/*第一次使用汇编,“万事开头难”,这么两个程序居然花了3个多小时才弄出来

主要是一开头不知道循环该怎么弄,想起现在的程序员还真是幸福啊,一个while,或者for搞定了。

毕竟第一次用,做个纪念。*/

1)8个开关控制8个LED通断


 ;端口地址
 PORT_A     EQU     280H
 PORT_B     EQU     281H
 PORT_CR    EQU     283H
;------------------------------------------
DATA SEGMENT ;数据段起始

DATA ENDS
;------------------------------------------
CODE SEGMENT 
ASSUME CS:CODE,DS:DATA
START:

;初始化8255
;A端口输出,B端口是输入
    	MOV DX,PORT_CR
    	MOV AL,10010000B;90H
    	OUT DX,AL;
;按键点亮第一个LED
JMP2:   MOV    DX,PORT_A ;开关读入
        IN     AL,DX ;开关读入
        MOV    DX,PORT_B ;LED输出
        OUT    DX,AL	 
        JMP    JMP2  
CODE ENDS
END START
;------------------------------------------


2)“流水灯”或者“跑马灯”

 ;端口地址
 PORT_A  EQU 280H
 PORT_B  EQU 281
 PORT_CR EQU 283H
;------------------------------------------
 DATA SEGMENT ;数据段起始
 TABLE DB 01H,02H,04H,08H,10H,20H,40H,80H;还有第二种思路,实验时出了点问题。偷懒用ROL/ROR解决
 DATA ENDS
;------------------------------------------
CODE SEGMENT ;
ASSUME CS:CODE,DS:DATA      
;------------------------------------------
START:  ;初始化8255
        ;A端口输出,B端口是输入
    	MOV DX,PORT_CR
    	MOV AL,10010000B;90H
    	OUT DX,AL;   
    	MOV DX,PORT_B;LED输出
HERE:	MOV AL,01H
    	ROL AL,1;左移   
    	;ROR AL,1;右移
    	MOV BX,300
DELAY:  MOV CX,16EAH    	
DELAY1:LOOP DELAY1;延时20ms
        DEC BX
        JNZ DELAY    	
        JMP HERE
CODE ENDS
END START
;------------------------------------------
 
 

你可能感兴趣的:(理论研究,学习笔记)