;================================================================================================================= ;--DIRECTIVAS DEL PROGRAMA-- ;================================================================================================================= LIST P=16f84A INCLUDE ;================================================================================================================= ;--ETIQUETAS DEL PROGRAMA -- ;================================================================================================================= CBLOCK 0x0C CONTA CONTA_1 CONTA_2 CONTA_LETRAS LETRA NUMERO_LETRAS CONTA_INTERNO ENDC ;================================================================================================================= ;--CONFIGURAION DE PUERTOS-- ;================================================================================================================= ORG 0X00 goto INICIO TABLA_CARACTERES addwf PCL,F RETLW 3EH ;0 RETLW 45H RETLW 49H RETLW 51H RETLW 3EH RETLW 11H ;1 RETLW 21H RETLW 7FH RETLW 01H RETLW 01H RETLW 27H ; 2 RETLW 49H RETLW 49H RETLW 49H RETLW 31H RETLW 22H ; 3 RETLW 49H RETLW 49H RETLW 49H RETLW 36H RETLW 78H ; 4 RETLW 08H RETLW 08H RETLW 08H RETLW 7FH RETLW 7AH ; 5 RETLW 49H RETLW 49H RETLW 49H RETLW 46H RETLW 3EH ; 6 RETLW 49H RETLW 49H RETLW 49H RETLW 26H RETLW 40H ; 7 RETLW 40H RETLW 4FH RETLW 50H RETLW 60H RETLW 36H ; 8 RETLW 49H RETLW 49H RETLW 49H RETLW 36H RETLW 32H ; 9 RETLW 49H RETLW 49H RETLW 49H RETLW 3EH RETLW 00H ; : RETLW 12H RETLW 00H RETLW 00H RETLW 00H RETLW 01H ; ; RETLW 0AH RETLW 00H RETLW 00H RETLW 00H RETLW 0H ; < EQUIVALE A " RETLW 70H RETLW 0H RETLW 70H RETLW 0H RETLW 0AH ; = RETLW 0AH RETLW 0AH RETLW 0AH RETLW 00H RETLW 0H ; > EQUIVALE A . RETLW 1H RETLW 0H RETLW 0H RETLW 0H RETLW 01H ; ? EQUIVALE A , RETLW 02H RETLW 00H RETLW 00H RETLW 00H RETLW 0H ; @ EQUIVALE A ESPACIO RETLW 0H RETLW 0H RETLW 0H RETLW 0H RETLW 3FH ; A RETLW 48H RETLW 48H RETLW 48H RETLW 3FH RETLW 7FH ; B RETLW 49H RETLW 49H RETLW 49H RETLW 36H RETLW 3EH ; C RETLW 41H RETLW 41H RETLW 41H RETLW 22H RETLW 7FH ; D RETLW 41H RETLW 41H RETLW 41H RETLW 3EH RETLW 7FH ; E RETLW 49H RETLW 49H RETLW 49H RETLW 41H RETLW 7FH ; F RETLW 48H RETLW 48H RETLW 48H RETLW 40H RETLW 3EH ; G RETLW 41H RETLW 49H RETLW 49H RETLW 26H RETLW 7FH ; H RETLW 8H RETLW 8H RETLW 8H RETLW 7FH RETLW 41H ; I RETLW 41H RETLW 7FH RETLW 41H RETLW 41H RETLW 42H ; J RETLW 41H RETLW 7EH RETLW 40H RETLW 40H RETLW 7FH ; K RETLW 08H RETLW 14H RETLW 22H RETLW 41H RETLW 7FH ; L RETLW 1H RETLW 1H RETLW 1H RETLW 1H RETLW 7FH ; M RETLW 20H RETLW 10H RETLW 20H RETLW 7FH RETLW 7FH ; N RETLW 30H RETLW 08H RETLW 06H RETLW 7FH RETLW 3EH ; O RETLW 41H RETLW 41H RETLW 41H RETLW 3EH RETLW 7FH ; P RETLW 48H RETLW 48H RETLW 48H RETLW 30H RETLW 3EH ; Q RETLW 41H RETLW 45H RETLW 43H RETLW 3EH RETLW 7FH ; R RETLW 48H RETLW 4CH RETLW 4AH RETLW 31H RETLW 32H ; S RETLW 49H RETLW 49H RETLW 49H RETLW 26H RETLW 40H ; T RETLW 40H RETLW 7FH RETLW 40H RETLW 40H RETLW 7EH ; U RETLW 01H RETLW 01H RETLW 01H RETLW 7EH RETLW 7CH ; V RETLW 02H RETLW 01H RETLW 02H RETLW 7CH RETLW 7FH ; W RETLW 2H RETLW 4H RETLW 2H RETLW 7FH RETLW 63H ; X RETLW 14H RETLW 8H RETLW 14H RETLW 63H RETLW 60H ; Y RETLW 10H RETLW 0FH RETLW 10H RETLW 60H RETLW 43H ; Z RETLW 45H RETLW 49H RETLW 51H RETLW 61H INICIO bsf STATUS,RP0 ; Seleccion del banco 1 clrf PORTA ; Puerto B como salidas clrf PORTB bcf STATUS,RP0 ; Banco 0 clrf PORTA ; Inicializacion de los clrf PORTB RUTINA movlw "J" call CONVERTIR movlw "O" call CONVERTIR movlw "S" call CONVERTIR movlw "H" call CONVERTIR movlw "D" call CONVERTIR movlw "A" call CONVERTIR movlw "N" call CONVERTIR movlw "I" call CONVERTIR movlw "E" call CONVERTIR movlw "L" call CONVERTIR movlw "@" call CONVERTIR movlw "T" call CONVERTIR movlw "E" call CONVERTIR movlw "A" call CONVERTIR movlw "M" call CONVERTIR movlw "@" call CONVERTIR movlw "T" call CONVERTIR movlw "3" call CONVERTIR movlw "T" call CONVERTIR movlw "H" call CONVERTIR movlw "@" call CONVERTIR movlw "P" call CONVERTIR movlw "R" call CONVERTIR movlw "O" call CONVERTIR movlw "J" call CONVERTIR movlw "E" call CONVERTIR movlw "T" call CONVERTIR movlw "S" call CONVERTIR movlw "@" call CONVERTIR movlw "2" call CONVERTIR movlw "0" call CONVERTIR movlw "0" call CONVERTIR movlw "7" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR movlw "@" call CONVERTIR goto RUTINA CONVERTIR incf CONTA_LETRAS,F movwf LETRA ;Letra contiene el codigo ascci del caracter a grabar movlw d'48' ;Se resta para obtener la posicion del caracter subwf LETRA,F movf LETRA,W clrf CONTA_2 ;Este contador direcciona el inicio de barrido en la tabla de datos movwf CONTA_1 ;Ayuda a direccionar a CONTA_2 PREGUNTAR movf CONTA_1,F btfss STATUS,Z goto NO_CERO goto SI_CERO NO_CERO decf CONTA_1,F movlw d'5' addwf CONTA_2,F goto PREGUNTAR SI_CERO movlw 0x40 ;Da la direccion de la memoria no visble en el panel, movwf FSR ;desde la cual se grabaran los datos del caracter movlw d'5' movwf CONTA_INTERNO LLAMAR movf CONTA_2,W call TABLA_CARACTERES ;Rutina que accesa los datos de los caracteres CARGAR_DATOS movwf INDF ;Carga datos en direccion 0x40 y de ahi en adelante incf FSR,F ;En total carga todos los datos de un caracter incf CONTA_2,F decfsz CONTA_INTERNO,F goto LLAMAR ;call DEZPLAZAR_32 ;Si terminó, Llama a rutina dezplazar para la visualizacion de los datos dezplazandose ;return DEZPLAZAR_32 movlw d'6' movwf CONTA DEZPLAZAR movlw 0x20 ;Esta rutina en general dezplaza una posicion todas movwf FSR ;las columnas existentes en el panel, hacia la izquierda. OTRA_VEZ movf INDF,W ; y luego llama a rutina barrido hasta que se barra los decf FSR,F ; 6 datos de cada caracterm, ahi es cuando retorna a movwf INDF ; buscar el siguiente dato para almacenarlo incf FSR,F incf FSR,F movlw 0x46 xorwf FSR,W btfss STATUS,Z goto OTRA_VEZ call BARRIDO decfsz CONTA,F goto DEZPLAZAR return BARRIDO clrf PORTA movlw 0x20 ;Barre el Panel,hasta llegar a la ultima columna movwf FSR INCREMENTAR movf INDF,W movwf PORTB call Retardo_1ms call Retardo_500micros clrf PORTB incf PORTA,F ;call Retardo_2s incf FSR,F btfss FSR,6 goto INCREMENTAR return ;**************************** Librería "RETARDOS.INC" ********************************* ; ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== ; ; Librería con múltiples subrutinas de retardos, desde 4 microsegundos hasta 20 segundos. ; Además se pueden implementar otras subrutinas muy fácilmente. ; ; Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal ; de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada ; ciclo máquina tarda 4 x 1/4MHz = 1 µs. ; ; En los comentarios, "cm" significa "ciclos máquina". ; ; ZONA DE DATOS ********************************************************************* CBLOCK R_ContA ; Contadores para los retardos. R_ContB R_ContC ENDC ; ; RETARDOS de 4 hasta 10 microsegundos --------------------------------------------------- ; ; A continuación retardos pequeños teniendo en cuenta que para una frecuencia de 4 MHZ, ; la llamada a subrutina "call" tarda 2 ciclos máquina, el retorno de subrutina ; "return" toma otros 2 ciclos máquina y cada instrucción "nop" tarda 1 ciclo máquina. ; Retardo_10micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. nop ; Aporta 1 ciclo máquina. Retardo_5micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina. Retardo_4micros ; La llamada "call" aporta 2 ciclos máquina. return ; El salto del retorno aporta 2 ciclos máquina. ; ; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------ ; Retardo_500micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina. movlw d'164' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina. Retardo_200micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina. movlw d'64' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina. Retardo_100micros ; La llamada "call" aporta 2 ciclos máquina. movlw d'31' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina. Retardo_50micros ; La llamada "call" aporta 2 ciclos máquina. nop ; Aporta 1 ciclo máquina. movlw d'14' ; Aporta 1 ciclo máquina. Este es el valor de "K". goto RetardoMicros ; Aporta 2 ciclos máquina. Retardo_20micros ; La llamada "call" aporta 2 ciclos máquina. movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "K". ; ; El próximo bloque "RetardoMicros" tarda: ; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina. ; RetardoMicros movwf R_ContA ; Aporta 1 ciclo máquina. Rmicros_Bucle decfsz R_ContA,F ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto Rmicros_Bucle ; Aporta (K-1)x2 ciclos máquina. return ; El salto del retorno aporta 2 ciclos máquina. ; ;En total estas subrutinas tardan: ; - Retardo_500micros: 2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz). ; - Retardo_200micros: 2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz). ; - Retardo_100micros: 2 + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz). ; - Retardo_50micros : 2 + 1 + 1 + 2 + (2 + 3K) = 50 cm = 50 µs. (para K= 14 y 4 MHz). ; - Retardo_20micros : 2 + 1 + (2 + 3K) = 20 cm = 20 µs. (para K= 5 y 4 MHz). ; ; RETARDOS de 1 ms hasta 200 ms. -------------------------------------------------------- ; Retardo_200ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_50ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_20ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_10ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_5ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_2ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'2' ; Aporta 1 ciclo máquina. Este es el valor de "M". goto Retardos_ms ; Aporta 2 ciclos máquina. Retardo_1ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'1' ; Aporta 1 ciclo máquina. Este es el valor de "M". ; ; El próximo bloque "Retardos_ms" tarda: ; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 = ; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina ; que a 4 MHz son 1002 µs = 1 ms. ; Retardos_ms movwf R_ContB ; Aporta 1 ciclo máquina. R1ms_BucleExterno movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K". movwf R_ContA ; Aporta Mx1 ciclos máquina. R1ms_BucleInterno nop ; Aporta KxMx1 ciclos máquina. decfsz R_ContA,F ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar). goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina. decfsz R_ContB,F ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina. return ; El salto del retorno aporta 2 ciclos máquina. ; ;En total estas subrutinas tardan: ; - Retardo_200ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249). ; - Retardo_100ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249). ; - Retardo_50ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 50007 cm = 50 ms. (M= 50 y K=249). ; - Retardo_20ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 20007 cm = 20 ms. (M= 20 y K=249). ; - Retardo_10ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 10007 cm = 10 ms. (M= 10 y K=249). ; - Retardo_5ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 5007 cm = 5 ms. (M= 5 y K=249). ; - Retardo_2ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 2007 cm = 2 ms. (M= 2 y K=249). ; - Retardo_1ms : 2 + 1 + (2 + 4M + 4KM) = 1005 cm = 1 ms. (M= 1 y K=249). ; ; RETARDOS de 0.5 hasta 20 segundos --------------------------------------------------- ; Retardo_20s ; La llamada "call" aporta 2 ciclos máquina. movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_10s ; La llamada "call" aporta 2 ciclos máquina. movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_5s ; La llamada "call" aporta 2 ciclos máquina. movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_2s ; La llamada "call" aporta 2 ciclos máquina. movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_1s ; La llamada "call" aporta 2 ciclos máquina. movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "N". goto Retardo_1Decima ; Aporta 2 ciclos máquina. Retardo_500ms ; La llamada "call" aporta 2 ciclos máquina. movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "N". ; ; El próximo bloque "Retardo_1Decima" tarda: ; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 + ; + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 = ; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011 ; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo. ; Retardo_1Decima movwf R_ContC ; Aporta 1 ciclo máquina. R1Decima_BucleExterno2 movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M". movwf R_ContB ; Aporta Nx1 ciclos máquina. R1Decima_BucleExterno movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K". movwf R_ContA ; Aporta MxNx1 ciclos máquina. R1Decima_BucleInterno nop ; Aporta KxMxNx1 ciclos máquina. decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar). goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina. decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar). goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina. decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina. return ; El salto del retorno aporta 2 ciclos máquina. ; ;En total estas subrutinas tardan: ; - Retardo_20s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s. ; (N=200, M=100 y K=249). ; - Retardo_10s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s. ; (N=100, M=100 y K=249). ; - Retardo_5s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 5000207 cm = 5 s. ; (N= 50, M=100 y K=249). ; - Retardo_2s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 2000087 cm = 2 s. ; (N= 20, M=100 y K=249). ; - Retardo_1s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 1000047 cm = 1 s. ; (N= 10, M=100 y K=249). ; - Retardo_500ms: 2 + 1 + (2 + 4N + 4MN + 4KMN) = 500025 cm = 0,5 s. ; (N= 5, M=100 y K=249). ; =================================================================== ; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS" ; E. Palacios, F. Remiro y L. López. ; Editorial Ra-Ma. www.ra-ma.es ; =================================================================== END