Está en la página 1de 4

UNIVERSIDAD NACIONAL DE HUANCAVELICA

(Creado por ley Nº 25265)


FACULTAD DE INGENIERÍA ELECTRÓNICA-SISTEMAS
ESCUELA PROFESIONAL DE INGENIERÍA-ELECTRÓNICA

ANALISIS DEL PROGRAMA


CORRESPONDIENTE A UN SEMÁFORO

ASIGNATURA:
ARQUITECTURA DE MICROPROCESADORES

DOCENTE:
Ing. ESQUIVIAS BARRAGÁN, Paúl Jean

ESTUDIANTE:
VILLAZANA HUAMÁN, Ronald Cristhian

SEMESTRE:
2020-I

CICLO:
VI

PAMPAS-TAYACAJA
2020
Semaforo
;
$MOD51

$TITLE(semaforo)
;Definiciones
AGRN equ P1.0 ;asignamos el nombre simbolico AGRN al pin 0 del puerto 1
ARED equ P1.1 ;asignamos el nombre simbolico ARED al pin 0 del puerto 1
AYEL equ P1.2 ;asignamos el nombre simbolico AYEL al pin 0 del puerto 1
BGRN equ P1.3 ;asignamos el nombre simbolico BGRN al pin 0 del puerto 1
BRED equ P1.4 ;asignamos el nombre simbolico BRED al pin 0 del puerto 1
BYEL equ P1.5 ;asignamos el nombre simbolico BYEL al pin 0 del puerto 1

LJMP INICIO ;Salto de manera incondicional a la etiqueta INICIO

ORG 0013H ;Inicializa el contador de programa en el dirección 0013H


LJMP EXT1 ;Salta de manera incondicional a la etiqueta EXT1
LJMP MAIN ;vuelve a la etiqueta MAIN

INICIO: ;Etiqueta INICIO


MOV SP,#20h ;Mover el valor 20h al puntero de pila
LCALL CLR_LCD ;llama a la subrutina CLR_LCD

MAIN: ;Etiqueta-subrutina MAIN


CALL CLEAR_ALL ;Llama a la subrutina CLEAR_ALL
SETB BRED ;Pone a 1 BRED( pin 4 puerto 1),pone en corte al
transistor asociado
SETB AGRN ;Pone a 1 AGRN( pin 0 puerto 1),pone en corte al
transistor asociado

MOV R0,#06H ;movemos el valor 06H al registro R0


(sirve como contador )
LOOP1: LCALL ONESEC ;saltara a ONESEC (tiempo )
DJNZ R0,LOOP1 ;Decrementa el Registro R0 y salta a LOOP1 si no es 0

CALL CLEAR_ALL ;llama al registro ClEAR_ALL


SETB BRED ;Pone en 1 logico BRED (pin 4 puerto 1)
SETB AYEL ;Pone a 1 logico AYEL(pin 2 del puerto 1)

LCALL ONESEC ;llama a ONESEC (tiempo)

CALL CLEAR_ALL ;LLama ala subrrutina ClEAR_ALL


SETB ARED ;Pone a 1 logico ARED (pin 1 puerto 1)
SETB BRED ;pone a 1 logico BRED (pin 4 puerto 1)

LCALL ONESEC ; llama a Etiqueta ONESEC (tiempo )

CALL CLEAR_ALL ; llama a subrutina CLEAR_ALL


SETB ARED ;pone a 1 logico ARED (pin 1 puerto 1)
SETB BGRN ;pone a 1 logico BGRN
MOV R0,#06H ;movemos el valor 06H al registro R0
LOOP2: LCALL ONESEC ;llamamos al subrutina ONESEC(tiempo)
DJNZ R0,LOOP2 ;decrementa el registro R0 y salta y salta a LOOP2 si no
es 0

CALL CLEAR_ALL ;llama a CLEAR_ALL


SETB ARED ;Pone a 1 logico ARED
SETB BYEL ;pone a 1 logico BYEL

LCALL ONESEC ;llamamos a subrutina ONESEC


(tiempo)

CALL CLEAR_ALL ;llamamos a CLEAR_ALL


SETB ARED ;pone a 1 logico ARED (pin 1 puerto 1)
SETB BRED ;pone a 1 logico BRED (pin 4 puerto 1)

LCALL ONESEC ;llamamos a ONESEC(tiempo)


JMP MAIN ;salto indirecto a la subrutina MAIN

;******
EXT1: ; Subrutina EXT1
SETB ACC.0 ;ponemos un 1 a la direccion del bit 0 del
acomulador
RETI

;Subrutinas
CLR_LCD: ;subrutina CLR:LCD
MOV P0, #00h ; mover el valor 00h al puerto 0
RET ;termina subrutina y regresa

ENABLE_INTS: ;subrutina ENABLE_INTS


SETB IT1 ;ponemos a 1 Bit de selección de interrupción por nivel o por
flanco descendente de /INT1(registro TCOM )
SETB EX1 ;ponemos a 1( EX1 = 1 habilita la interrupción en INT1.)(REGISTRO IE)

MOV TMOD,#01H ;movemos el valor 01h al regsitro


TMOD(configuración del timer)

SETB EA ;poner 1 logico EXTERNA ACCESS ENABLE ejecuta los programas que se
encuentran en la memoria interna (ROM)

; *************
CLEAR_ALL: ;Etiqueta CLEAR_ALL
MOV P1,#00H ;Movemos el valor 00h al puerto 1
(limpiamos todas las luces)
CLR ACC.0 ;Ponemos un 0 ala dirección del bit 0 del
acumulador
RET

; *************
MOV R1,#14H ;movemos el valor 14h al registro 1
ONESEC: ;subrutina ONESEC (tiempo)
SEC_LOOP: ;subrutina SEC_LOOP
MOV TH0,#00H ;mover el valor 00h al contador TH0
MOV TL0,#00H ;movemos el valor 00H AL contador TL0
CLR TF0 ;poner 0 a "Bit de rebasamiento del
Timer 0.. La CPU lo pone a 0 cuando
SETB TR0 ;poner 1 logico el Bit de marcha/paro del
Timer 1.
JNB TF0,$ ; si TF0 es 0 salta a $
CLR TR0 ;ponemos 0 a TR0

JNZ BTN_PRESSED ;Salta si el acomulador es distinto de 0,Salta


aBTN_PRESED

DJNZ R1,SEC_LOOP ;Decrementa R1 y salta si no es 0

BTN_PRESSED: ;subrutin BTN_PRESED


RET ;Termina la subrutina

HALT: JMP $ ; salta indirecto a $

END ; fin del programa

También podría gustarte