Página 1 de 1

Rs232 USART e Buffer!!!

MensagemEnviado: 25 Jul 2007 21:30
por Bardelli
Olá all

Tenho uma dúvida a tirar.

QUando se usa a Usart, tem como o PIC armazenar tudo em um buffer, sem que ele interrompa aquilo que ele está fazendo?, tipo como se fosse um processamente paralelo?.

abraços

Re: Rs232 USART e Buffer!!!

MensagemEnviado: 26 Jul 2007 08:13
por andre_luis
Voce está dando a descrição do tratamento da recepção via interrupção.
Para transmissão, fica mais fácil ainda, podendo ser feito no main().


+++

MensagemEnviado: 26 Jul 2007 08:25
por fabim
não.. o pic não tem fifo.
E não sei se outro uC tenha esta função.
O que acontece é que como o andre falou, se chegar dado valido o buffer de 8 bits estiver com dado valido, acontece uma interrupção.
Aí voce vai ao registrador e joga o dado no lugar devido.
Mais as vezes á sofrimento atoa, porque não usar tipo um 12F629 pra fazer esta função custa R$4,00 por aí.

Abraços
Fabim

MensagemEnviado: 26 Jul 2007 09:51
por Bardelli
Essa realmente foi minha ideia, utilizar um outro PIC, mas depois vem a pergunta: Qual é a melhor maneira de passar as informações de um PIC para OUTRO de forma mais rápida???.

abraços

MensagemEnviado: 26 Jul 2007 09:57
por fabim
da forma que voce preferir.
Vai funfar +/- assim.
O pic ligado a usart vai ficar pegando os dados que chegam, e guardando na ram, quando a ram encher ele vai sobre escrever da primeira casa..

quando o master quiser saber se tem dados, etc.

Voce pode fazer por SPI,i2c etc. ai vai do clock e da maneira que voce precisa.

Abraços

Fabim

MensagemEnviado: 26 Jul 2007 10:08
por zielpunkt
Bardelli,

Dependendo do modelo (16F com AUSART, por ex) vc tem disponível um buffer fifo de 2 bytes que é o RCREG. Ao terminar de receber um eventual terceiro dado (byte), dá erro e vc perde este último. Dependendo do que pretende receber, pode verificar continuamente a existência de dados no RCREG, sem sair do corpo do programa e sem precisar usar interrupção de rx. Ou seja, se estiver esperando apenas um controle para posterior início de troca de dados entre aplicações, fica viável. Do contrário, precisando receber pacotes maiores de dados, tem que implementar um buffer (circular?), mas ai o sistema precisa ter como prioridade o canal serial.


É isso.

MensagemEnviado: 26 Jul 2007 10:44
por andre_luis
Bem lembrado.

Como este recurso do FIFO built-in do da USART do PIC não é padrão para todas as UARTs de outros uCs, a gente acaba o esquecendo e raciocinando de modo convencional para todas as plataformas de HW.

É um Buffer realmente pequeno ( poderia ser maior ), mas parece que a finalidade dele é mais de previnir a perda de dados do que propriamente receber frames.


+++

MensagemEnviado: 27 Jul 2007 12:15
por Vonnilmam
ola´,


eu já tive um problema parecido, a solução foi utilizar um buffer rotativo...
O mesmo fica no loop do programa principal e voce irá criar todas as variaveis que irão receber os dados provenientes do RX e envialos atraves dessas variaveis (o tamanho depenedera de sua necessidade) ao buffer, quando a rotina excecutar esse buffer irá descarregar tudo de uma só vez, ou somente as que forem carregadas, esse controle poderá ser feito através de flags em cada registro dentro do buffer...