Buen día amigos del foro me dirijo a ustedes que son mi única ayuda en este momento ya que lo he intentado todo.
es lo siguiente:
1. necesito realizar una comunicación entre un pic maestro y varios pic esclavos por medio de rs485 en ccs ya que este protocolo permite definir unos ID para cada pic y de esta forma se pregunta al pic la informacion deseada por su ID que lo identifica.
2. el rs485 es la comunicación que me sirve debido a sus características de distancia y que el ruido no la afecta.
por el momento solo quiero prender un led cuando mi pic esclavo reciva el dato de mi pic maestro.
3. estos codigos no me funcionan y no se porque.
este es el codigo del maestro:
Este seria el codigo del esclavo:
voy a subir imagenes de mi circuito. ...
este es la imagen de mi sistema
es lo siguiente:
1. necesito realizar una comunicación entre un pic maestro y varios pic esclavos por medio de rs485 en ccs ya que este protocolo permite definir unos ID para cada pic y de esta forma se pregunta al pic la informacion deseada por su ID que lo identifica.
2. el rs485 es la comunicación que me sirve debido a sus características de distancia y que el ruido no la afecta.
por el momento solo quiero prender un led cuando mi pic esclavo reciva el dato de mi pic maestro.
3. estos codigos no me funcionan y no se porque.
este es el codigo del maestro:
Código:
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
#use RS232(baud=9600,xmit=PIN_D1,rcv=PIN_D2,stream= PC)
#define RS485_ID 0x20 //ID de identificacion en la red
#include <rs485.c>
#use standard_io(C)
#use standard_io(D)
#include <stdio.h>
#include <stdlib.h>
#include <input.c>
#byte port_a=5
#byte port_b=6
#byte port_e=9
int8 dato;
char data;
void main()
{
set_tris_a(0x00);
set_tris_b(0xFF);
set_tris_e(0x00);
port_a=0x00;
port_b=0x00;
port_e=0x00;
rs485_init();
while(true)
{
data=getc(PC);//recibe dato que envia el pc por rs232
if(data==\'1\')
{
dato=1;//dato que envio
output_high(PIN_D0);// pongo en alto para transmitir
delay_ms(30);
rs485_wait_for_bus(FALSE);
rs485_send_message(0x40,8,dato); // linea que envia al pic que tiene el ID 0x40 y envia el dato #1
}
}
}
Este seria el codigo del esclavo:
Código:
#include <16f877a.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#define RS485_ID 0x40
#include <rs485.c>
#use standard_io(C)
#use standard_io(D)
#include <stdio.h>
#include <stdlib.h>
#byte port_a=5
#byte port_b=6
#byte port_e=9
int dato;
void main()
{
set_tris_a(0x00);
set_tris_b(0x00);
set_tris_e(0x00);
port_a=0x00;
port_b=0x00;
port_e=0x00;
rs485_init();
output_low(pin_D0); // pongo en bajo para recibir
while(true)
{
if(rs485_get_message(dato,0))
{
output_high(pin_E0);
delay_ms(1500);
output_low(pin_E0);
}
}
}
voy a subir imagenes de mi circuito. ...
este es la imagen de mi sistema
Adjuntos
Última edición por un moderador: