Professional Documents
Culture Documents
Tema: Timer 0
2.1 Programar el PIC 16F628A para que funcione como un decodificador de teclado
matricial 4x4, emulando las funciones de un 74C922, en base a la siguiente
distribución
1 2 3
_
4 5 6
_
7 8 9
T
Aceptar 0 Limpiar
T
3. Objetivos:
4. Materiales
FUNDAMENTO TEÓRICO
Set de instrucciones reducidas (tipo RISC), pero con las instrucciones necesarias
para facilitar su manejo.
Frecuencia máxima: DX-20MHz
Memoria de programa flash palabra de 14 bits: 8KB
Posiciones RAM de datos: 368
Posiciones EEPROM de datos: 256
Puertos E/S: A,B,C,D,E
Juego de instrucciones: 35 instrucciones
Longitud de la instrucción : 14 bits
Arquitectura: Harvard
CPU: Risc
MPLAB X IDE: Es un Entorno de Desarrollo Integrado por sus siglas en Ingles (IDE)
implementado por la empresa de Microchip para desarrollar sistemas basados en
microcontroladores PIC. Su distribución es libre y gratuita y se puede descargar
directamente del sitio oficial de Microchip. Este editor es modular, permite seleccionar
los distintos microcontroladores soportados, además de permitir la grabación de estos
circuitos integrados directamente al programador.
Conformado por una matriz de pulsadores conformado por cuatro filas y cuatro
columnas, cuando no se ha oprimido ninguna tecla, no hay conexión entre filas y
columnas.
Cuando se oprime una tecla se hace una conexión entre la columna y la fila de la tecla.
Muchos teclados comerciales ya traen incluido su decodificador, caso contrario se
debe utilizar un chip decodificador.
INICIALIZACION LCD
Los módulos LCD (display de cristal líquido) solucionan estos inconvenientes y tienen
algunas ventajas adicionales como la facilidad que con que se pueden conectar a
microprocesadores y microcontroladores, sumado a la óptima presentación de la
información.
El display LCD para funcionar, debe ser inicializado, para lo que se debe recurrir a
una secuencia de instrucciones en un orden especifico que solo se realizarán una vez
para configurar el display.
El display puede funcionar con un bus de datos de 8 bits y con uno de 4 bits por lo que
su secuencia de inicialización es diferente según la forma en la que se va a trabajar.
Para esto existen protocolos por parte del fabricante del controlador de los displays,
que nos guían para inicializarlos, la inicialización de 8 bits se encuentra en el Anexo
1 y la correspondiente a 4 bits en el Anexo 2.
6. Diagrama de bloques
Fuente de Fuente de
Alimentación 5V alimentación 5V
BLOQUE
DE Uc Pic16F628A Uc Pic16F877A
5 6
ENTRADA BLOQUE
DECODIFICADOR CONTROL DE
TECLADO TECLADO 4X4 DISPLAY LCD SALIDA
MATRICIAL 16X4 LCD 16X4
4X4
Oscilador 4Mhz
PIC 16F877A
8. Diagrama de flujo
PIC 16F628
PIC16F877A
9. Cálculos
Calculo de Retardos:
PIC16F877A:
Retardo
movlw 0xC8 (1)
movwf t1 (1)
Ciclo1
movlw 0x0A (1) ;
movwf t2 (1)
Ciclo2
decfsz t2,1 (1, 2)
goto Ciclo2 (2)
decfsz t1,1 (1, 2)
goto Ciclo1 (2)
return (2)
PIC16F628A:
d20ms
MOVLW .255
MOVWF CONT0
LAZO1
MOVLW .18
MOVWF CONT1
LAZO2
DECF CONT1, 1
BTFSS STATUS, Z
GOTO LAZO2
DECF CONT0, 1
BTFSS STATUS, Z
GOTO LAZO1
RETURN
10. Programa
PROGRAMA DE DECODIFICACIÓN
list p=16F628A ;Tipo de procesador
INCLUDE "P16F628A.Inc" ;Librería con las direcciones del microcontrolador.
__CONFIG(0x3f18) ;define las caracteristicas que se van a usar
;programa principal
EMPEZAR
BCF PORTA,7 ;Apaga el bit DA
MOVLW 0xAA ;carga un valor
MOVWF AUX ;si se presiono o no una tecla
CALL DETECCION ;Llama a DETECCION
SUBWF AUX,1 ;analiza el valor extraido
BTFSS STATUS,Z ;para saber si es igual a AUX
GOTO EMPEZAR ;regresa a la direccion de
EMPEZAR
CALL CODIFICACION ;asigna un codigo a la tecla
presionada
MOVWF BOTON ;almacena el valor del codio
asignado
CALL SALIDA ;imprime el codigo presentado
GOTO EMPEZAR ;Subrutina DETECCION:
DETECCION
CLRF PORTB ;Limpia el Puerto B
BTFSS PORTB,7 ;Lee la Fila1 "1,2,3,A"
GOTO REBOTE ;Lamo a subrutina para eliminar
el rebote
BTFSS PORTB,6 ;Lee la Fila2 "4,5,6,B"
GOTO REBOTE ;Lamo a subrutina para eliminar
el rebote
BTFSS PORTB,5 ;Lee la Fila3 "7,8,9,C"
GOTO REBOTE ;Lamo a subrutina para eliminar
el rebote
BTFSS PORTB,4 ;Lee la fila4 "*,0,#,D"
GOTO REBOTE ;Lamo a subrutina para eliminar
el rebote
RETLW 0x00 ;Regresa con W=0x00
REBOTE
CALL d20ms ;Retardo de 20ms
BTFSS PORTB,7 ;Lee la Fila1 "1,2,3,A"
RETLW 0xAA ;Regresa con W=0x10
BTFSS PORTB,6 ;Lee la Fila2 "4,5,6,B"
RETLW 0xAA ;Regresa con W=0x10
BTFSS PORTB,5 ;Lee la Fila3 "7,8,9,C"
RETLW 0xAA ;Regresa con W=0x10
BTFSS PORTB,4 ;Lee la fila4 "*,0,#,D"
RETLW 0xAA ;Regresa con W=0x10
RETLW 0x00 ;Regresa con W=0x00
CODIFICACION
;Primera columna
MOVLW 0xF7 ;Activa la Columna 1
MOVWF PORTB ;agrega el valor de w PORTB
BTFSS PORTB,7 ;analiza si se presiono la tecla 1
RETLW 0x0D ;asigna el valor de 1
BTFSS PORTB,6 ;analiza si se presiono la tecla 6
RETLW 0x0E ;asigna el valor de 4
BTFSS PORTB,5 ;analiza si se presiono la tecla 7
RETLW 0x00 ;asigna el valor de 7
BTFSS PORTB,4 ;analiza si se presiono la tecla *
RETLW 0x0F ;asigna el valor de F
bitDA
;Subrutina RETARDO
d20ms
LAZO1
LAZO2
En el PIC16F877A se debe tomar en cuenta las características del LCD, es decir, se debe
adaptar las salidas de los puertos en la programación y mostrar los datos de manera
correcta.
13. Bibliografía
14. Anexos
Anexo1. Inicialización LCD con 8 bits
Anexo1. Inicialización LCD con 4 bits