Hola!
Fijate si conseguis el 16f628 o el 16f873. Son muy comunes y tienen modulo UART. De ese modo podes implementar un puerto serie por hardware y otro por software.
Suerte!!
Gracias compañero por la sugerencia, de todas maneras tampoco hay esos modelos, estan agotados, tengo que esperar como una semana a que lleguen, así que mientras llegan estoy simulando.
Quiero comunicar dos dispositivos full duplex, por el momento estoy empezando y uso el 16F876, un puerto por hardware (pines C6 y C7) y el otro por software (pines B0(int) y B1), la interrupción RDA funciona perfecto, pero tengo problemas con la EXT del RB0, ya que la interrupción no funciona correctamente y no recibe los datos como debe. Todo lo estoy probando con proteus y el virtual terminal
Este es el codigo...
#include <16f876.h>
#include <string.h>
#use delay(clock=4M)
#fuses NOWDT,NOPUT,NOPROTECT
#use rs232(STREAM=ALARMA, baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)
#use rs232(STREAM=MODEM, baud=9600, xmit=PIN_B2, rcv=PIN_B0, parity=N, bits=8)
char string_alarma[16];
char string_modem[16];
int1 kbhit_alarma=0; // Para saber si llego dato desde la alarma.
int1 kbhit_modem=0; // Para saber si llego dato desde el modem.
#int_RDA
void rda_isr()
{
gets(string_alarma);
kbhit_alarma=1;
}
#int_EXT
void ext_isr()
{
gets(string_modem);
kbhit_modem=1;
}
void main(void)
{
SET_TRIS_B(0b00000001);
SET_TRIS_C(0b10000000);
ext_int_edge(H_TO_L);
enable_interrupts(int_RDA);
enable_interrupts(int_EXT);
enable_interrupts(GLOBAL);
while(1)
{
while(kbhit_alarma==0&&kbhit_modem==0){} //Espero a que llegue dato desde algun dispositivo.
if(kbhit_alarma)
fprintf(MODEM,"\n\rEl dato de la alarma fue: %s",string_alarma);
if(kbhit_modem)
fprintf(ALARMA,"\n\rEl dato del modem fue: %s",string_modem);
kbhit_alarma=0;
kbhit_modem=0; // Reinicio bandera para proxima espera.
}
}
La idea es escribir en un virtual terminal y que el otro lo reciba y viceversa, pero solo uno escribe y funciona (int_rda) y el otro no (int_ext).
Gracias compañeros por las sugerencias, anexo el esquemático con el cof, hex y demás por si quieren probarlo, no se ve complicado pero bendita ignorancia
...disculpen tantas preguntas pero llega un momento donde uno se traba