;Multiplexado de 8 displays de 7 segmentos con 8 pines ; º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º ; º | | | | | | | | | | | | º ; º _|__|__|__|__|__|__|__|__|__|__|__|_ _\\|//_ Jose º ; º | | (| o-o |) Martinez º ; º | www.microcontroladorespic.com | \ (_) / Ortiz º ; º |) Control de | \_"_/ º ; º |8 display de 7 segmentos con 8 pines| __|U|__ º ; º | 16f628A | / \ º ; º |_ __ __ __ __ __ __ __ __ __ __ __ _| / /| |\ \ º ; º | | | | | | | | | | | | / / | | \ \ º ; º | | | | | | | | | | | | "" |___| "" º ; º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º º ;************************ BITS DE CONFIGURACION ************************* ;CP_OFF - Codigo de proteccion programa desactivado ;CPD_OFF - Codigo de proteccion eeprom desactivado ;WDT_OFF - Perro guardian desconectado ;BODEN_OFF - No actua el reset por bajada de tension ;PWRTE_OFF - Reset de inicio desconectado ;MCLRE_OFF - Reset externo desconectado, sino pierdo una entrada A5 ;XT_OSC - oscilador exterior ;INTOSC_OSC_NOCLKOUT - funcionamiento con reloj interno ;LVP_OFF - programacion de bajo voltage desconectado, ; para activar el pin 4 de RB __CONFIG _LVP_OFF & _MCLRE_OFF & _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_ON & _INTRC_OSC_NOCLKOUT LIST P=16F628A ;Procesador utilizado. INCLUDE ERRORLEVEL 0, -302 ;suppress bank selection messages ;****************************** ZONA DE DATOS **************************** #define Banco0 bcf STATUS,RP0 #define Banco1 bsf STATUS,RP0 #define Anodo1a PORTB,0 ;primer display #define Anodo1b PORTB,1 #define Anodo1c PORTB,2 #define Anodo1d PORTB,3 #define Anodo1e PORTB,4 #define Anodo1f PORTB,5 #define Anodo1g PORTB,6 #define Katodo1 PORTB,7 #define Anodo2a PORTB,0 ;segundo display #define Anodo2b PORTB,1 #define Anodo2c PORTB,2 #define Anodo2d PORTB,3 #define Anodo2e PORTB,4 #define Anodo2f PORTB,5 #define Anodo2g PORTB,7 #define Katodo2 PORTB,6 #define Anodo3a PORTB,0 ;tercero display #define Anodo3b PORTB,1 #define Anodo3c PORTB,2 #define Anodo3d PORTB,3 #define Anodo3e PORTB,4 #define Anodo3f PORTB,6 #define Anodo3g PORTB,7 #define Katodo3 PORTB,5 #define Anodo4a PORTB,0 ;cuarto display #define Anodo4b PORTB,1 #define Anodo4c PORTB,2 #define Anodo4d PORTB,3 #define Anodo4e PORTB,5 #define Anodo4f PORTB,6 #define Anodo4g PORTB,7 #define Katodo4 PORTB,4 #define Anodo5a PORTB,0 ;quinto display #define Anodo5b PORTB,1 #define Anodo5c PORTB,2 #define Anodo5d PORTB,4 #define Anodo5e PORTB,5 #define Anodo5f PORTB,6 #define Anodo5g PORTB,7 #define Katodo5 PORTB,3 #define Anodo6a PORTB,0 ;sexto display #define Anodo6b PORTB,1 #define Anodo6c PORTB,3 #define Anodo6d PORTB,4 #define Anodo6e PORTB,5 #define Anodo6f PORTB,6 #define Anodo6g PORTB,7 #define Katodo6 PORTB,2 #define Anodo7a PORTB,0 ;septimo display #define Anodo7b PORTB,2 #define Anodo7c PORTB,3 #define Anodo7d PORTB,4 #define Anodo7e PORTB,5 #define Anodo7f PORTB,6 #define Anodo7g PORTB,7 #define Katodo7 PORTB,1 #define Anodo8a PORTB,1 ;octavo display #define Anodo8b PORTB,2 #define Anodo8c PORTB,3 #define Anodo8d PORTB,4 #define Anodo8e PORTB,5 #define Anodo8f PORTB,6 #define Anodo8g PORTB,7 #define Katodo8 PORTB,0 ;****************************** MAPA DE MEMORIA **************************** CBLOCK 0x20 ;Inicio de 16f628 PDel0 ;para las demoras PDel1 PDel2 DIGITO ;almacena los datos de la tabla con los segmentos que encienden Display1 ;almacena el valor del primer digito Display2 Display3 Display4 Display5 Display6 Display7 Display8 ENDC ;****************************************************************************** ;************************* INICIO **************************** ;****************************************************************************** Inicio org 0 Banco1 ;Acceso al Banco 1. movlw 0xFF movf PORTB ;entradas Banco0 ;Acceso al Banco 0. movf PORTB ;todos a 1 cuando sean salidas movlw 0x07 ;desconecta los comparadores analogicos movwf CMCON Valores ;Asigno valores a los 8 displays movlw 0x01 movwf Display1 movlw 0x02 movwf Display2 movlw 0x03 movwf Display3 movlw 0x04 movwf Display4 movlw 0x05 movwf Display5 movlw 0x06 movwf Display6 movlw 0x07 movwf Display7 movlw 0x08 movwf Display8 call VISUALIZA goto Valores Binario_a_7Segmentos ; Tabla para display de 7 segmentos. addwf PCL,F ;'-gfedcba' segmentos retlw b'00111111' ; El código 7 segmentos para el "0". retlw b'00000110' ; El código 7 segmentos para el "1". retlw b'01011011' ; El código 7 segmentos para el "2". retlw b'01001111' ; El código 7 segmentos para el "3". retlw b'01100110' ; El código 7 segmentos para el "4". retlw b'01101101' ; El código 7 segmentos para el "5". retlw b'01111101' ; El código 7 segmentos para el "6". retlw b'00000111' ; El código 7 segmentos para el "7". retlw b'01111111' ; El código 7 segmentos para el "8". retlw b'01100111' ; El código 7 segmentos para el "9". retlw b'01110111' ; El código 7 segmentos para el "A". retlw b'01111100' ; El código 7 segmentos para el "B". retlw b'00111001' ; El código 7 segmentos para el "C". retlw b'01011110' ; El código 7 segmentos para el "D". retlw b'01111001' ; El código 7 segmentos para el "E". retlw b'01110001' ; El código 7 segmentos para el "F". ;****************************************************************************** ;************************* VISUALIZA **************************** ;****************************************************************************** VISUALIZA ;****************************** DISPLAY Nº1 ********************************* VisualizaDisplay1 movf Display1,W ; Lee la entrada andlw b'00001111' ; solo coge con el valor del nibble bajo call Binario_a_7Segmentos ; Convierte el código binario a 7 segmentos movwf DIGITO ; Aqui se guardan el valor de los displays bcf Katodo1 ;pone a masa el catodo bsf STATUS,RP0 ;banco 1 bcf Katodo1 ;lo configura como salida bcf STATUS,RP0 ;banco 0 Seg1a btfss DIGITO,0 ;mira si tiene que prender el segmento A goto FinSeg1a bsf Anodo1a ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo1a ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg1a call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo1a ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg1b btfss DIGITO,1 goto FinSeg1b bsf Anodo1b ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo1b ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg1b call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo1b ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg1c btfss DIGITO,2 goto FinSeg1c bsf Anodo1c ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo1c ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg1c call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo1c ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg1d btfss DIGITO,3 goto FinSeg1d bsf Anodo1d ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo1d ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg1d call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo1d ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg1e btfss DIGITO,4 goto FinSeg1e bsf Anodo1e ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo1e ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg1e call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo1e ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg1f btfss DIGITO,5 goto FinSeg1f bsf Anodo1f ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo1f ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg1f call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo1f ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg1g btfss DIGITO,6 goto FinSeg1g bsf Anodo1g ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo1g ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg1g call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo1g ;lo configura como entrada bcf STATUS,RP0 ;banco 0 bsf STATUS,RP0 ;banco 1 bsf Katodo1 ;lo configura como entrada bcf STATUS,RP0 ;banco 0 ;****************************** DISPLAY Nº2 ********************************* VisualizaDisplay2 movf Display2,W ; Lee la entrada andlw b'00001111' ; solo coge con el valor del nibble bajo call Binario_a_7Segmentos ; Convierte el código binario a 7 segmentos movwf DIGITO ; Aqui se guardan el valor de los displays bcf Katodo2 ;pone a masa el catodo bsf STATUS,RP0 ;banco 1 bcf Katodo2 ;lo configura como salida bcf STATUS,RP0 ;banco 0 Seg2a btfss DIGITO,0 ;mira si tiene que prender el segmento A goto FinSeg2a bsf Anodo1a ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo2a ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg2a call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo2a ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg2b btfss DIGITO,1 goto FinSeg2b bsf Anodo2b ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo2b ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg2b call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo2b ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg2c btfss DIGITO,2 goto FinSeg2c bsf Anodo2c ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo2c ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg2c call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo2c ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg2d btfss DIGITO,3 goto FinSeg2d bsf Anodo2d ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo2d ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg2d call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo2d ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg2e btfss DIGITO,4 goto FinSeg2e bsf Anodo2e ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo2e ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg2e call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo2e ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg2f btfss DIGITO,5 goto FinSeg2f bsf Anodo2f ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo2f ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg2f call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo2f ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg2g btfss DIGITO,6 goto FinSeg2g bsf Anodo2g ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo2g ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg2g call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo2g ;lo configura como entrada bcf STATUS,RP0 ;banco 0 bsf STATUS,RP0 ;banco 1 bsf Katodo2 ;lo configura como entrada bcf STATUS,RP0 ;banco 0 ;****************************** DISPLAY Nº3 ********************************* VisualizaDisplay3 movf Display3,W ; Lee la entrada andlw b'00001111' ; solo coge con el valor del nibble bajo call Binario_a_7Segmentos ; Convierte el código binario a 7 segmentos movwf DIGITO ; Aqui se guardan el valor de los displays bcf Katodo3 ;pone a masa el catodo bsf STATUS,RP0 ;banco 1 bcf Katodo3 ;lo configura como salida bcf STATUS,RP0 ;banco 0 Seg3a btfss DIGITO,0 ;mira si tiene que prender el segmento A goto FinSeg3a bsf Anodo3a ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo3a ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg3a call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo3a ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg3b btfss DIGITO,1 goto FinSeg3b bsf Anodo3b ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo3b ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg3b call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo3b ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg3c btfss DIGITO,2 goto FinSeg3c bsf Anodo3c ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo3c ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg3c call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo3c ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg3d btfss DIGITO,3 goto FinSeg3d bsf Anodo3d ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo3d ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg3d call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo3d ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg3e btfss DIGITO,4 goto FinSeg3e bsf Anodo3e ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo3e ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg3e call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo3e ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg3f btfss DIGITO,5 goto FinSeg3f bsf Anodo3f ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo3f ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg3f call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo3f ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg3g btfss DIGITO,6 goto FinSeg3g bsf Anodo3g ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo3g ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg3g call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo3g ;lo configura como entrada bcf STATUS,RP0 ;banco 0 bsf STATUS,RP0 ;banco 1 bsf Katodo3 ;lo configura como entrada bcf STATUS,RP0 ;banco 0 ;****************************** DISPLAY Nº4 ********************************* VisualizaDisplay4 movf Display4,W ; Lee la entrada andlw b'00001111' ; solo coge con el valor del nibble bajo call Binario_a_7Segmentos ; Convierte el código binario a 7 segmentos movwf DIGITO ; Aqui se guardan el valor de los displays bcf Katodo4 ;pone a masa el catodo bsf STATUS,RP0 ;banco 1 bcf Katodo4 ;lo configura como salida bcf STATUS,RP0 ;banco 0 Seg4a btfss DIGITO,0 ;mira si tiene que prender el segmento A goto FinSeg4a bsf Anodo4a ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo4a ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg4a call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo4a ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg4b btfss DIGITO,1 goto FinSeg4b bsf Anodo4b ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo4b ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg4b call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo4b ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg4c btfss DIGITO,2 goto FinSeg4c bsf Anodo4c ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo4c ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg4c call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo4c ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg4d btfss DIGITO,3 goto FinSeg4d bsf Anodo4d ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo4d ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg4d call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo4d ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg4e btfss DIGITO,4 goto FinSeg4e bsf Anodo4e ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo4e ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg4e call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo4e ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg4f btfss DIGITO,5 goto FinSeg4f bsf Anodo4f ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo4f ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg4f call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo4f ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg4g btfss DIGITO,6 goto FinSeg4g bsf Anodo4g ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo4g ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg4g call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo4g ;lo configura como entrada bcf STATUS,RP0 ;banco 0 bsf STATUS,RP0 ;banco 1 bsf Katodo4 ;lo configura como entrada bcf STATUS,RP0 ;banco 0 ;****************************** DISPLAY Nº5 ********************************* VisualizaDisplay5 movf Display5,W ; Lee la entrada andlw b'00001111' ; solo coge con el valor del nibble bajo call Binario_a_7Segmentos ; Convierte el código binario a 7 segmentos movwf DIGITO ; Aqui se guardan el valor de los displays bcf Katodo5 ;pone a masa el catodo bsf STATUS,RP0 ;banco 1 bcf Katodo5 ;lo configura como salida bcf STATUS,RP0 ;banco 0 Seg5a btfss DIGITO,0 ;mira si tiene que prender el segmento A goto FinSeg5a bsf Anodo5a ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo5a ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg5a call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo5a ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg5b btfss DIGITO,1 goto FinSeg5b bsf Anodo5b ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo5b ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg5b call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo5b ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg5c btfss DIGITO,2 goto FinSeg5c bsf Anodo5c ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo5c ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg5c call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo5c ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg5d btfss DIGITO,3 goto FinSeg5d bsf Anodo5d ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo5d ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg5d call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo5d ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg5e btfss DIGITO,4 goto FinSeg5e bsf Anodo5e ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo5e ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg5e call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo5e ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg5f btfss DIGITO,5 goto FinSeg5f bsf Anodo5f ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo5f ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg5f call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo5f ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg5g btfss DIGITO,6 goto FinSeg5g bsf Anodo5g ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo5g ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg5g call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo5g ;lo configura como entrada bcf STATUS,RP0 ;banco 0 bsf STATUS,RP0 ;banco 1 bsf Katodo5 ;lo configura como entrada bcf STATUS,RP0 ;banco 0 ;****************************** DISPLAY Nº6 ********************************* VisualizaDisplay6 movf Display6,W ; Lee la entrada andlw b'00001111' ; solo coge con el valor del nibble bajo call Binario_a_7Segmentos ; Convierte el código binario a 7 segmentos movwf DIGITO ; Aqui se guardan el valor de los displays bcf Katodo6 ;pone a masa el catodo bsf STATUS,RP0 ;banco 1 bcf Katodo6 ;lo configura como salida bcf STATUS,RP0 ;banco 0 Seg6a btfss DIGITO,0 ;mira si tiene que prender el segmento A goto FinSeg6a bsf Anodo6a ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo6a ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg6a call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo6a ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg6b btfss DIGITO,1 goto FinSeg6b bsf Anodo6b ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo6b ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg6b call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo6b ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg6c btfss DIGITO,2 goto FinSeg6c bsf Anodo6c ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo6c ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg6c call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo6c ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg6d btfss DIGITO,3 goto FinSeg6d bsf Anodo6d ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo6d ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg6d call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo6d ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg6e btfss DIGITO,4 goto FinSeg6e bsf Anodo6e ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo6e ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg6e call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo6e ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg6f btfss DIGITO,5 goto FinSeg6f bsf Anodo6f ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo6f ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg6f call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo6f ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg6g btfss DIGITO,6 goto FinSeg6g bsf Anodo6g ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo6g ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg6g call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo6g ;lo configura como entrada bcf STATUS,RP0 ;banco 0 bsf STATUS,RP0 ;banco 1 bsf Katodo6 ;lo configura como entrada bcf STATUS,RP0 ;banco 0 ;****************************** DISPLAY Nº7 ********************************* VisualizaDisplay7 movf Display7,W ; Lee la entrada andlw b'00001111' ; solo coge con el valor del nibble bajo call Binario_a_7Segmentos ; Convierte el código binario a 7 segmentos movwf DIGITO ; Aqui se guardan el valor de los displays bcf Katodo7 ;pone a masa el catodo bsf STATUS,RP0 ;banco 1 bcf Katodo7 ;lo configura como salida bcf STATUS,RP0 ;banco 0 Seg7a btfss DIGITO,0 ;mira si tiene que prender el segmento A goto FinSeg7a bsf Anodo7a ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo7a ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg7a call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo7a ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg7b btfss DIGITO,1 goto FinSeg7b bsf Anodo7b ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo7b ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg7b call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo7b ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg7c btfss DIGITO,2 goto FinSeg7c bsf Anodo7c ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo7c ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg7c call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo7c ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg7d btfss DIGITO,3 goto FinSeg7d bsf Anodo7d ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo7d ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg7d call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo7d ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg7e btfss DIGITO,4 goto FinSeg7e bsf Anodo7e ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo7e ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg7e call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo7e ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg7f btfss DIGITO,5 goto FinSeg7f bsf Anodo7f ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo7f ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg7f call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo7f ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg7g btfss DIGITO,6 goto FinSeg7g bsf Anodo7g ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo7g ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg7g call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo7g ;lo configura como entrada bcf STATUS,RP0 ;banco 0 bsf STATUS,RP0 ;banco 1 bsf Katodo7 ;lo configura como entrada bcf STATUS,RP0 ;banco 0 ;****************************** DISPLAY Nº8 ********************************* VisualizaDisplay8 movf Display8,W ; Lee la entrada andlw b'00001111' ; solo coge con el valor del nibble bajo call Binario_a_7Segmentos ; Convierte el código binario a 7 segmentos movwf DIGITO ; Aqui se guardan el valor de los displays bcf Katodo8 ;pone a masa el catodo bsf STATUS,RP0 ;banco 1 bcf Katodo8 ;lo configura como salida bcf STATUS,RP0 ;banco 0 Seg8a btfss DIGITO,0 ;mira si tiene que prender el segmento A goto FinSeg8a bsf Anodo8a ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo8a ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg8a call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo8a ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg8b btfss DIGITO,1 goto FinSeg8b bsf Anodo8b ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo8b ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg8b call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo8b ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg8c btfss DIGITO,2 goto FinSeg8c bsf Anodo8c ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo8c ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg8c call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo8c ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg8d btfss DIGITO,3 goto FinSeg8d bsf Anodo8d ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo8d ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg8d call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo8d ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg8e btfss DIGITO,4 goto FinSeg8e bsf Anodo8e ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo8e ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg8e call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo8e ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg8f btfss DIGITO,5 goto FinSeg8f bsf Anodo8f ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo8f ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg8f call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo8f ;lo configura como entrada bcf STATUS,RP0 ;banco 0 Seg8g btfss DIGITO,6 goto FinSeg8g bsf Anodo8g ;pone a positivo el anodo bsf STATUS,RP0 ;banco 1 bcf Anodo8g ;lo configura como salida bcf STATUS,RP0 ;banco 0 FinSeg8g call DEMORA bsf STATUS,RP0 ;banco 1 bsf Anodo8g ;lo configura como entrada bcf STATUS,RP0 ;banco 0 bsf STATUS,RP0 ;banco 1 bsf Katodo8 ;lo configura como entrada bcf STATUS,RP0 ;banco 0 RETURN ;vuelve a coger otros valores para los 8 displays ;****************************************************************************** ;************************* RETARDOS **************************** ;****************************************************************************** ;son 56 segmentos los que hay que iluminar ;con 1ms se ven los 8 displays parpadeando ;con 500us se ven con leve parpadeo ;400us No se ve ningun parpadeo; cada 23ms refresca cada segmento .IDEAL ;cada segmento esta 400us en ON y 23ms en OFF DEMORA movlw .98 ; Proporciona 400us de retardo movwf PDel0 PLoop0 clrwdt decfsz PDel0, 1 goto PLoop0 PDelL1 goto PDelL2 PDelL2 clrwdt return END