|
|
Teclado matricial 4x4 | LCD 2x16 | Display 7 segmentos | Grabacion EEPROM interna |
Comunicaciones rs232 | Read / Write Flash de código |
Las rutinas pregeneradas en ensamblador se utilizan para ahorrarse tiempo de diseño en generar un código que ya han hecho otros o que puedes generar tu mismo y necesitarlo en mas de un proyecto y así no tener que volver a escribirlo o diseñarlo.
La extensión de archivo por defecto en rutinas es .lib y contienen únicamente las instrucciones necesarias para el trabajo al que se destinan.
Para incluir una sub-rutina o librería en nuestro programa tendremos que usar la directiva include de la manera siguiente;
include "rutina.lib"
Una vez hecho esto, será como si tuviésemos las líneas de código contenidas en la librería, incluidas en el listado principal del programa .asm y accederemos a las partes de la librería utilizando la llamada a subrutinas "CALL" ya que todas las funciones contenidas en las librerías retornan con la instrucción "RETURN" o similar que devuelven el proceso del programa a la posición siguiente a la instrucción "CALL"..
TEORIA |
|
|||||||||
|
||||||||||
RUTINA |
La siguiente librería configura las salidas y entradas para usar el teclado escanea las teclas y si es pulsada alguna retorna el valor de tecla en modo hexadecimal para ser mostrado directamente en un display LCD. Las variables y subrutinas utilizadas son:
KB_Port
;Inicializa la puerta B para las entradas del Ahora para saber que tecla esta siendo pulsada necesitamos escanear el teclado, y esto se consigue mediante la siguiente rutina que consiste en ir poniendo una a una las líneas RB0 a RB3 (conectadas a las filas del teclado) a nivel bajo ya que estas salidas tienen conectada la resistencia de polarización a Vcc y por lo tanto están siempre a nivel lógico alto. Cada vez que una fila se pone a nivel bajo se hacen 4 comprobaciones para ver si una de las cuatro columnas se a puesto a nivel bajo y así saber la tecla pulsada. KB_Scan
;Escanea el teclado Ultima_Tecla ;comprueba si se a escaneado todo el teclado
MOVLW d'17'
;Carga W con el n£mero de Teclas + 1.
MOVF Tecla,w
;pone en w el numero contenido en la variable
La parte de código pintada en amarillo puede ser eliminada sin ningún problema si no queremos que el pic tenga que esperar a que soltemos la tecla para continuar con su ejecución normal.
Solo usaremos las salidas correspondientes a las filas del teclado y de RB0 a RB4 serán configurables como salida o entrada mientras que RB4 solo será entrada. Para saber la tecla que se esta pulsando tendremos que configurar una línea como salida y ponerla a nivel alto y las demás como entrada y comprobar el valor de las entradas para saber que columna se a pulsado.
Los diodos utilizados son del típico modelo 1N4148. hay que tener especial cuidado en no programar mas de una puerta como salida ya que podría destruirse algún diodo debido a una circulación excesiva de corriente en los mismos. Esto es debido a que el circuito no tiene resistencias de limitación para protegerlos en estos casos, pero es totalmente viable el uso de ellas, así que si queremos usar las puertas para controlar el teclado y también para alguna otra cosa podemos poner unas resistencias de 2k2 en serie con las puertas RB0 a RB4.
En breve tendré disponible una rutina para esta configuración de teclado.
|
|||||||||
LCD 2x16 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TEORIA |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RUTINA |
Los datos o comandos a enviar al LCD los meteremos en el acumulador W antes de hacer la llamada a cualquiera de las rutinas siguientes.
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
Nota: Esta rutina solo funciona correctamente con LCD's rápidos, osea los que son un poco mas caros jejej, esto lo descubrió Taiteki que fue uno de los que la probaron y les falló, la solución consiste en usar un LCD bueno o meter delays entre cada llamada a la rutina del LCD. espero que no tengáis muchos problemas con ella. Suerte.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
RS232 |
Conexionado para un conversor de TTL a rs232 modelo max232
|
|||||||||
![]() |
||||||||||
Read / Write Flash de código (16F87X solo) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Flash |
La memoria FLASH de un pic16F87X dependiendo del modelo puede alcanzar 8K palabras de 14 bits cada una con lo que el direccionamiento será de 13 bits y el dato de 14 bits. Para direccionar tal cantidad de bits es necesario usar dos registros de 8 bits concatenados con los registros que se usaban en la eeprom (EEADR,EEDATA) para el direccionamiento y otros tantos para el dato, los registros son los siguientes y están ubicados en el banco 2.
Los registros para configurar y inicializar los procesos de grabación / lectura son EECON1 y EECON2, ambos ubicados en el banco 3.
La rutina es la siguiente:
y para usarla, una vez definidas las variables, habrá que seguir estos pasos...:
La rutina es la siguiente:
Como puede verse en el código fuente, para la secuencia de escritura se deshabilitan las interrupciones generales ya que esto podría cortar el proceso de escritura si saltase alguna interrupción es ese momento, también puede verse la secuencia especial de escritura compuesta por 5 instrucciones. Para usar esta subrutina seguir estos pasos:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Robotica & µControladores Pic
ionitron · 2001-2003