Hola amigos, hace poco que he entrado en el mundo de los microcontroladores. He hecho muchos ejemplos con el ccs y fucionan bien. Ahora he intentado hacer un sistema de transmision con dos pic's 16f84A pero le he dado muchas vueltas y no consigo que funcione. Si alguien pudiera hecharle un vistazo se lo agradeceria mucho.
Funcionamiento.
El emisor.
Permanece durmiendo hasta recibir una primera interrupcion por el puerto RB0. Empieza a contar secuencialmente de 0 a 15 esperando 0,5 segundos en cada número y reflejandolo en el puerto A.
Al recibir la segunda interrupción transmite el numero actual mediante rs232 por la patilla RB1. Hago una conversion de tipos para poder utilizar el putchar.
El receptor.
Permanece escuchando en la patilla B2. Al recibir un caracter lo convierte a numero entero y lo compara con su referencia. Si es igual, activa la patilla RB7.
Supongo que habra grandes fallos ya que soy novato en C tambien.
EMISOR
#include <16F84A.H>
#use delay(clock=4000000)
#fuses XT,NOWDT
#use RS232(BAUD=1200, BITS=8, PARITY=N, XMIT=PIN_B1, RCV=PIN_B2)
int cont_int=0; //contador de interrupcion
int contador; //contador principal (0000,0001,0010,0011,.. en el puerto A)
#int_EXT
EXT_isr()
{ enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
#ASM
goto 0x0080 //apunta al "if" de abajo pero no sabia como hacerlo
#ENDASM
}
void main()
{
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
while(true){
sleep();
if (cont_int==0){
cont_int=1;
for (contador=0,contador<16,contador++){
PORTA=contador; //Supongo que el PORTA esta mal.
delay_ms(500);}
}
else if(cont_int==1){
char contaletra;
contalletra=(int)contador; //conversion de tipo para poder utilizar putchar
putchar(contaletra);
cont_int=0;}
else cont_int=0;}
}
RECEPTOR
#include <16F84A.H>
#use delay(clock=4000000)
#fuses XT,NOWDT
#use RS232(BAUD=1200, BITS=8, PARITY=N, XMIT=PIN_B1, RCV=PIN_B2)
char letra;
int referencia; //referencia del receptor
void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(true){
letra=getchar();
int numero=(char)letra; //conversion de tipo
if (numero==referencia) OUTPUT_BIT(PIN_B7,1);}}
Espero que puedan ayudarme, muchas gracias.