Página 1 de 1

ENVIANDO DADOS PELA SERIAL

MensagemEnviado: 09 Mai 2008 16:16
por amboni
Boa tarde caro colegas,

estou com um problema no envios de dados pela comunicação serial,
tenho que enviar um informação pela serial, mais estava enviando com printf(" ",), depis que implementei o timer zero percebi que esta escrita demora muito tempo e acaba dando problema na escrita, acredito que seja por causa do estouro do timer..... vi alguns comentarios a respeito do PUTC mais nao consegui fazer funcionar,
seuge exemplo....

IF (SERIAL==0)
{
SERIAL++;
PUTC(UNIDADE);
PUTC(DEZENA);
PUTC(CENTENA);
}



centena dezena e unidade sao variaveis de 8 bits resultantes de uma conversao....

amboni

MensagemEnviado: 09 Mai 2008 16:48
por tcpipchip
Sera que nao esta dando OVERRUN?

MensagemEnviado: 09 Mai 2008 18:43
por phophollety
Sempre comece com mais infos, qual processador é, qual compilador, qual versão e qual ferramenta de debug você tem( se tiver)

MensagemEnviado: 12 Mai 2008 10:48
por ze
(a..a...) desgulbe. é que dô bêio (aaa....) resvriado (VR!) e dão pozzo comendar buito dão.(aaa...a....)acho que beguei uba gribe porgue viguei navegando bor outros vóruns enguando o 51 estava vora do ar. (rzrz)

a rotina printf é meio cavalar mesmo. tente criar uma ultratrisupermuito simples só pra transmitir 1 byte. p. ex. TXREG=dado e aguarde o flag de txok. E deixe a complexidade pra quem recebe (pc??) se virar e expor ao mundo.
aaa.aabrç
aaatchim!!!!!!

MensagemEnviado: 12 Mai 2008 11:11
por phophollety
Uma boa maneira é...

Crie um vetor com n bytes, que queira..

Vá cololocando neste vetor os seus bytes a serem enviados...

crie uma função que você passa como argumentos o endereço do início dos bytes do ventor (ponteiro &vetor[0] ) e o número de bytes a serem enviados, assim conforme envia, incrementa o ponteiro e envia o próximo, até o número de incrementos do ponteiro ser igual o número de bytes enviados... assim você consegue fazer uma espécie de print sem judiar da memória... fica +- assim..

enviaStringSerial(&vetorSerial[0], 4);

vai enviar 4 bytes, começando do vetorSerial[0] e terminando no vetorSerial[3]...

e dentro da função enviaStringSerial, você chama ou que envia byte a byte..


enviaByteSerial(byte);

Assim pode enviar quando quiser, byte a byte ou um monte deles de uma vez só.. funciona super bem, pois você pode tanto enviar pelo módulo dentro do enviaByteSerial quando criar uma rotina que controla o i/o por tempo e fazer o envio por soft...