Está en la página 1de 3

;************************************ ;* http://www.electron.es.

vg *

;************************************ ;* EJEMPLO 6: TABLAS *

;************************************ ;* El siguiente programa cuenta las * ;* veces que se acciona un pulsador * ;* conectado a RA0 y muestra el ;* resultado de la cuenta en un ;* display de 7 segmentos de nodo ;* comn conectado en el puerto B * * * *

;************************************

PCL

EQU

02H EQU 05H 05H 06H 06H 03H

STATUS TRISA EQU PORTA EQU TRISB EQU PORTB EQU

CUENTA RETARDO

EQU EQU

0CH 0DH

;Registro donde contaremos ;Registro para el retardo

F w

EQU EQU

1 0

#DEFINE #DEFINE

BANCO0 BANCO1

BCF BSF

STATUS,5 STATUS,5

ORG GOTO

00H INICIO ;Dejamos sitio a continuacin para escribir

;nuestra tabla

TABLA MOVWF PCL

;cargamos el valor del acumulador en el registro ;PCL. Cuando se ejecute esta instruccin el pic ;saltar inmediatamente a la direccin 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 nmeros del 0 al 9:

DISP

RETLW 40H RETLW 79H RETLW 24H RETLW 30H RETLW 19H RETLW 12H RETLW 02H RETLW 78H RETLW 00H RETLW 10H

;Para mostrar el 0 ;Para mostrar el 1 ;Para mostrar el 2 ;Para mostrar el 3 ;Para mostrar el 4 ;Para mostrar el 5 ;Para mostrar el 6 ;Para mostrar el 7 ;Para mostrar el 8 ;Para mostrar el 9

INICIO BSF CLRF

BANCO1 TRISA,0

;Pasamos al banco 1 ;Configuramos RA0 como Entrada

TRISB ;Configuramos el puerto B como salidas ;Volvemos al banco 0 ;Pone a cero la cuenta

BANCO0 CLRF CUENTA

MUESTRA

MOVLW DISP

;Carga en el acumulador la direccin donde

;se encuentra el primer valor de la tabla ADDLW CUENTA ;Le suma el valor de la cuenta para obtener

;la direccin del valor que nos interesa CALL TABLA ;Llama a la subrutina TABLA que nos 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 nmero correspondiente BTFSS PORTA,0 ;si RA0 es "1" salta la siguiente

;instruccin (si no se acciona el pulsador) CALL SUMA1 ;Llama a la subrutina SUMA1 (porque RB0 es "0" y, ;por lo tanto, se ha accionado el pulsador) GOTO MUESTRA

;================================================ ; ; ; ; SUMA1: Subrutina que suma uno al registro

CUENTA. Solo cuenta pulsaciones entre 0 y 9 (ya que no se pueden mostrar mas nmeros en un display de 7 segmentos).

; ;

Despus espera a que se suelte el pulsador conectado a RA0

SUMA1 INCF

CUENTA,F

;Incrementa el registro CUENTA

;a continuacin se mira si el registro ;CUENTA ha llegado a 0AH, en tal caso se ;pone a cero para comenzar de nuevo. MOVLW 0AH ;Carga 0AH en el acumulador ;Le resta CUENTA al acumulador ;mira si el resultado ha sido

SUBWF CUENTA,W BTFSC STATUS,2

;cero (de serlo CUENTA sera igual a 0AH) CLRF CUENTA ;si CUENTA es 0AH la pone a cero ;A continuacin espera a que se suelte el pulsador ;(previene los rebotes) CALL ESPERA GOTO retornar RETURN ;/ REBOTE ;Llama a la subrutina que previene los rebotes ;\

BTFSS PORTA,0 ESPERA

; }Espera a que se suelte el pulsador para

Fin de SUMA1

;================================================

;================================================ ; ; ; REBOTE: Subrutina que hace una pequea

temporizacin para prevenir los rebotes

REBOTE

MOVLW 0FFH

;Carga el acumulador con 0FFh ;Mueve el contenido del acumulador a RETARDO ;\

MOVWF RETARDO REBO DECFSZ GOTO REBO

RETARDO,F

; }No retorna hasta que RETARDO llega a cero ;/

RETURN

Fin de REBOTE

;=================================================

END

;Indica final del programa

También podría gustarte