You are on page 1of 4

ENCENDIDO SECUENCIAL DE LEDs.

__CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF ; Configuración


para
el programador

LIST p=16F877A
INCLUDE <P16F877A.INC>

ORG 0x00 ; Inicio de programa

N EQU 0x00
cont1 EQU 0x20
cont2 EQU 0x21

BCF STATUS,RP0 ; Accede a banco 0


BCF STATUS,RP1
CLRF PORTB ; Limpia PORTB
BSF STATUS,RP0 ; Accede a banco 1
CLRF TRISB ; Configura todas las patitas de PORTB como salidas
BCF STATUS,RP0 ; Regresa a banco 0

BSF PORTB,0 ; La línea RA0 de PORTB toma el valor 1, se enciende el LED


Encledsec
CALL Retardo ; Llamada a la rutina de retardo
RLF PORTB,1 ; Recorre el bit de RB0 a RB7
GOTO Encledsec ; Va a la etiqueta Encledsec

Retardo ; Rutina de retardo


MOVLW N
MOVWF cont1
Rep1
MOVLW N
MOVWF cont2
Rep2
DECFSZ cont2,1
GOTO Rep2
DECFSZ cont1,1
GOTO Rep1
RETURN ; Retorno a la llamada de rutina de retardo.

END ; Fin de programa


Del 0 a 9

list p=16f877A

#include <p16f877A.inc>

cblock 0x20

counter

resta

endc

iniciar

clrf counter

movlw HIGH decoder

movwf PCLATH

movfw counter

call decoder

movwf PORTB

;call retardo

incf counter

movfw counter

movwf resta

movlw .10

subwf resta

btfss STATUS,Z

decoder addwf PCL,F

retlw b'1111110'

retlw b'0110000'

retlw b'1101101'

retlw b'1111001'

retlw b'0110011'

retlw b'1011011'

retlw b'1011111'

retlw b'1110000'

retlw b'1111111'
retlw b'1111011'

;retardo

END

Conteo display 7 segmentos


list p=16f877a ; list directive to define processor
#include <p16f877a.inc>; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &
_WRT_OFF & _LVP_OFF & _CPD_OFF
CUENTA EQU 20H ; registro donde contaremos
RETARDO EQU 21H ; registro para el retardo
#DEFINE BANCO0 BCF STATUS, 5
#DEFINE BANCO1 BSF STATUS, 5
ORG 00H
GOTO INICIO ; dejamos sitio a continuación
para escribir la tabla
TABLA MOVWF PCL ; cargamos el valor del
acumulador en el registro
; PCL. Cuando se ejecute esta instrucción el PIC
; saltará inmediatamente a la dirección de
; programa que le hayamos metido. En esta tabla
; almacenaremos los valores que hay que sacar por
; el puerto para que se muestren en el display los
; números del 0 al 9.
DISP RETLW 40H ; Para mostrar el 0
RETLW 79H ; Para mostrar el 1
RETLW 24H ; Para mostrar el 2
RETLW 30H ; Para mostrar el 3
RETLW 19H ; Para mostrar el 4
RETLW 12H ; Para mostrar el 5
RETLW 02H ; Para mostrar el 6
RETLW 78H ; Para mostrar el 7
RETLW 00H ; Para mostrar el 8
RETLW 10H ; Para mostrar el 9
INICIO BANCO0 ; pasamos al banco 0
BANCO1 ; pasamos al banco 1
MOVLW B’00000110′ ; configuramos las E/S digitales
MOVWF ADCON1
BSF TRISA, 0 ; configuramos RA0 como entrada
CLRF TRISB ; configuramos el PUERTOB como salidas
BANCO0 ; volvemos al banco 0
CLRF CUENTA ; pone a cero la cuenta
MUESTRA MOVLW DISP ; carga en el acumulador la dirección donde
; se encuentra el primer valor de la tabla
ADDWF CUENTA, 0 ; le suma el valor de la cuenta para obtener
;la dirección del valor que nos interesa
CALL TABLA ; llama a la subrutina TABLA que no
; devolverá el valor correspondiente de la
; tabla en el acumulador.
MOVWF PORTB ; saca dicho valor por el puerto B que hará
; que se muestre en el Display el número
; correspondiente
BTFSS PORTA, 0 ; si RA0 es 1 (si no se presiona el botón)
; salta a la siguiente instrucción.
CALL SUMA1 ; llama a la subrutina SUMA1 (si se ha
; presionado el pulsador, RA0 es 0)
GOTO MUESTRA
*********************************************************************
SUMA1: subrutina que suma 1 al registro CUENTA. Solo
cuenta pulsaciones entre 0 y 9 (dado que se
trata de un Display de 7 segmentos). Después
espera a que se suelte el pulsador conectado a RA0.
*********************************************************************
SUMA1 INCF CUENTA, 1 ; incrementa el registro CUENTA. A
; continuación se mira si el registro CUENTA
; ha llegado a 0AH, en tal caso, se pone a
; cero para comenzar de nuevo.
MOVLW 0AH ; Carga OAH en el acumulador
SUBWF CUENTA, 0 ; le resta CUENTA al acumulador
BTFSC STATUS, 2 ; mira si el resultado ha sido cero (de serlo,
; CUENTA sería igual a 0AH)
CLRF CUENTA ; si cuenta fue 0AH, la pone a cero.
; a continuación espera a que se suelte él
; pulsador (previene los rebotes).
CALL REBOTE ; llama a la subrutina que previene los
; rebotes
ESPERA BTFSS PORTA, 0
GOTO ESPERA ; espera a que se suelte el pulsador para
; regresar
CALL REBOTE ; llama a la subrutina rebote de nuevo
RETURN
*********************************************************************
REBOTE: subrutina que hace una pequeña temporización
para prevenir los rebotes.
*********************************************************************
REBOTE MOVLW 0FFH ; carga 0FFH en el acumulador
MOVWF RETARDO ; mueve el contenido del acumulador a
; RETARDO
REBO DECFSZ RETARDO, 1
GOTO REBO ; no retorna hasta que RETARDO llega a cero
RETURN
END

You might also like