PIC 16F88 CONTADOR, DECONTADOR PULSADOR ENSAMBLADOR
En este primer apartado vamos a realizar un contador con un pic 16f88 mediante el cual
visualizamos en un display de 7 segmentos un numero de 0 a 9 o si pulsamos el botón un
decremento de 9 a 0.
la conexión de los pines del pic es la siguiente;
aquí dejo el código usado en ensamblador:
;Pedro Luis Martinez
; todos los derechos reservados
; *********************************************
LIST P=16F88
INCLUDE <[Link]>
__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF &
_LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
; _CP_OFF: Protección de código DESACTIVADO.
; _DEBUG_OFF: Debug en circuito DESACTIVADO.
; _WRT_PROTECT_OFF: Protección a escritura en memoria de programa DESACTIVADO.
; _CPD_OFF: Protección de código de datos DESACTIVADO.
; _LVP_OFF: Programación en baja tensión DESACTIVADO.
; _BODEN_OFF: Reset por Brown-out DESACTIVADO.
; _MCLRE_ON: Reset por pin externo ACTIVADO.
; _PWRTE_ON: Retraso al reset ACTIVADO.
; _WDT_OFF: Watchdog DESACTIVADO.
; _XT_OSC: Oscilador externo del tipo XT.
; _IESO_OFF: Modo de intercambio de externo a interno DESACTIVADO.
; _FCMEN_OFF: Monitor de CLK DESACTIVADO.
;********************************************************************************
******************
AUX EQU H'20'; VARIABLE PARA RETARDO 1 SEGUNDO
AUX2 EQU H'22'; VARIABLE PARA RETARDO 1 SEGUNDO
AUX3 EQU H'23'; VARIABLE PARA RETARDO 1 SEGUNDO
INDICE EQU H'21'
ORG 0
; CONFIGURACIÓN
BSF STATUS,5 ; CAMBIO AL BANCO 1
BCF STATUS,6
CLRF TRISB ; PUERTO B COMO SALIDAS
BSF TRISA,0 ; DEFINIR COMO ENTRADA
CLRF ANSEL
BCF STATUS,5 ; CAMBIO AL BANCO 0
; EJECUCIÓN
; *********************************************
MOVLW b'11111111'
MOVWF PORTB ; CON ESTE MODULO QUE QUE COMPROBAMOS ES
CALL DELAY1S ; COMPROBAR QUE EL DISPLAY FUNCIONA CORRECTAMENTE
CLRF INDICE
; *********************************************
; COMPROBAR BOTON
; *********************************************
BOTON ; SE COMPRUEBA SI EL PULSADOR PULSADO O NO
CALL TABLA ; ME DEVUELVE EL VALOR EN W
MOVWF PORTB
CALL DELAY1S
BTFSS PORTA,0
GOTO ASCENDENTE ; SI EL PULSADOR ESTA APAGADO INCREMENTA LA CUENTA
GOTO DESCENDENTE ; SI EL PULSADOR ESTA ENENCIDO DECREMENTA LA CUENTA
; *********************************************
; ALGORITMO
; *********************************************
ASCENDENTE
;------------------------------------------------
INCF INDICE,F ;BUCLE QUE INCREMENTA 1 A 1 LA POSICION DE LA TABLA
MOVLW D'10'
SUBWF INDICE,0
BTFSS STATUS,Z
GOTO BOTON
PONER0 CLRF INDICE
GOTO BOTON
;------------------------------------------------
DESCENDENTE
;------------------------------------------------
DECF INDICE,F ;BUCLE QUE DECREMENTA 1 A 1 LA POSICION DE LA TABLA
MOVLW D'255' ;255 - 1 = 0
SUBWF INDICE,0
BTFSS STATUS,Z
GOTO BOTON
PONER9 MOVLW 9 ;CUANDO HA LLEGADO A 0 LO QUE HACEMOS ES PONER 9
MOVWF INDICE ;LO GUARDAMOS EN INDICE Y EJECUTAMOS DE NUEVO
GOTO BOTON
;------------------------------------------------
; *********************************************
TABLA
; *********************************************
MOVF INDICE,W
ADDWF PCL,F
; .GFEDCBA
retlw b'00111111';Devolver 0 en display 7 seg
retlw b'00000110';Devolver 1 en display 7 seg
retlw b'01011011';Devolver 2 en display 7 seg
retlw b'01001111';Devolver 3 en display 7 seg
retlw b'01100110';Devolver 4 en display 7 seg
retlw b'01101101';Devolver 5 en display 7 seg
retlw b'01111100';Devolver 6 en display 7 seg
retlw b'00000111';Devolver 7 en display 7 seg
retlw b'01111111';Devolver 8 en display 7 seg
retlw b'01100111';Devolver 9 en display 7 seg
CLRF INDICE
GOTO TABLA
; *********************************************
; DELAY 1 SEGUNDO
; *********************************************
DELAY1S movlw d'11' ;4+ 300*Z
movwf AUX3
DELAY2 decfsz AUX3
goto DELAY100
INC2 movlw d'7' ; 3+3x
movwf AUX
decfsz AUX
goto $-1
return
DELAY100 movlw d'191' ;3XY + 6X +3 + 2
movwf AUX
DELAY1 movlw d'172' ;Y
movwf AUX2
decfsz AUX2
goto $-1
goto DEC
DEC decfsz AUX
goto DELAY1
goto INC
INC movlw d'95' ; 3+3x
movwf AUX2
decfsz AUX2
goto $-1
nop
goto DELAY2
; *********************************************
END