Sunteți pe pagina 1din 9

Teclado

LECTURA DEL TECLADO

PortA

FUNCIONAMIENTO

El microcontrolador esta constantemente sondeando cada una de las filas, para ello envia un
uno para habilitar la fila a escanear, de igual manera como lo hace con el display, si
tomamos una foto en el instante que se esta explorando la fila número uno se tendría el
puerto Rb3 en 1 y Rb2, Rb1 yRb0 en cero:

Fila 1

Fila 2

Fila 3

Fila 4

Héctor Fabio Rojas 1


Teclado

Obsérvese que si no se presiona ninguna tecla el valor en el puerto C sería 1 1 1, si se


presiona alguna de las teclas de las filas no habilitadas ( la 2,3 o 4 ) la salida será la misma
(1 1 1), en cambio si la tecla presionada corresponde a la fila seleccionada el valor en el
puerto C cambiará, si la tecla 2 se presiona, el puerto C leera 101 de igual manera si la
presionada es la 1 el puerto leerá 110 (el cero indica la columna donde esta la tecla
presionada).

Si se tiene la fila y la columna se puede determinar la tecla presionada, para ello el


programa utiliza un recurso muy importante llamado tablas, similar a lo que en lenguaje c
se llama vectores o array. A continuación se muestra una tabla y su funcionamiento:

tablacol addwf pc ;Contador de programa = Contador de programa + W


retlw 00 ; Si W= 0 Haga W=0 y returne
retlw 10 ; Si W= 1 Haga W=10 y returne
retlw 20 ; Si W= 2 Haga W=20 y returne
retlw 47 ; Si W= 3 Haga W=47 y returne
retlw 8F ; Si W= 4 Haga W=8F y returne

Dependiendo el valor de W se escoge (similar al Switch-Case de C++) el nuevo valor de


W.

Para entender el programa Teclnew73.asm se mostrará a continuación los algoritmos que


rigen su funcionamiento, usted deberá tener una copia del programa en assembler e ir
comparando los dos sistemas para entender la lógica del programa.

Tablas

tablacol addwf pc ; tablafila addwf pc


nop nop
retlw 3 ; retlw 9
retlw 2 ; retlw 6
nop nop
retlw 1 ; nop
retlw 3
nop
nop
nop
retlw 0

Héctor Fabio Rojas 2


Teclado

Inicio Lea

Configuración Inicialización
PortC = Entrada PortB = Salida Rota = 01 Switch = 0
Miles = 0FF Decenas = 0FF Switch = switch,6 (registro 30)
Probar
Call Lea PtoB = Rota + F0

W = PortC & 07

Salir No
Call TablaColumnas W = Not W * W=7

Filas = W Si

W = Rota No
W=7 Rlf Rota

Call TablaFilas
Si

Return
Tecla1 = W + Fila

Si No
Tecla1 = 0C Switch = 1 Tecla1 = 0C

Tecla1 = 0 Decenas = Miles = Tecla1 = 0

Algoritmo TeclNew5

Para entender bien el algoritmo corra varias pruebas de escritorio.


Suponiendo que se presionó el número 7, inicialmente estará el puertoB = Rota = 0010 y el
PuertoC leerá 011, después del goto salir los valores serán Rota = 0010 y W=0100
La tabla de columna entrega W = 1 y la de fila W = 6
Entonces tecla1 = 1 + 6 = 7

Para poner a trabajar la tarjeta debe conectar un cable de 3 hilos entre la entrada del teclado
y la parte baja del puerto C

; ***********************************************************************
; PROGRAMA LEER UN TECLADO
;Tecnew73.HEX version 16f873

Héctor Fabio Rojas 3


Teclado

;Se escribe un número de 4 cifras y al presionar * cuenta


;Display Puerto B y lectura del teclado por puerto C RC0 a RC2
;FUNCIONA BIEN 22/09/2002
; ***********************************************************************

LIST P=P16F873
#include <p16f873.inc>
__CONFIG _XT_OSC & _CP_OFF & _WDT_OFF & _LVP_OFF
& _WRT_ENABLE_OFF & _BODEN_ON

; Cristal, sin codigo de protección, sin watch dog y sin prog en baja tension

;------------------------------------------------------------------------------------------------------------

contador equ 20h;primer reg. de propósito general


columna equ 21h
rota equ 22h
tecla1 equ 23h
carry equ 0
pc equ 02h
cuenta equ 24h
cuenta2 equ 25h
acc equ 26h;guarda el valor de w en rutinas
fila equ 27h
tecla2 equ 28h
decena equ 29
miles equ 2a
tecla3 equ 2b
cuentas equ 2c
cuentas2 equ 2d
dato1 equ 2e
centena equ 2f
SWITCH equ 30

;------------------------------------------------------------------------------------------------------------
; Rutina en caso de reset.

Reset org 0 ;La próxima


; instrucción se ubicará en la posición 00H
goto inicio

;*** MUESTRA LOS DATOS EN EL DISPLAY *****


; EN LOS DOS DIGITOS DE LA IZQUIERDA MUESTRA DECENA Y
;EN LOS DE LA DERECHA MILES.

Héctor Fabio Rojas 4


Teclado

display movwf acc


movf decena,0
movwf dato1
swapf dato1,1
movlw 0f0h
andwf dato1,1 ;borra parte baja
bsf dato1,0 ;pone en uno el bit
cero
movf dato1,0
movwf PORTB ;muestra unidades
call delay2 ;da tiempo para que
;aprecie mejor el Número

movf decena,0
movwf dato1
movlw 0f0h
andwf dato1,1
bsf dato1,1
movf dato1,0
movwf PORTB ;Muestra decenas
call delay2

movf miles,0
movwf dato1
swapf dato1,1
movlw 0f0h
andwf dato1,1
bsf dato1,2
movf dato1,0
movwf PORTB ;muestra unidades
nop ;da tiempo para que
call delay2 ;aprecie mejor el
;Número

movf miles,0
movwf dato1
movlw 0f0h
andwf dato1,1
bsf dato1,3
movf dato1,0
movwf PORTB ;Muestra miles
call delay2
movf acc,1
retlw 0

Héctor Fabio Rojas 5


Teclado

; ****Subrutina para leer el teclado****

lea movlw 001h


movwf rota ;rota = 00000001 b
bcf SWITCH,06 ;switch=1 si hay nuevo digito
probar movf rota,w
addlw 0f0h ;para ver el cinco
movwf PORTB ;pone en bajo la fila a leer

leer call delay


nop ;espera estabilice
;señal
nop
nop
movfPORTC,0 ;lee PORTC, W = PORTC
andlw07h ;Recorta a 4 cifras
xorlw07h ;Si igual Z = 1 (no
;oprimio tecla)
btfss STATUS,2 ;Verifica Z. salta si
;uno
goto salir ;Si hubo tecla salta
btfsc rota,03 ;Verifica posición del
;bit de fila
return ;Inicia otra vez la
;lectura
rlf rota,1
call display
goto probar ;prueba otra fila
return

salir call tablacol ;determina cual


;columna se esta leyendo.
movwf fila
movfrota,w
calltablafila
addwffila,w
movwf tecla1
xorlw0bh ;Si tecla1= 0B
;entonces cero
btfscSTATUS,2 ;para conseguir el
; cero

Héctor Fabio Rojas 6


Teclado

clrf tecla1
bsfSWITCH,6 ;pone en uno el switch
movftecla1,0
xorlw0Ch
btfssSTATUS,2 ;pone en ceros el
display
gotoprobar
clrf miles
clrfdecena
clrf tecla1
gotoprobar

tablacol addwf pc,1;Contador de programa + W


nop
retlw 3 ;Si W= 1 Haga W=3
retlw 2 ;Si W= 2 Haga W=2
nop
retlw 1 ;Si W= 4 Haga W=1

tablafila addwf pc,1


nop
retlw 9
retlw 6
nop
nop
retlw 3
nop
nop
nop
retlw 0

delay movwf acc


movlw 010h
movwf cuenta
movwf cuenta2
lbl1 decfsz cuenta,1
goto lbl1
decfsz cuenta2,1
goto lbl1
movf acc,0
retlw 0

Héctor Fabio Rojas 7


Teclado

delay2 movlw 003h ;retardo del display


movwf cuenta
movwf cuenta2

lbl2 decfsz cuenta,1


goto lbl2
decfsz cuenta2,1
goto lbl2
retlw 0

;**** ROTA LOS NUMEROS EN EL DISPLAY *********


correr swapf miles,0
andlw 0f0h
movwf miles
swapf decena,0
andlw 0fh
addwf miles,1
nop
nop
swapf decena,0
andlw 0f0h
addwf tecla1,0
movwf decena
return

;****** INICIA EL PROGRAMA PRINCIPAL *************

inicio bsf STATUS,RP0


bcf STATUS,RP1 ; pagina 1
clrf TRISB ; Se programa el
;puerto B como de salida
movlw b'00000110
movwf ADCON1 ;Puerto A es digital
movlw 0FFH
movwf TRISC ;Puerto c es de entrada
bcf STATUS,RP0 ;Regresa a pagina cero
clrf INTCON
clrf decena
clrf tecla1
clrf miles

lbl0 call lea ;lee el dato del teclado


movf tecla1,0
xorlw 0Ah ;compare tecla1 con 0A

Héctor Fabio Rojas 8


Teclado

btfsc STATUS,2 ;Presionaron * ?


goto aqui ;Si, vaya a Aqui
call display ;No, siga explorando el teclado
btfsc SWITCH,6 ;Hubo un dato?
call correr ;Rote el display y el nuevo dato
goto lbl0 ;pongalo en unidades

aqui call display


;Aqui se debe escribir el programa que se ejecutara despues de
;oprimir * (enter)

GOTO aqui
end

Héctor Fabio Rojas 9

S-ar putea să vă placă și