;==============================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