Escolar Documentos
Profissional Documentos
Cultura Documentos
INC"
***********************************
; ===================================================================
; ===================================================================
; conectado al Puerto B según la disposición siguiente y explicada en la figura 19-2 del libro:
; ^ ^ ^ ^
; |----|----|----|----|
; RB0 --> | 0 | 1 | 2 | 3 |
; |----|----|----|----|
; RB1 --> | 4 | 5 | 6 | 7 |
; |----|----|----|----|
; RB2 --> | 8 | 9 | 10 | 11 |
; |----|----|----|----|
; RB3 --> | 12 | 13 | 14 | 15 |
; |----|----|----|----|
; Los números que se han dibujado dentro de cada cuadrado son el orden de las teclas
; que no tienen por qué coincidir con lo serigrafiado sobre ellas. El paso del número de orden
; de la tecla al valor que hay serigrafiado sobre la misma se hace con una tabla de conversión.
;
; ZONA DE DATOS
**********************************************************************
CBLOCK
ENDC
; Subrutina "Teclado_LeeHex"
************************************************************
; 0 1 2 3 1 2 3 F
; 4 5 6 7 4 5 6 E
; 8 9 10 11 7 8 9 D
; 12 13 14 15 A 0 B C
; Así, en este ejemplo, la tecla "7" ocupa el orden 8, la tecla "F" ocupa el orden 3 y la
Teclado_LeeHex
return
addwf PCL,F
Teclado_FinTablaHex
; posición 0FFh de memoria ROM de programa. De todas formas, en caso que así fuera
ENDIF
; Esta subrutina configura las líneas del Puerto B según la conexión del teclado realizada
Teclado_Inicializa
movwf PORTB
; call Teclado_EsperaDejePulsar
; return
Teclado_ComprobacionEQU b'11110000'
Teclado_EsperaDejePulsar:
Teclado_SigueEsperando
call Retardo_20ms ; Espera a que se estabilicen los niveles de tensión.
goto Teclado_SigueEsperando
return
; Salida: En (W) el número de orden de la tecla pulsada. Además Carry se pone a "1" si
Teclado_LeeOrdenTecla:
Tecl_Columna1
goto Tecl_GuardaValor
incf Tecl_TeclaOrden,F
Tecl_Columna3
btfss PORTB,6
goto Tecl_GuardaValor
incf Tecl_TeclaOrden,F
Tecl_Columna4
btfss PORTB,7
goto Tecl_GuardaValor
incf Tecl_TeclaOrden,F
; Comprueba si ha chequeado la última tecla, en cuyo caso sale. Para ello testea si
Tecl_TerminaColumnas
movlw Tecl_UltimaTecla
goto Tecl_ChequeaFila
Tecl_NoPulsada
Tecl_GuardaValor
Tecl_FinTecladoLee
return
; ===================================================================
; ===================================================