Ir ao conteúdo
  • Cadastre-se

PIC 16f628a comunicação serial.


Nazgulzeh

Posts recomendados

Olha só, eu estou entendo enviar e receber dados para um PIC 16f628a mas estou com problemas. Vejam esse codigo:


#include <16f628A.h>

#fuses HS,NOPROTECT,NOMCLR
#use delay (clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8) //,stream=OUT232

#define LED PIN_B4


void main(void){
while(TRUE)
puts( getc());
}

O que esta ocorrendo é que quando eu envio a letra "A" eu recebo "P" quando envio "=" recebo 0. Eu realmente não entendo o que esta ocorrendo. Me parece que o programa que envia e recebe os dados da serial envia num padrão onde tal byte é tal letra e o pic trabalha com outra codificação. Vejam esse outro codigo:


#include <16f628A.h>

#fuses HS,NOPROTECT,NOMCLR
#use delay (clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8) //,stream=OUT232

#define LED PIN_B4


void main(void){
int8 c;
boolean b = false;
output_high(LED);
delay_ms(1000);
output_low(LED);
delay_ms(1000);

while(1) {
c = getc();
putc(c);
if(c == 'P' || c == 'p' || c == 'A' || c == 'a'){
b = !b;
output_bit(LED, ;
}
}
}

Quando eu envio "=" ele executa a ação do if (acende ou apagar o led).

Alguém pode me dar uma luz? Obrigado.

OBS: programa que estou usando

http://www.rogercom.com/PortaSerial/PortaSerial.htm

Link para o comentário
Compartilhar em outros sites

Cara, utilizo o seguinte código e funciona OK:

#include <16F628A.h>
#use delay(clock=4000000)
#fuses INTRC,INTRC_IO,NOWDT,PUT,NOBROWNOUT,NOMCLR, NOLVP, CPD
#use rs232 (baud = 9600, xmit = PIN_A1, rcv = PIN_A0)
static char string_recebida[5];
void main(void)
while(true)
{
if(kbhit())
{
gets (string_recebida);
if (string_recebida[0] == 'R' || string_recebida[0] == 'r')
{
if (string_recebida[1] == 'T' || string_recebida[1] == 't')
{

Funciona certinho aqui..... Já verificou se seu cristal está ok? Tensão de alimentação estável? Capacitores nos pinos do cristal com o negativo são os recomendados? Espero que tenha ajudado.

Link para o comentário
Compartilhar em outros sites

Mas olha só isso...


#include <16f628A.h>

#fuses HS,NOPROTECT,NOMCLR
#use delay (clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)


void main(void) {
while(TRUE)
putc('T');
}

E olha o que foi enviado pra porta serial...

WWWWWWWWWWWWWW...muitos W ... WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWÿ

Se eu mandei T porque ele recebeu W? e isso sempre ocorre.

Link para o comentário
Compartilhar em outros sites

Talvéz o erro esteja no fato que você está recebendo em uma variável tipo inteiro e está fazendo comparações tipo string tente declarar a variável como char

char c; //ao invéz de int8 c;

e

c = getch(); //ao invéz de c = getc();

Hmm se n me engano já usei char também. Mas ainda tem o problema de enviar T e receber W, não tem nenhuma variável envolvida.

Link para o comentário
Compartilhar em outros sites

Consegui!

Então pessoal, valeu pela ajuda. =)

O problema é que como eu n estava usando um MAX232 eu precisava inverter a polaridade da conexão. Eu já tinha ate tentado mas sempre dava erro. A solução foi fazer uma conexão para receber e outra para enviar. O código ta ai, esperto que ninguém mais tenha que perder 10h procurando uma solução pra isso.


#include <16f628A.h>

#fuses XT,NOPROTECT,NOMCLR
#use delay (clock=4000000)
#use rs232(baud=9600, xmit=PIN_B2,INVERT, stream=OUT232)
#use rs232(baud=9600, rcv=PIN_B1,INVERT, stream=IN232)

#define LED PIN_B4

void main(void){
int8 c;
boolean b = false;
output_high(LED);
delay_ms(1000);
output_low(LED);
delay_ms(1000);
fprintf(OUT232,"start \n\r");
while(1) {
if (kbhit(IN232)){
c = getc(IN232);
putc(c, OUT232);
if(c == 'P' || c == 'p' || c == 'A' || c == 'a'){
b = !b;
output_bit(LED, ;
}
}
}
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!