You are on page 1of 13

;

===================================================================================
==============================
;--DIRECTIVAS DEL PROGRAMA--
;
===================================================================================
==============================
LIST P=16f84A
INCLUDE <P16F84A.INC>
;
===================================================================================
==============================
;--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

You might also like