En primer lugar, decirte que ese PIC que has mencionado es perfecto para hacer una comunicación serie y bastantes cosas más. No en vano es el más famoso que hay.
Aarggg, acabas de pinchar a tu capo en hueso.
No tengo ni idea de ASM, medio me manejo en Basic y C, pero ni puñetera de ASM.
No obstante, seguimos avanzando con tu proyecto, seguro que algún capo real del ASM se ASoMa por aquí y aporta su ayuda.
A ver, dices que cómo puedes conectar tu teclado al PIC para que reciba los caracteres. ¿Qué teclado tienes conectado?, ¿es matricial, serial, de PC, de calculadora?
Tendrás que describir mejor tu proyecto para seguir avanzando. Las dudas y las alternativas son tantas que sería necesaria una mayor concreción.
No conozco el protocolo RS232 a bajo nivel, pero creo recordar que una comunicación serie lleva su bit de start, su trama de datos, tipicamente un byte con 8 bits, y su bit de stop. De todas formas, no creo que eso tenga que preocuparte, ya se encargará el PIC de hacerlo.
Ah, claro, en ASM quizás tengas que tenerlo en cuenta , en C sería tan fácil como esto:
Codigo:
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N)
void main() {
printf ("Esto está siendo enviado por el puerto serie"
;
}
Bueno, venga, mójate y explica con el mayor número de detalles que puedas en qué consiste tu proyecto.
Vale, pues en ese caso, tendrás que conectar el MAX232 al Pic como te dije en otro post y el teclado de la manera que puedes ver aquí:
http://www.x-robotics.com/rutinas.htm#Teclado%20Matricial%204x4
Tu teclado tiene una columna menos, pero supongo que el esquema es suficientemente clarificador. Claro, tú gastarás un pin menos.
Para programar un PIC se utiliza un fichero HEX que contiene los Bytes del programa. A ese fichero HEX se llega compilando desde un lenguaje de programación de alto nivel, o ensamblando desde ASM, pero el resultado será un fichero HEX en cualquier caso.
Por ello, si te mueves bien en C, será seguramente lo más recomendable.
A grandes rasgos, tu programa debería tener un bucle infinito en el que espere mientras no haya una pulsación de tecla. Si esa tecla se pulsa, se enviarán los datos por el puerto serie y vuelta a empezar.
Creeme, es un programa sencillito. Te dejo algunos ejemplos aquí que pueden darte inspiración.
En este primer ejemplo se explora el teclado y se envía la tecla pulsada a una pantalla LCD:
Codigo:
#if defined(__PCB__)
#include <16c56.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#elif defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#endif
#include <lcd.c>
#include <kbd.c>
void main() {
char k;
lcd_init();
kbd_init();
lcd_putc("fReady...
");
while (TRUE) {
k=kbd_getc();
if(k!=0)
if(k=="*")
lcd_putc("f");
else
lcd_putc(k);
}
}
Y en este otro se dialoga con el PC vía puerto serie, se reciben caracteres y se envían, por lo que será bastante ilustrativo:
Codigo:
#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#endif
#include <stdlib.h>
#include <input.c>
void main() {
long int l;
float a, b;
while(TRUE) {
printf("
Enter first number: ");
a=get_float();
printf("
Enter second number: ");
b=get_float();
printf("
A= %E
", a);
printf("B= %E
", b);
printf("
a + b = %E", a + b);
printf("
a - b = %E", a - b);
printf("
a * b = %E", a * b);
printf("
a / b = %E
", a / b);
if(a <= b)
printf("a<=b, ");
else
printf("a>b, ");
if(a < b)
printf("a<b, ");
else
printf("a>=b, ");
if(a == b)
printf("a==b
");
else
printf("a!=b
");
l = (long int)a;
printf("
(long)a = %lu ", l);
a = (float)l;
printf("
(float)(long)a = %E
", a);
}
}
Bueno, ¿a qué estás esperando?, quiero ir viendo ya por aquí tu código...