Está en la página 1de 1

C:\Users\kevin\Desktop\Digitales II\2\ESTE FUE.

asm

;==============================Este programa prende y apaga un LED================


LIST P=PIC16F84A ; PIC a usar
#INCLUDE <P16F84A.INC> ; Lista de etiquetas de Microchip
;----------------------------------------------------------------------------------
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;----------------------------------------------------------------------------------
STATUS EQU 03H ; Registro de estado
PORTA EQU 05H ; Registro de manejo del puerto A
PORTB EQU 06H ; Registro de manejo del puerto B
reg1 EQU 0CH ; Registro de propósito general 1
reg2 EQU 0DH ; Registro de propósito general 2
reg3 EQU 0EH ; Registro de propósito general 3
;----------------------------------------------------------------------------------
ORG 0 ; Punto de inicio del programa,
BSF STATUS,5 ; Nos dirigimos hacia el banco 1 de la memoria.
MOVLW 000H ; Cargo 5 dígitos binarios en cero,
MOVWF 05H ; los paso a TRISA para configurar PORTA como salida.
MOVLW 00H ; Cargo 8 dígitos binarios en cero.
MOVWF 06H ; los paso a TRISB para configurar PORTB como salida.
BCF STATUS,5 ; Regresamos al banco 0 de la memoria.
;----------------------------------------------------------------------------------
inicio MOVLW 0FFH
MOVWF PORTB ; los paso al puerto B para encender los LED's
CALL retardo ; Llama a un retardo de tiempo
MOVLW 000H
MOVWF PORTB ; los paso al puerto B para apagar los LED's
CALL retardo ; Llama a un retardo de tiempo
GOTO inicio ; Va a inicio para repetir la secuencia
;---------------------------------------------------------------------------------
retardo MOVLW 20H ; W se carga con el número 20 en hexadecimal (32 en decimal)
MOVWF reg3 ; para pasarlo a reg3
externo MOVLW 30H ; W se carga con el número 30 en hexadecimal (48 en decimal)
MOVWF reg2 ; para pasarlo a reg2
mitad MOVLW 50H ; W se carga con el número 50 en hexadecimal (80 en decimal)
MOVWF reg1 ; para pasarlo a reg1
interno DECFSZ reg1,1 ; Le resta una unidad a reg1
GOTO interno ; sigue decrementando hasta que reg1 llegue a 0
DECFSZ reg2,1 ; Le resta una unidad a reg2 cuando reg1 llegue a 0
GOTO mitad ; vuelve a cargar reg1 y se repite la rutina interna
DECFSZ reg3,1 ; Le resto una unidad a reg3 cuando reg2 llegue a 0
GOTO externo ; vuelve a cargar reg2 y reg1, se repite la rutina de la mitad
RETURN ; SE ACABÓ EL RETARDO

END

También podría gustarte