-
1Code
;P2.0 --------------- Enable LCD
;P2.1 --------------- RS LCD (0 Instrucción, 1 Dato)
;P3.4 --------------- ALTBTN (0 Si no está presionaldo alt, 1 si es que si)
E EQU P2.0
RS EQU P2.1
ALTBTN EQU P3.4
DATAAV EQU P3.2
ORG 0000H
LJMP INICIO
ORG 0003H
JMP TECLADO
ORG 0013H
JMP SEND ;NUDES
ORG 0040H
INICIO: MOV TMOD,#21H ; MODO 0 TMP 1
MOV IE,#85H ; HABILITA INTERRUPCIÓN EXT0
MOV SCON,#40H
MOV TH1,#0FDH
MOV TL1,#-3D
SETB TR1
ACALL INIT ; LLAMA A INICIALIZAR LCD
ACALL EQUIPO9 ; PRESENTACIÓN DEL EQUIPO
MOV P1,#0H ; PUERTO 1 EN 0 DESPUES DE EQUIPO9
MOV R5,#0H ; CONTADOR DE CARACTERES EN LCD EN 0
MOV R6,#0H ; CONTADOR DE DOS NUMEROS EN ALT EN 0
MOV R0,#0H ; VARIABLE DONDE SE ALMACENA DATO A IMPRIMIR EN 0
MOV R4,#60H
MOV R2,#60H
MOV R3,#60H
MOV R1,#40H
////////////////////////////////////////////////////////////////////////////////////////////
; TABLA DE VALORES DE ASCII A HEXADECIMAL
////////////////////////////////////////////////////////////////////////////////////////////
MOV 30H, #48D ;1
MOV 31H, #49D ;2
MOV 32H, #50D ;3
MOV 33H, #51D ;A
MOV 34H, #52D ;4
MOV 35H, #53D ;5
MOV 36H, #54D ;6
MOV 37H, #55D ;B
MOV 38H, #56D ;7
MOV 39H, #57D ;8
MOV 3AH, #65D ;9
MOV 3BH, #66D ;C
MOV 3CH, #67D ;F
MOV 3DH, #68D ;0
MOV 3EH, #69D ;E
MOV 3FH, #70D ;D
SJMP $
INIT: ACALL WAIT ; TIEMPO DE ESPERA TÍPICO
MOV A, #38H ; 2 LÍNEAS, MATRÍZ DE 5*8
ACALL MANDAR ; ENVÍA LA INSTRUCCIÓN A LA LCD
MOV A, #38H ; 2 LÍNEAS, MATRÍZ DE 5*8
ACALL MANDAR ; ENVÍA LA INSTRUCCIÓN A LA LCD
MOV A, #38H ; 2 LÍNEAS, MATRÍZ DE 5*8
ACALL MANDAR ; ENVÍA LA INSTRUCCIÓN A LA LCD
REINICIO: MOV A, #01H ; LIMPIA LA LCD
ACALL MANDAR ; ENVÍA LA INSTRUCCIÓN A LA LCD
MOV A, #0FH ; DISPLAY, CURSOR Y PARPADEO PRENDIDOS
ACALL MANDAR ; ENVÍA LA INSTRUCCIÓN A LA LCD
MOV A, #80H ; CURSOR LÍNEA 1, POSICIÓN 1 (DDRAM DIRECCIÓN EN 0)
ACALL MANDAR ; ENVÍA LA INSTRUCCIÓN A LA LCD
RET ; RETORNA A DONDE SE LLAMÓ
/////////////////////////////////////////////////////////////////////////////////////////////
WAIT: MOV TL0, #0B6H ; PARTE INFERIOR (057 PARA 25ms)
MOV TH0, #03CH ; PARTE SUPERIOR (09E PARA 25ms
SETB TR0 ; INICIALIZA EN 1 PARA INICIAR CONTEO
JNB TF0,$ ; 50ms
CLR TF0 ; LIMPIA BANDERA DE DESBORDE
RET ; RETORNA A DONDE SE LLAMÓ
////////////////////////////////////////////////////////////////////////////////////////////
MANDAR: CLR RS ; RS MODO INSTRUCCIÓN
ACALL WAIT ; TIEMPO DE ESPERA TÍPICO
CLR E ; PREPARANDO EL...
ACALL WAIT ; TIEMPO DE ESPERA TÍPICO
SETB E ; ...ENABLE
ACALL WAIT ; TIEMPO DE ESPERA TÍPICO
MOV P1, A ; ACUMILADOR A PUERTO 1 (LCD)
ACALL WAIT ; TIEMPO DE ESPERA TÍPICO
CLR E ; FLANCO DE BAJADA ENABLE (MANDA INSTRUCCIÓN)
ACALL WAIT ; ESPERA TÍPICA
RET ; RETORNA A DONDE SE LLAMÓ
////////////////////////////////////////////////////////////////////////////////////////////
ESCRIBE: SETB RS ; RS EN MODO DE DATO
ACALL WAIT ; TIEMPO DE ESPERA TÍPICO
CLR E ; PREPARANDO EL...
ACALL WAIT ; TIEMPO DE ESPERA TÍPICO
SETB E ; ...ENABLE
ACALL WAIT ; ESPERA TÍPICA
MOV P1, A ; ACUMULADOR A PUERTO 1 (LCD)
ACALL WAIT ; ESPERA TÍPICA
CLR E ; FLANCO DE BAJADA ENABLE (MANDA INSTRUCCIÓN)
ACALL WAIT ; ESPERA TÍPICA
RET ; RETORNA A DONDE SE LLAMÓ
////////////////////////////////////////////////////////////////////////////////////////////
EQUIPO9: MOV A,#69D ; E
ACALL ESCRIBE ; ESCRIBE EN LCD
MOV A,#81D ; Q
ACALL ESCRIBE ; ESCRIBE EN LCD
MOV A,#85D ; U
ACALL ESCRIBE ; ESCRIBE EN LCD
MOV A,#73D ; I
ACALL ESCRIBE ; ESCRIBE EN LCD
MOV A,#80D ; P
ACALL ESCRIBE ; ESCRIBE EN LCD
MOV A,#79D ; O
ACALL ESCRIBE ; ESCRIBE EN LCD
MOV A,#32D ; " "
ACALL ESCRIBE ; ESCRIBE EN LCD
MOV A,#57D ; 9
ACALL ESCRIBE ; ESCRIBE EN LCD
MOV R7,#20D ; REPETICIONES DE 50ms
LGK: MOV TL0, #0H ; PARTE INFERIOR
MOV TH0, #0H ; PARTE SUPERIOR
SETB TR0 ; INICIALIZA EN 1 PARA INICIAR CONTEO
JNB TF0,$ ; 50ms
CLR TF0 ; LIMPIA BANDERA DESBORDAMIENTO
DJNZ R7, LGK ; EJECUTA 20 VECES
ACALL REINICIO ; REINICIA PANTALLA
RET ; RETORNA A DONDE SE LLAMÓ
/////////////////////////////////////////////////////////////////////////////////////////////
TECLADO: CJNE R5,#10H,PLLENA ; COMPARA QUE LA PRIMERIA LÍNEA NO ESTE LLENA
MOV A,#0C0H ; SI SE LLENA SE CAMBIA A LA SIGUIENTE LÍNEA
ACALL MANDAR ; MANDA INSTRUCCIÓN A LCD
PLLENA: CJNE R5,#20H,ELCD ; COMPARA QUE LA SEGUNDA LÍNEA NO ESTE LLENA
MOV A,#01H ; CUANDO ESTA LLENA BORRA TODO
ACALL MANDAR ; MANDA INSTRUCCIÓN A LCD
MOV R5,#0H ; LIMPIA CONTADOR DE CARACTERES
RETI ; SALE DE LA INTERRUPCIÓN DEL TECLADO
/////////////////////////////////////////////////////////////////////////////////////////////
ELCD: JB ALTBTN,ALT ; VERIFICA QUE NO ESTÉ PRESIONADO EL PUSHBTN ALT
MOV A,P0 ; MUEVE DATOS DEL TECLADO AL ACUMULADOR
ADD A,#30H ; LO POSICIONA EN SU DECODIFICACIÓN CORRESPONDIENTE
MOV R0,A ; GUARDA ACUMULADOR EN R0 PARA USARLO COMO APUNTADOR
MOV A,@R0 ; APUNTA AL VALOR EN LA DIRECCION DONDE ESTÁ R0
ACALL TLCD ; LLAMA A TECLADO LCD (TLCD)
MOV @R1,A
INC R1
RETI ; SALE DE LA INTERRUPCIÓN DEL TECLADO
/////////////////////////////////////////////////////////////////////////////////////////////
TLCD: SETB RS ; RS EN MODO DE DATO
ACALL WAIT ; ESPERA TÍPICA
CLR E ; PREPARANDO EL...
ACALL WAIT ; ESPERA TÍPICA
SETB E ; ...ENABLE
ACALL WAIT ; ESPERA TÍPICA
MOV P1,A ; ACUMULADOR A PUERTO 1 (LCD)
ACALL WAIT ; ESPERA TÍPICA
CLR E ; FLANCO DE BAJADA ENABLE (MANDA INSTRUCCIÓN)
ACALL WAIT ; ESPERA TÍPICA
CLR RS ; RS EN MODO INSTRUCCIÓN
ACALL WAIT ; ESPERA TÍPICA
INC R5 ; INCREMENTA CONTADOR DE CARACTERES
RET ; RETORNA A DONDE SE LLAMÓ
/////////////////////////////////////////////////////////////////////////////////////////////
ALT: JNB DATAAV,ALT
MOV A,P0 ; MUEVE DATOS DEL TECLADO AL ACUMULADOR
CJNE R6,#01H,PD ; MANDA A RUTINA PARA GUARDAR LOS DOS VALORES PRESIONADOS
ADD A,B ; SUMA PRIMER VALOR (PARTE ALTA) CON SEGUNDO (PARTE BAJA)
MOV R6,#0H ; PONE EN 0 EL COMPARADOR
ACALL TLCD ; LLAMA A TECLADO LCD (TLCD)
MOV @R1,A
INC R1
RETI ; SALE DE LA INTERRUPCIÓN DEL TECLADO
/////////////////////////////////////////////////////////////////////////////////////////////
PD: SWAP A ; MANDA LA PARTE BAJA DE "A" A LA PARTE ALTA
MOV B,A ; MUEVE "A" A LA VARIABLE "B"
INC R6 ; PONE EN 1 EL COMPARADOR
RETI ; SALE DE LA INTERRUPCIÓN DEL TECLADO
//////////////////////////////////////////////////////////////////////////////////////////////
SEND: MOV A,R1
SUBB A,#40H
JZ SALIR
MOV R0,#40H
MOV 60H,A
SETB TR1
SER: MOV SBUF,@R0
ACALL WAIT
JNB TI,$
ACALL WAIT
CLR TI
ACALL WAIT
INC R0
DJNZ 60H,SER
CLR TR1
MOV R1,#40H
ACALL REINICIO
SALIR: RETI
////////////////////////////////////////////////////////////////////////////////////////////////
END
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.