;=============================================================================================================================================== ; CODIGO FUENTE PARA LA TARJETA EVOLUPIC 16F88 USANDO EL MÓDULO DE EXPANSIÓN MATRIZ DE LEDS ; AUTOR: MOISES RAFAEL GUTIERREZ DAMIAN DESARROLLADO PARA PUNTO FLOTANTE, S.A. ;=============================================================================================================================================== ; EL PROGRAMA REALIZA UN CICLO REPETITIVO MOSTRANDO LOS NÚMEROS DEL 0 AL 9 Y LAS LETRAS DE LA A A LA Z DETERMINANDO EL PERIODO ; DE LA CUENTA MEDIANTE LA INTERRUPCIÓN DE DESBORDAMIENTO DEL TIMER 0 ;=============================================================================================================================================== ; NOTAS SOBRE EL CÓDIGO FUENTE: *************************************************************************************************************** ; RA1 SE USA PARA DAR RESET AL CONTADOR DE COLUMNAS ; RA2 SE USA PARA INCREMENTAR EL CONTADOR DE COLUMNAS ; EL PUERTO B ES USADO PARA ENCENDER LAS LINEAS DE LA MATRIZ DE 7 X 5 ; CONFIGURACION: ******************************************************************************************************************************* processor 16f88 include #DEFINE BANCO0 BCF STATUS,RP0 #DEFINE BANCO1 BSF STATUS,RP0 CBLOCK 0x22 ; LAS VARIABLES SE GUARDAN A PARTIR DE ESTA DIRECCIÓN L ; USADO EN EL BARRIDO DE COLUMNAS REG50mS ; VARIABLE USADA COMO REGISTRO AUXILIAR PARA TRABAJAR EL TMR0 SALVA_W ; UTILIZADAS DURANTE LA INTERRUPCIÓN PARA EVITAR SALTOS INDETERMINADOS SALVA_STATUS ; CUENTA ; VARIABLE PARA CAMBIO DE CARACTER COL1 ; COLUMNAS COL2 COL3 COL4 COL5 ENDC J EQU H'20' K EQU H'21' ;************************************************************************** ; * CARGA EQU D'20' ; CARGA X 50 mS = PERIODO DE CUENTA DESEADO * ; * ;************************************************************************** TMR0_50mS EQU D'61' ; INICIALIZACIÓN CALCULADA PARA DAR UN CICLO DE 50 mS (NO DEBE MOVERSE) ; CODIGOS: *********************************************************************************************************************************** ORG 0 CLRF PCLATH GOTO INICIO ORG 4 GOTO INTERRUP ; VECTOR DE INTERRUPCION INICIO MOVLW H'07' BANCO0 bcf RCSTA,SPEN ;DESHABILITA UART BANCO1 movlw 7 movwf CMCON clrf CVRCON clrf ANSEL CLRF TRISA ; PUERTO A SALIDAS CLRF TRISB ; PUERTO B SALIDAS MOVLW B'00000111' ; PRESCALER RATE SELECT BITS CONFIGURADOS PARA UN DIVISOR DE FREC 1:256 Y DESBORDAMIENTO POR RELOJ INTERNO MOVWF OPTION_REG ; EN EL REGISTRO OPTION. BANCO0 CLRF PORTA CLRF PORTB MOVLW TMR0_50mS ; CARGA INICIAL DEL TIMER0 MOVWF TMR0 ; MOVLW CARGA ; CARGA DE LA VARIABLE REGISTRO MOVWF REG50mS ; BSF INTCON,GIE ; HABILITAMOS LAS INTERRUPCIONES BSF INTCON,TMR0IE ; HABILITAMOS LA INTERRUPCIÓN POR DESBORDAMIENTO DEL TMR0 ;******************************************************************************** ;* LAS DOS LINEAS ANTERIORES PUEDEN SER SUSTUIDAS POR LAS SIGUIENTES LINEAS: * ;* * ;* MOVLW B'10100000' * ;* MOVWF INTCON * ;******************************************************************************** REINICIO CLRF CUENTA CLRF COL1 CLRF COL2 CLRF COL3 CLRF COL4 CLRF COL5 BUCLE2 CLRF L CALL MR ; RA1 MANDA PULSO DE MASTER RESET AL CONTADOR MOVF CUENTA,W CALL CARACTER BUCLE1 MOVFW L CALL TABLA MOVWF PORTB CALL CP0 ; RA2 MANDA PULSO PARA INCREMENTAR CONTADOR CALL retro CALL retro CALL retro CALL retro INCF L,F MOVFW L SUBLW 5 BTFSS STATUS,Z GOTO BUCLE1 GOTO BUCLE2 TABLA ADDWF PCL ; SALTO INDEXADO GOTO LEE_COL1 GOTO LEE_COL2 GOTO LEE_COL3 GOTO LEE_COL4 GOTO LEE_COL5 CARACTER ADDWF PCL GOTO CERO GOTO UNO GOTO DOS GOTO TRES GOTO CUATRO GOTO CINCO GOTO SEIS GOTO SIETE GOTO OCHO GOTO NUEVE GOTO A GOTO BE GOTO CE GOTO DEE GOTO E GOTO EFE GOTO GE GOTO H GOTO I GOTO JOTA GOTO KA GOTO ELE GOTO EME GOTO ENE GOTO EÑE GOTO O GOTO PE GOTO Q GOTO ERRE GOTO ESE GOTO TE GOTO U GOTO UVE GOTO DOBLEW GOTO EQUIS GOTO IGRIEGA GOTO ZETA GOTO REINICIO LEE_COL1 MOVF COL1,W RETURN LEE_COL2 MOVF COL2,W RETURN LEE_COL3 MOVF COL3,W RETURN LEE_COL4 MOVF COL4,W RETURN LEE_COL5 MOVF COL5,W RETURN CERO ; 0 MOVLW B'01111100' MOVWF COL1 MOVLW B'10000010' MOVWF COL2 MOVLW B'10000010' MOVWF COL3 MOVLW B'10000010' MOVWF COL4 MOVLW B'01111100' MOVWF COL5 RETURN UNO ; 1 MOVLW B'00000000' MOVWF COL1 MOVLW B'10000100' MOVWF COL2 MOVLW B'11111110' MOVWF COL3 MOVLW B'10000000' MOVWF COL4 MOVLW B'00000000' MOVWF COL5 RETURN DOS ; 2 MOVLW B'10000100' MOVWF COL1 MOVLW B'11000010' MOVWF COL2 MOVLW B'10100010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'10001100' MOVWF COL5 RETURN TRES ; 3 MOVLW B'01000100' MOVWF COL1 MOVLW B'10000010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'01101100' MOVWF COL5 RETURN CUATRO ; 4 MOVLW B'00010000' MOVWF COL1 MOVLW B'00011000' MOVWF COL2 MOVLW B'00010100' MOVWF COL3 MOVLW B'11111110' MOVWF COL4 MOVLW B'00010000' MOVWF COL5 RETURN CINCO ; 5 MOVLW B'01011110' MOVWF COL1 MOVLW B'10010010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'01100010' MOVWF COL5 RETURN SEIS ; 6 MOVLW B'01111100' MOVWF COL1 MOVLW B'10010010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'01100100' MOVWF COL5 RETURN SIETE ; 7 MOVLW B'10000010' MOVWF COL1 MOVLW B'01000010' MOVWF COL2 MOVLW B'00100010' MOVWF COL3 MOVLW B'00010010' MOVWF COL4 MOVLW B'00001110' MOVWF COL5 RETURN OCHO ; 8 MOVLW B'01101100' MOVWF COL1 MOVLW B'10010010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'01101100' MOVWF COL5 RETURN NUEVE ; 9 MOVLW B'01001100' MOVWF COL1 MOVLW B'10010010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'01111100' MOVWF COL5 RETURN A ; A MOVLW B'11111100' MOVWF COL1 MOVLW B'00010010' MOVWF COL2 MOVLW B'00010010' MOVWF COL3 MOVLW B'00010010' MOVWF COL4 MOVLW B'11111100' MOVWF COL5 RETURN BE ; B MOVLW B'11111110' MOVWF COL1 MOVLW B'10010010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'01101100' MOVWF COL5 RETURN CE ; C MOVLW B'01111100' MOVWF COL1 MOVLW B'10000010' MOVWF COL2 MOVLW B'10000010' MOVWF COL3 MOVLW B'10000010' MOVWF COL4 MOVLW B'01000100' MOVWF COL5 RETURN DEE ; D MOVLW B'11111110' MOVWF COL1 MOVLW B'10000010' MOVWF COL2 MOVLW B'10000010' MOVWF COL3 MOVLW B'10000010' MOVWF COL4 MOVLW B'01111100' MOVWF COL5 RETURN E ; E MOVLW B'11111110' MOVWF COL1 MOVLW B'10010010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'10000010' MOVWF COL5 RETURN EFE ; F MOVLW B'11111110' MOVWF COL1 MOVLW B'00010010' MOVWF COL2 MOVLW B'00010010' MOVWF COL3 MOVLW B'00010010' MOVWF COL4 MOVLW B'00000010' MOVWF COL5 RETURN GE ; G MOVLW B'01111100' MOVWF COL1 MOVLW B'10010010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'01110100' MOVWF COL5 RETURN H ; H MOVLW B'11111110' MOVWF COL1 MOVLW B'00010000' MOVWF COL2 MOVLW B'00010000' MOVWF COL3 MOVLW B'00010000' MOVWF COL4 MOVLW B'11111110' MOVWF COL5 RETURN I ; I MOVLW B'00000000' MOVWF COL1 MOVLW B'10000010' MOVWF COL2 MOVLW B'11111110' MOVWF COL3 MOVLW B'10000010' MOVWF COL4 MOVLW B'00000000' MOVWF COL5 RETURN JOTA ; J MOVLW B'01110000' MOVWF COL1 MOVLW B'10000000' MOVWF COL2 MOVLW B'10000000' MOVWF COL3 MOVLW B'10000000' MOVWF COL4 MOVLW B'01111110' MOVWF COL5 RETURN KA ; K MOVLW B'11111110' MOVWF COL1 MOVLW B'00010000' MOVWF COL2 MOVLW B'00101000' MOVWF COL3 MOVLW B'01000100' MOVWF COL4 MOVLW B'10000010' MOVWF COL5 RETURN ELE ; L MOVLW B'11111110' MOVWF COL1 MOVLW B'10000000' MOVWF COL2 MOVLW B'10000000' MOVWF COL3 MOVLW B'10000000' MOVWF COL4 MOVLW B'10000000' MOVWF COL5 RETURN EME ; M MOVLW B'11111110' MOVWF COL1 MOVLW B'00000100' MOVWF COL2 MOVLW B'00011000' MOVWF COL3 MOVLW B'00000100' MOVWF COL4 MOVLW B'11111110' MOVWF COL5 RETURN ENE ; N MOVLW B'11111110' MOVWF COL1 MOVLW B'00001000' MOVWF COL2 MOVLW B'00010000' MOVWF COL3 MOVLW B'00100000' MOVWF COL4 MOVLW B'11111110' MOVWF COL5 RETURN EÑE ; Ñ MOVLW B'11111010' MOVWF COL1 MOVLW B'00010010' MOVWF COL2 MOVLW B'00100010' MOVWF COL3 MOVLW B'01000010' MOVWF COL4 MOVLW B'11111010' MOVWF COL5 RETURN O ; O MOVLW B'01111100' MOVWF COL1 MOVLW B'10000010' MOVWF COL2 MOVLW B'10000010' MOVWF COL3 MOVLW B'10000010' MOVWF COL4 MOVLW B'01111100' MOVWF COL5 RETURN PE ; P MOVLW B'11111110' MOVWF COL1 MOVLW B'00010010' MOVWF COL2 MOVLW B'00010010' MOVWF COL3 MOVLW B'00010010' MOVWF COL4 MOVLW B'00001100' MOVWF COL5 RETURN Q ; Q MOVLW B'01111100' MOVWF COL1 MOVLW B'10000010' MOVWF COL2 MOVLW B'10100010' MOVWF COL3 MOVLW B'01000010' MOVWF COL4 MOVLW B'10111100' MOVWF COL5 RETURN ERRE ; R MOVLW B'11111110' MOVWF COL1 MOVLW B'00010010' MOVWF COL2 MOVLW B'00110010' MOVWF COL3 MOVLW B'01010010' MOVWF COL4 MOVLW B'10001100' MOVWF COL5 RETURN ESE ; S MOVLW B'01001100' MOVWF COL1 MOVLW B'10010010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10010010' MOVWF COL4 MOVLW B'01100100' MOVWF COL5 RETURN TE ; T MOVLW B'00000010' MOVWF COL1 MOVLW B'00000010' MOVWF COL2 MOVLW B'11111110' MOVWF COL3 MOVLW B'00000010' MOVWF COL4 MOVLW B'00000010' MOVWF COL5 RETURN U ; U MOVLW B'01111110' MOVWF COL1 MOVLW B'10000000' MOVWF COL2 MOVLW B'10000000' MOVWF COL3 MOVLW B'10000000' MOVWF COL4 MOVLW B'01111110' MOVWF COL5 RETURN UVE ; V MOVLW B'00111110' MOVWF COL1 MOVLW B'01000000' MOVWF COL2 MOVLW B'10000000' MOVWF COL3 MOVLW B'01000000' MOVWF COL4 MOVLW B'00111111' MOVWF COL5 RETURN DOBLEW ; W MOVLW B'11111110' MOVWF COL1 MOVLW B'01000000' MOVWF COL2 MOVLW B'00110000' MOVWF COL3 MOVLW B'01000000' MOVWF COL4 MOVLW B'11111110' MOVWF COL5 RETURN EQUIS ; X MOVLW B'11000110' MOVWF COL1 MOVLW B'00101000' MOVWF COL2 MOVLW B'00010000' MOVWF COL3 MOVLW B'00101000' MOVWF COL4 MOVLW B'11000110' MOVWF COL5 RETURN IGRIEGA ; Y MOVLW B'00000110' MOVWF COL1 MOVLW B'00001000' MOVWF COL2 MOVLW B'11110000' MOVWF COL3 MOVLW B'00001000' MOVWF COL4 MOVLW B'00000110' MOVWF COL5 RETURN ZETA ; Z MOVLW B'11000010' MOVWF COL1 MOVLW B'10100010' MOVWF COL2 MOVLW B'10010010' MOVWF COL3 MOVLW B'10001010' MOVWF COL4 MOVLW B'10000110' MOVWF COL5 RETURN MR BSF PORTA,1 ;MASTER RESET AL CONTADOR CALL UNMILI ;RETRASO DE 1 MILISEGUNDO BCF PORTA,1 RETURN CP0 BSF PORTA,2 ;INCREMENTA COLUMNA CONTADOR CALL UNMILI ;RETRASO DE 1 MILISEGUND0 BCF PORTA,2 RETURN ; RETRASO DE 0.5 SEGUNDOS retro MOVLW D'15' ;RUTINA RETRASO 10 MS MOVWF J ; J = w jloop MOVWF K ; K = w kloop DECFSZ K,f ; K = K-1, skip next if zero GOTO kloop DECFSZ J,f ; J = J-1, skip next if zero GOTO jloop RETURN UNMILI MOVLW D'250' ; RUTINA RETRASO 1 MILISEGUNDO MOVWF K ; J = w kloop2 DECFSZ K,f ; K = K-1, skip next if zero GOTO kloop2 RETURN ; RUTINA DE ATENCIÓN A LA INTERRUPCIÓN: ****************************************************************************************************** INTERRUP ; SALVADO DE REGISTROS: *********************************************************************************************************************** MOVWF SALVA_W ; GUARDAMOS EL REGISTRO W ANTES DE LA INTERRUPCIÓN SWAPF STATUS,W ; USADO PARA GUARDAR EL REGISTRO STATUS, OTRA INSTRUCCIÓN AFECTA LOS BITS DE ESTADO MOVWF SALVA_STATUS ; ; RUTINA DE TEMPORIZACIÓN LARGA: ************************************************************************************************************** MOVLW TMR0_50mS ; REINICIAMOS EL TIMER0 MOVWF TMR0 DECFSZ REG50mS,F ; DECREMENTAMOS EL CONTADOR AUXILIAR GOTO TODAVIA_NO ; TODAVÍA NO SE ALCANZA EL TIEMPO DESEADO ; RUTINA DEL CONTADOR: *********************************************************************************************************************** ; YA SE CUMPLIÓ EL TIEMPO ESTABLECIDO INCF CUENTA,F ; INCREMENTA EL CONTADOR PARA CARGAR EL SIGUIENTE CARACTER O REINICIAR EL CICLO ; FIN DE LA RUTINA DE INTERRUPCIÓN: *********************************************************************************************************** MOVLW CARGA ; W = NUESTRA VARIABLE DE TIEMPO MOVWF REG50mS ; COMIENZA EL NUMERO DE REPETICIONES NECESARIAS PARA EL TIEMPO REQUERIDO ; RESTAURACIÓN DE REGISTROS: ****************************************************************************************************************** TODAVIA_NO ; RUTINA DE RESTAURACIÓN DE LOS REGISTROS SWAPF SALVA_STATUS,W MOVWF STATUS SWAPF SALVA_W,F SWAPF SALVA_W,W ; FIN DE LA INTERRUPCIÓN: ********************************************************************************************************************* BCF INTCON,TMR0IF ; BORRA EL FLAG DE INTERRUPCIÓN RETFIE ; REGRESA DE LA INTERRUPCIÓN ;************************************************************************************************************************************************ END ; FIN DEL PROGRAMA