# Explicacion de Codigo Ensamblador - PPI 8255



## JimGordon (May 31, 2011)

Saludos. Veran soy un novato en las cuestiones de electronica y en la escuela nos propusieron una practica que consiste en lo siguiente: Tenemos que elaborar un codigo en ensamblador para controlar un PPI 8255 cuyos puertos A, B y C estan conectados a unos leds. El proposito del programa es enviar señales para activar los puertos de forma un led se encienda y recorra las 24 salidas del 8255 y de regreso en un ciclo.

Un compañero me compartio el siguiente codigo, pero el problema es que no esta documentado, en si esta sencillo, pero quisiera que alguien me pudiera explicar en que consisten las lineas mas esenciales del programa (programar el 8255, enviar los datos a los leds, el ciclo).

Estamos ejecutando el codigo en una PC con Windows 98, mediante las salidas del puerto paralelo LPT1.

Apreciare mucho su ayuda. Muchas Gracias.

EDIT: Por alguna razon no me permitio adjuntar el .asm, asi que les dejo el texto tal como es. Y si algun moderador pudiera modificar el post para adjuntar este texto lo agradeceria mucho. Aqui el archivo en un link: 

```
--------------------------------------------------------------------
.MODEL SMALL
.CODE
PROGRAMA:

;-Inicia 8085
START:
	MOV DX,0378H
	MOV AL,80H
	OUT DX,AL
	CALL RETARDO

	MOV DX,037aH
	MOV AL,04
	OUT DX,AL
	CALL RETARDO

	MOV DX,037aH
	MOV AL,00
	OUT DX,AL
	CALL RETARDO

	MOV DX,037aH
	MOV AL,04
		OUT DX,AL
CALL RETARDO

;-Termina 8085

;-Inicia Corrimiento Puerto A
MOV DX,0378H
MOV AL,80H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,40H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,20H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA

;---------------------

MOV DX,0378H
MOV AL,10H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,8H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA

;---------------------
MOV DX,0378H
MOV AL,4H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,2H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------
MOV DX,0378H
MOV AL,1H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------
MOV DX,0378H
MOV AL,00H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;-Termina Corrimiento Puerto A

;-Inicia Corrimiento Puerto C

MOV DX,0378H
MOV AL,80H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------

MOV DX,0378H
MOV AL,40H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------


MOV DX,0378H
MOV AL,20H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------
MOV DX,0378H
MOV AL,10H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------


MOV DX,0378H
MOV AL,8H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------


MOV DX,0378H
MOV AL,4H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------
MOV DX,0378H
MOV AL,2H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------

MOV DX,0378H
MOV AL,1H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------

MOV DX,0378H
MOV AL,00H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------



;-Termina Corrimiento Puerto A

;-Inicia Corrimiento Puerto B

MOV DX,0378H
MOV AL,01H
OUT DX,AL
CALL RETARDO
CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,02H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------


MOV DX,0378H
MOV AL,04H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,08H
OUT DX,AL
CALL RETARDO
CALL ENCENDERB
;---------------------


MOV DX,0378H
MOV AL,10H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------


MOV DX,0378H
MOV AL,20H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,40H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------
MOV DX,0378H
MOV AL,80H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------
;-Termina Corrimiento Puerto B

;-Inicia Corrimiento De Regreso Puerto B
MOV DX,0378H
MOV AL,40H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------
MOV DX,0378H
MOV AL,20H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,10H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,08H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,04H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,02H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,01H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------

MOV DX,0378H
MOV AL,00H
OUT DX,AL
CALL RETARDO

CALL ENCENDERB
;---------------------


;-Termina Corrimiento De Regreso Puerto B

;-Inicia Corrimiento De Regreso Puerto C


MOV DX,0378H
MOV AL,01H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------



MOV DX,0378H
MOV AL,2H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------
MOV DX,0378H
MOV AL,4H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------

MOV DX,0378H
MOV AL,8H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------

MOV DX,0378H
MOV AL,10H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------

MOV DX,0378H
MOV AL,20H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------
MOV DX,0378H
MOV AL,40H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------
MOV DX,0378H
MOV AL,80H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------

MOV DX,0378H
MOV AL,00H
OUT DX,AL
CALL RETARDO

CALL ENCENDERC
;---------------------

;-Termina Corrimiento De Regreso Puerto C

;-Inicia Corrimiento De Regreso Puerto A


MOV DX,0378H
MOV AL,1H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,2H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,4H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,8H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,10H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,20H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,40H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

MOV DX,0378H
MOV AL,80H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------


MOV DX,0378H
MOV AL,00H
OUT DX,AL
CALL RETARDO

CALL ENCENDERA
;---------------------

JMP START
;-Termina Corrimiento De Regreso Puerto A

INICIO: SHR AL,01
OUT DX,AL
CALL RETARDO
	CMP AL,00H
	JNZ INICIO
	MOV AX,4C00H
	INT 21H
RETARDO:
	MOV BX,3FFFH
	MOVCX:    MOV CX,3FFFH
	DECCX:    DEC CX
	JNZ DECCX
	DEC BX
	JNZ MOVCX
RET

ENCENDERA:
	MOV DX,037aH
	MOV AL,07
	OUT DX,AL
	CALL RETARDO

	MOV DX,037aH
	MOV AL,03
	OUT DX,AL
	CALL RETARDO
	
	MOV DX,037aH
	MOV AL,07
	OUT DX,AL
	CALL RETARDO

RET


ENCENDERC:
	MOV DX,037aH
	MOV AL,05
	OUT DX,AL
	CALL RETARDO

	MOV DX,037aH
	MOV AL,01
	OUT DX,AL
	CALL RETARDO
	
	MOV DX,037aH
	MOV AL,05
	OUT DX,AL
	CALL RETARDO
RET

ENCENDERB:
	MOV DX,037aH
	MOV AL,06
	OUT DX,AL
	CALL RETARDO

	MOV DX,037aH
	MOV AL,02
	OUT DX,AL
	CALL RETARDO

	MOV DX,037aH
	MOV AL,06
	OUT DX,AL
	CALL RETARDO
RET


MOV AX,4C00H
INT 21H

.STACK
END PROGRAMA


-----------------------------------------------------------
```


----------

