Parpadeo de un LED con PIC16F84

Éste programa y hasta que aprenda a programar micros en C, lo haré en lenguaje ASM, más cargante, más pesado, pero... Lo he escrito en MPLab, es una buenísima herramienta para escribir en cualquier lenguaje de programación para microcontroladores e incluye las librerías necesarias para la compilación. Si no tienes un programa que sirva para ésto, puedes escribirlo directamente en un editor de texto si luego te acuerdas de guardarlo como .ASM

La simulación se hace con ISIS, la herramienta de simulación de Proteus. Éste compila el archivo .ASM a HEX para que funcione la simulación.

El código es:

;---------------Encabezado-------------

LIST p=16f84   ;Indica el micro que vas a usar
radix hex

;------------mapa de memoria---------

estado equ 0x03 ; Haciendo asignaciones
TRISB equ 0x06
ptob equ 0x06

reg1 equ 0x0C ; Estos 3 registros los utilizaré
reg2 equ 0x0D ; para hacer el retardo
reg3 equ 0x0E

;-------Configuración de puertos-------

reset org 0x00    ; origen del programa, aquí comenzará
; siempre que ocurra un reset
goto inicio             ; salta a "inicio"
inicio bsf estado,5           ; pone rp0 a 1 y pasa al banco1
movlw b'00000000'      ; carga W con 00000000
movwf TRISB                     ; y pasa el valor a trisb
bcf estado,5                        ; pone rp0 a 0 y regresa al banco0

clrf ptob                               ; limpia el puerto b para que esté todo apagado

;----Aquí enciende y apaga el LED-----

ahora bsf ptob,0                ; pone un 1 en RB0 (enciende el LED)
call retardo                          ; llama al retardo

bcf ptob,0                             ; pone a 0 RB0 (apaga el LED)
call retardo                          ; llama al retardo
goto ahora                            ; repite todo de nuevo

;-----------Rutina de Retardo-----------

retardo movlw 10          ; Aquí se cargan los registros
movwf reg1                        ; reg1, reg2 y reg3
; con los valores 10, 20 y 30
tres movlw 20                 ; respectivamente
movwf reg2

dos movlw 30
movwf reg3

uno decfsz reg3,1            ; Aquí se comienza a decrementar
goto uno                             ; Cuando reg3 llegue a 0
decfsz reg2,1                     ; le quitare 1 a reg2
goto dos                              ; cuando reg2 llegue a 0
decfsz reg1,1                     ; le quitare 1 a reg1
goto tres                             ; cuando reg1 llegue a 0
retlw 00                              ; regresare al lugar
; de donde se hizo la llamada

;------------------------------------------
end ; se acabó
;------------------------------------------

 

Creo que está suficientemente explicado si te leíste el apartado de información básica sobre el PIC16F84. El circuito que utilicé es éste:

encender LEDTendrás que tener en cuenta, al asignar el valor de la frecuencia del oscilador, que cuanto más rápido vaya éste, más rápido leerá el micro las instrucciones y por lo tanto más rápido parpadeará el LED. Unos 4 kHz están bien. Puedes modificar los valores de los registros en la función retardo para que tarde más o menos.

Para ésta ocasión sólo se necesita el LED y la resistencia en el pin RB0, el resto y los botones los tenía preparados para otros proyectos.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *