Como enviar pela serial sem PUTC() ?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Como enviar pela serial sem PUTC() ?

Mensagempor andre_luis » 09 Fev 2007 09:58

Pessoal,

Estou usando o CCS v3.249.

E a aplicacao em questão é tão crítica, que um atrazo da ordem de 1 ms pode ser desastroso.

Por isso, estou pensando em enviar bytes pela UART sem o Putc(), mas gerenciando o envio atravéz de manipulação dos registradores de Interrupção. Alguem possui algum trecho de código onde isso já tenha sido implementado ?

Agradeço antecipadamente....

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor KrafT » 09 Fev 2007 10:23

#byte TXREG = endereco_do_txreg


...

TXREG=valor;
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor andre_luis » 09 Fev 2007 10:41

Ok, Kraft...mas como eu posso saber se o byte já foi enviado? Voce usou interrupção ou verificou algum registrador ? Qual dessas solucoes voce aconselharia ?

Brigado.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor KrafT » 09 Fev 2007 10:46

Pode, pois a a int de buffer vazio #INT_TBE pode ser usado para enviar o byte e ou o proximo byte.

Para não usar #INT_TBE, use #int_global geral para ganhar velocidade, só que aí tem que salvar o contexto e ver qual a int na mão.


Código: Selecionar todos
#int_global

isr() {     // Will be located at location 4

   #asm

   bsf   isr_flag

   retfie

   #endasm

}

"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor Rinaldo » 09 Fev 2007 10:50

Já usei a rotina abaixo e funcionou muito bem

TRMT = 0 FULL
TRMT = 1 Empty


TRMT bit 1 do TXSTA


void putch(unsigned char dado)
{
while(!TRMT)
continue;
TXREG = dado;
}

Rinaldo
Rinaldo
Nibble
 
Mensagens: 56
Registrado em: 15 Out 2006 23:05

Mensagempor andre_luis » 09 Fev 2007 10:57

Vou testar as 2 solucoes ( Interrupcao e pesquisa ).
Obrigado.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x