Ir ao conteúdo

RS232, nãp funciona (pic 16f628a ccs)


arh

Posts recomendados

Postado

boa tarde pessoas, to aqui lendo uns livros e vendo uns videos sobre a comunicação seiral, na teoria, sei algumas coisas ja, ai fui passar pra pratica e ta dando algum problema.

fiz este codigo aqui, o mesmo compila sem erro, mas na hora de testar no proteus nao acontece nada.

segue o codigo:

 #include <16f628a.h>
#fuses intrc_io, nomclr, nowdt, nolvp
#use delay (clock = 4000000)

//----------------------------------------------------------//

#use fast_io (a)
#use fast_io (
#use rs232(baud=9600,parity=n,xmit=PIN_B2,rcv=PIN_b1, bits=8)
//----------------------------------------------------------//
char x [4];
int i;
void main ()
{
set_tris_a (0b11100000);
set_tris_b (0b00000010);
setup_comparator (nc_nc_nc_nc);


while (1)
{
x[0] = "a";
x[1] = "b";
x[2] = "c";
x[3] = "d";

for (i=0; i<4; i++){
delay_ms (1000);
putc (x[i]);
}
}
}

nao da nada no proteus, nem sinal que o pino rb2 faz alguma coisa.

Postado

Como você montou no proteus? Está usando o que para testar a chegada dos caracteres?

Nao estou nem com o compilador e nem com o simulador em maos agora, mas tente alterar a linha:

putc (x);

para:

printf ("\f%u\n\r", x[1]);

Quando eu chegar em casa, testo.

Falou

Postado

rapaz, consegui +/- aqui, no proteus ficou assim: IeO6F.jpg

dei uma mudada no codigo aqui e consegui, enviar. mas fexei uma tela que apareceu tipo o DOS, onde mostra o caractere, e nunca mais consegui abrir.

segue o novo codigo: (vou testar o seu agora.)

#include <16f628a.h>
#fuses intrc_io, nomclr, nowdt, nolvp
#use delay (clock = 4000000)

//----------------------------------------------------------//

//#use fast_io (a)
//#use fast_io (
#use rs232(baud=9600,parity=n,xmit=pin_b2,rcv=pin_b1, bits=8)
//----------------------------------------------------------//
char x = 'a';
int i;

void main ()
{
//set_tris_a (0b11100000);
//set_tris_b (0b00000010);
setup_comparator (nc_nc_nc_nc);


while (1)
{
if (!input(pin_a7))
{
delay_ms (1000);
putc (x);}
}

}

mateuzim, to conseguindo +/- aqui brother hahahaha

consegui abrir a tal tela de novo, agora ta massa.

so uma curiosidade, voce coloco assim

printf ("\f%u\n\r", x[1]);

o \f seria apagar o que esta escrito

o %u seria a variavel

\n ( no pc seria pra pular uma linha) nao entendi

\r nao sei.

Postado

Isso mesmo, mas para ficar completo, o TXD você liga no RX do PIC. Os pinos RTS e CTS você interliga os dois.

Nao se esqueça de clicar duas vezes no terminal do proteus, essa janelinha preta (com a simulaçao parada), e conferir se está configurado para 9600 como no código.

A janelina tipo DOS é chamada de terminal, para abrir de novo, quando estiver simulando, clica com o botão direito sobre a janelinha preta (componete) e escolhe a última opção.

/n você pula linha

/r você colta o cursor.

Nem sempre é necessário usar assim. Eu uso quando quero imprimir sempre no mesmo lugar da linha.

EDIT:

Modifiquei:

#include <16F628A.h>

#FUSES INTRC_IO
#FUSES NOWDT
#FUSES PUT
#FUSES NOPROTECT
#FUSES BROWNOUT
#FUSES NOLVP
#FUSES NOCPD

#use delay(clock=4000000)

#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1, ERRORS)

char x[4][2] =
{
"a",
"b",
"c",
"d",
};

int i;
void main ()
{
setup_comparator (nc_nc_nc_nc);

while (1)
{
for (i=0; i<4; i++)
{
printf ("%s\n\r", x[i]);
delay_ms (1000);
}
}
}

Resultado:

16F6238A_serial_envia_simples.png

Falou

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...