Aqui de nuevo con una duda estoy realizando una comunicacion con dos micros, un 4550 y un 2550 lo cual consiste en lo siguiente:
4550 tiene un dip de 8 pines en el puerto b y dos display uno en el puerto A y otro en el D, al recibir un dato este despliega en hambos un numero que oscile dentro del 00 al 99, cuando quiero enviar los datos que hay en el puerto b tengo que oprimir un boton que esta conectado en el puerto e0 para que este envie los datos.
el 2550 tien tambien un dip en el puerto con la diferencia que este tiene una lcd, cuando recibe el dato del 4550 lo despliega en la Lcd, y al precionar el boton que tiene en el puerto C4, este envia los datos que estan en el Dip.
el problema cuando pruebo por separado los micros funcionan bien pero al conectar los dos no pasa nada y ademas hasta que no se le envia un dato a alguno de los dos pics no hacen nada aqui les dejo los codigo de los programas.
Pic18f4550
#include <18f4550.h>
#fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
#use delay (clock= 8000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#use standard_io (a)
#use standard_io (b)
#use standard_io (d)
#use standard_io (e)
void recepcion()
{
char in,de,un;
delay_ms(100);
de=in&0xf0;
un=in&0x0f;
switch(de)
{
case 0x00:
output_a(0xc0);
break;
case 0x10:
output_a(0xf9);
break;
case 0x20:
output_a(0xa4);
break;
case 0x30:
output_a(0xb0);
break;
case 0x40:
output_a(0x99);
break;
case 0x50:
output_a(0x92);
break;
case 0x60:
output_a(0x82);
break;
case 0x70:
output_a(0xf8);
break;
case 0x80:
output_a(0x80);
break;
case 0x90:
output_a(0x90);
break;
}
switch(un)
{
case 0x00:
output_d(0xc0);
break;
case 0x01:
output_d(0xf9);
break;
case 0x02:
output_d(0xa4);
break;
case 0x03:
output_d(0xb0);
break;
case 0x04:
output_d(0x99);
break;
case 0x05:
output_d(0x92);
break;
case 0x06:
output_d(0x82);
break;
case 0x07:
output_d(0xf8);
break;
case 0x08:
output_d(0x80);
break;
case 0x09:
output_d(0x90);
break;
}
}
void main()
{ char orden,dato;
for(;;){
dato=input_b();
if(input(PIN_e0)==0)
{
delay_ms(100);
}
else
recepcion();
}
}
Programa pic18f2550
#include <18f2550.h>
#FUSES INTRC_IO,NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,NOFCMEN,NOIESO
#use delay(Internal=8M)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
//------------ Pines del LCD ---------------------//
#define LCD_E PIN_C0
#define LCD_CK PIN_C1
#define LCD_DAT PIN_C2
//--------------------------------------------------//
#include "lcd3.c"
#use standard_io (a)
#use standard_io (b)
void main()
{
char orden,in;
lcd_init();
while(TRUE) {
delay_ms(100);
orden = input_b();
if(input(PIN_C4)==1) {
lcd_gotoxy(1,1);
printf(lcd_putc,"RX En Espera ");
putc(orden);
}
else{
in=getc();
lcd_gotoxy(1,1);
printf(lcd_putc,"Tx En Mando ",);
lcd_gotoxy(8,2);
printf(lcd_putc,"%c",in);
}
}
}
Dejo la simulacion tambien