quarta-feira, 8 de setembro de 2010

usando RS485

programa do mestre

//****************************************************************************************************************************************************
// comunicação rs-485
//
// Data: 14/12/2007
// Autores: Aguivone
// descrição : quando receber a palavra "valor" acende um led.
//****************************************************************************************************************************************************
#include <16F628A.h>
#fuses NOWDT,XT,PUT, NOPROTECT,NOBROWNOUT, NOLVP, NOCPD,NOMCLR
#use delay(clock=4M)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,enable=PIN_B0)
#locate rx_reg = 0x1A
#include <string.h>
char rec[7],palavra[7]={"valor"},caracter;
int n,i;
//......................................
// interrupção
//......................................
#int_RDA
void recebido(void)
{
caracter = rx_reg;
if(caracter =='*')
{
n=2;
rec[i]=0;
}
if(n==1)
{
rec[i]=caracter;
i++;
}
if(caracter =='#')
{
n=1;
i=0;
}

}

//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
// rotina principal
//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
void main(void)
{
port_b_pullups(FALSE);
enable_interrupts(global);
enable_interrupts(int_rda); //interrupção de recebimento
for(;;)
{
if(n==2)
{
disable_interrupts(global);
if(strcmp(palavra,rec)==0)
{

output_high(PIN_B4);
delay_ms(500);
output_low(PIN_B4);
rec[0]=0;
rec[1]=0;
rec[2]=0;
rec[3]=0;
rec[4]=0;
rec[5]=0;
rec[6]=0;
n=0;
i=0;
enable_interrupts(global);
}
n=0;
i=0;
enable_interrupts(global);
}
else
{


}
}
}

programa do escravo:


// ****************************************************************************************************************************************************
// comunicação rs-485
//
// Data: 14/12/2007
// Autores: Aguivone
// descrição: envia a palavra "#valor*" a cada 1 segundo,
// ****************************************************************************************************************************************************
#include <16F628A.h>
#fuses NOWDT,XT,PUT, NOPROTECT,NOBROWNOUT, NOLVP, NOCPD,NOMCLR
#use delay(clock=4M)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,enable=PIN_B0)
#locate rx_reg = 0x1A
 #include <string.h>

//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
// rotina principal
//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
void main(void)
{
port_b_pullups(FALSE);
disable_interrupts(global);
for(;;)
{
printf("#valor*");
delay_ms(1000);
}
}
//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

9 comentários :

  1. Olá à todos. Conheci o blog hoje, e me serviu muito. No código acima está faltando " #include ", na linha onde tem um " #include" sozinho.
    Fora isso o código funciona direitinho.
    Obrigado ao autor, e continue compartilhando conhecimento, pois ajuda muita gente.

    ResponderExcluir
  2. O include é string.h , é uma falha do blogger que gera isso.Valeu José Ricardo!

    ResponderExcluir
  3. Bom dia achei o blog muito interessante parabéns, gostaria de saber se tem como postar um exemplo de comunicação rs485 entre dois PIC's um mestre e um escravo através de botões, tipo pressionei o mestre e o escravo executa.

    ResponderExcluir
    Respostas
    1. Aqui no blog tem um exemplo parecido, a proposito basta aplicar o que está neste exemplo para fazer isso!

      Excluir
    2. Boa noite Anônimo não consegui encontrar o exemplo que você mencionou, você teria como fazer as modificações nesse código para a aplicação que estou querendo, pressionei um botão no mestre o escravo recebe, executa e informa ao mestre o estado em que se encontra, ou seja habilitado ou desabilitado.

      Excluir
    3. Me mande um e-mail acho que tenho um exemplo aqui, aguivone@ibest.com.br

      Excluir
  4. Oi anônimo te mandei um email. carlosbarata@bol.com.br

    ResponderExcluir
  5. Bom dia anônimo pode enviar o arquivo que enviou para o carlos inter ship para mim também ?? obrigado
    aca.cafe@bol.com.br

    ResponderExcluir

olá,digite aqui seu comentário!