Estoy trabajando con la red 485 y solo tengo un pequeño detalle con el pic Slave
Pic Maestro
#include <18f4550.h>
#fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
#use delay (clock=4M)
#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)
#BYTE TRISA=0X85
#BYTE PORTA=0X05
#use standard_io (b)
char in,dato,de,un;
#int_RDA
RDA_isr()
{
}
void recepcion()
{
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()
{
bit_clear(TRISA,0);
port_b_pullups (true);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
for(;;){
output_low(PIN_E2);
dato=input_b();
if(input(PIN_e0)==1){
output_high(PIN_E2);
delay_ms(100);
output_low(PIN_E2);
recepcion();
}
}
}
Esclavo
#include <18f2550.h>
#FUSES NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,NOFCMEN,NOIESO,XT
#use delay(clock=4M)
#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"
#BYTE TRISA=0X85
#BYTE PORTA=0X05
#use standard_io (b)
char in,dato;
#int_RDA
RDA_isr()
{
}
void main() {
port_b_pullups (true);
bit_clear(TRISA,0);
lcd_init();
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
output_low(PIN_C4);
for (;;) {
if(kbhit()){
output_high(PIN_C4);
dato=input_b();
lcd_gotoxy(1,1);
printf(lcd_putc
,"recibiendo=%c",in
); lcd_gotoxy(1,2);
printf(lcd_putc
,"Enviando=%c",dato
); output_low(PIN_C4);
}
}
}
el detalle radica en que tengo que enviarle 4 datos y hasta ese momento me contesta cuando se supone que esta por interrupcion lo cual deveria contestarme despues de que le llega el dato