Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- RS EQU P3.5 ;SE CAMBIO
- RW EQU P3.6 ;SE CAMBIO
- E EQU P3.7 ;SE CAMBIO
- DBUS EQU P1
- CURSOR EQU 7FH
- COLUMN EQU 7EH
- BUFFER EQU 7DH
- ORG 0000H
- JMP PRINCIPAL
- ORG 0003H
- JMP EX0ISR ;INT0 VECTOR ORG 0003H
- ORG 0013H
- JMP EX1ISR
- ORG 0040H
- PRINCIPAL:
- ACALL INIT ;inicializa LDC
- MOV 20H, #'1'
- MOV 21H, #'2'
- MOV 22H, #'3'
- MOV 23H, #'A'
- MOV 24H, #'4'
- MOV 25H, #'5'
- MOV 26H, #'6'
- MOV 27H, #'B'
- MOV 28H, #'7'
- MOV 29H, #'8'
- MOV 2AH, #'9'
- MOV 2BH, #'C'
- MOV 2CH, #'*'
- MOV 2DH, #'0'
- MOV 2EH, #'#'
- MOV 2FH, #'D'
- SETB PX0
- CLR PSW.5
- MOV IE, #85H ;INTERRUPCION GLOBAL Y INTERRUPCION EXTERNA 0
- SETB IT0 ;ACTIVA EL FLANCO DE BAJADA DE LA INTERRUPCION 0
- SETB IT1 ;ACTIVA EL FLANCO DE BAJADA DE LA INTERRUPCION 1
- MOV P2, #11110000B;INICIALIZA LOS RENGLONES EN 0 Y LAS COLUMANAS EN 1
- MOV CURSOR, #00H ;SE LIMPIA EL CONTEO DE LCD
- JMP $
- EX1ISR:
- CLR EX1
- SETB PSW.5
- MOV BUFFER, #00H
- ACALL DELAY_10MS
- JNB P3.3 , $
- ACALL DELAY_10MS
- INC CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
- MOV A, BUFFER
- ACALL PRESENTA
- CLR PSW.5
- SETB EX1
- RETI
- DELAY_10MS:
- MOV R5, #20D ; SE VUELVE A CAREGAR EL REGISTRO R5 QUE SE OCUPA PARA EL DELAY
- DELAY_10MS_2: MOV R6, #250D
- DJNZ R6, $
- DJNZ R5, DELAY_10MS_2
- RET
- EX0ISR:
- CLR EX0 ; SE DESABILITA LA INTERRUPCION EXTERNA
- ACALL DELAY_10MS ;SE MANDA A LLAMAR A UNA SUBRUTINA QUE ESPERE 10MS
- ACALL READ_KEYPAD ;SE LLAMA A ALA SUBRUTINA PARA ENCOTRAR QUE TELCA SE PRESIONO
- ACALL DELAY_10MS
- WAIT_BUTTON: MOV A, #11110000b ;Initial state for Keypad
- MOV P2, A ;Initial state for keypad t capture INT0, needs a 4 input AND gate
- MOV A, P2
- CJNE A, #11110000b, WAIT_BUTTON ;wait till button matrix is released
- SETB EX0 ;Enable interrupt INT0
- RETI
- READ_KEYPAD: ;SUBRUTINA PARA ALGO
- MOV COLUMN, #00H
- MOV A, #11111110b ;SE BARREN LAS FILAS
- SCAN_ROW: MOV P2, A
- JNB P2.7, FOUND_KEY1 ;CHECA SI SE PRESIONO LA COLUMNA 1
- JNB P2.6, FOUND_KEY2 ;CHECA SI SE PRESIONO LA COLUMNA 2
- JNB P2.5, FOUND_KEY3 ;CHECA SI SE PRESIONO LA COLUMNA 3
- JNB P2.4, FOUND_KEY4 ;CHECA SI SE PRESIONO LA COLUMNA 4
- RL A ;NO SE ENCONTRO LA LLAVE POR LO QUE SE BARRE TODO, EJEMPLO: 1111 1110 -> 1111 1101
- INC COLUMN ;SE INCREMETA EL CONTEO DE LA LLAVE QUE CREO QUE SON LAS COLUMNAS
- MOV R0, COLUMN ;SE CARGA EL VALOR DEL CONTEO AL REGISTRO 0
- CJNE R0, #4D, SCAN_ROW ; SI EL REGISTRO DOS ES IGUAL A 0 ENTONCES NO SE ENCONTRO NADA POR LO QUE SE MANDA UN ERROR
- RET
- FOUND_KEY1: ;LA COLUMNA 0 FUE PRECIONADA
- MOV A, COLUMN ; SE MONTA LA COLUMNA EN LA QUE ESTAS
- RL A
- RL A ;SE MULTIPLIA POR 4
- ADD A,#00H ;SE LE AÑADE 1 POR ESTAR EN LA FILA 1
- ADD A ,#20H
- MOV R1 ,A
- MOV A, @R1
- JB PSW.5, BUFFERIN
- INC CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
- ACALL PRESENTA
- RET
- FOUND_KEY2:
- MOV R0, COLUMN
- MOV A, R0
- RL A
- RL A
- ADD A,#01H
- ADD A ,#20H
- MOV R1 ,A
- MOV A, @R1
- JB PSW.5, BUFFERIN
- INC CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
- ACALL PRESENTA
- RET
- FOUND_KEY3:
- MOV R0, COLUMN
- MOV A, R0
- RL A
- RL A
- ADD A,#02H
- ADD A ,#20H
- MOV R1 ,A
- MOV A, @R1
- JB PSW.5, BUFFERIN
- INC CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
- ACALL PRESENTA
- RET
- FOUND_KEY4:
- MOV R0, COLUMN
- MOV A, R0
- RL A
- RL A
- ADD A,#03H
- ADD A ,#20H
- MOV R1 ,A
- MOV A, @R1
- JB PSW.5, BUFFERIN
- INC CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
- ACALL PRESENTA
- RET
- BUFFERIN:
- MOV R7, A
- MOV A, BUFFER
- MOV B , #10D
- MUL AB
- ADD A, R7
- MOV BUFFER, A
- RET
- ;******************************
- ;inicialización de la LCD *
- ;******************************
- INIT:
- MOV R2, #32D;
- ESPARA15MS: MOV R3, #250D;
- DJNZ R3, $
- DJNZ R2, ESPARA15MS
- MOV A, #38H ;2 lineas, matriz ;de 5 x 7
- CLR RS ;prepara comando para salida
- ACALL SALIDA ;envíalo
- MOV R2, #10D
- ESPERA4_1MS: MOV R3, #250D;
- DJNZ R3, $
- DJNZ R2, ESPERA4_1MS
- MOV A, #38H ;LCD encendida, cursor encendido
- CLR RS ;prepara comando para salida
- ACALL SALIDA ;envíalo
- ACALL ESPERA
- MOV A, #38H ;LCD encendida, cursor encendido
- CLR RS ;prepara comando para salida
- ACALL SALIDA ;envíalo
- ACALL ESPERA
- MOV A, #0EH ;LCD encendida, cursor encendido
- CLR RS ;prepara comando para salida
- ACALL SALIDA ;envíalo
- ACALL ESPERA ;espera a que la LCD este libre
- MOV A, #01H ;limpia LCD
- CLR RS ;perpara comando para salida
- ACALL SALIDA ;envíalo
- ACALL ESPERA ; espera a que el LCD este libre
- MOV A, #03H ;MODO DEL CURSOR
- CLR RS ;perpara comando para salida
- ACALL SALIDA ;envíalo
- ACALL ESPERA
- MOV A, #02H ;poscicion inicial DE LA RAM
- CLR RS ;perpara comando para salida
- ACALL SALIDA ;envíalo
- ACALL ESPERA ;espera a que el LCD este libre
- MOV A, #80H ;cursor: linea 1, pos. 1
- CLR RS ;prepara comando de salida
- ACALL SALIDA ;envíalo
- ACALL ESPERA ;espera a que LCD este libre
- RET
- ;******************************
- ; Presenta datos en LCD *
- ;******************************
- PRESENTA:
- SETB RS ;prepara dato para salida
- ACALL SALIDA ;envíalo
- ACALL ESPERA ;espera a que la LCD este libre
- RET
- ;*****************************
- ; Espera q que LCD este libre *
- ;*****************************
- ESPERA:
- MOV R2, #255D
- DJNZ R2, $
- RET
- ;*****************************
- ;Salida a LCD *
- ;*****************************
- SALIDA: MOV DBUS, A
- CLR RW
- SETB E
- NOP
- NOP
- NOP
- NOP
- NOP
- NOP
- CLR E
- RET
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement