Página 1 de 1

Dúvida com USART !!! [RESOLVIDO]

MensagemEnviado: 29 Out 2009 08:07
por Andre_Cruz
Estou programando com o compilador hitech e um PIC 16F628A com oscilador externo de 20MHz para enviar dados pro PC, preciso enviar rapido os dados e o sprintf leva mais ou menos 15mS.
Estou tentando fazer da maneira que é feito em ASM.

Código: Selecionar todos
void main() {
   
   TRISA = 0b00000000;   //TUDO COMO SAIDA
   TRISB = 0b00000011;      

//INTCON

   GIE = 0;                  //CHAVE GERAL DESLIGADA
   PEIE = 0;                  //DESABILITADA INT. DE PERIFERICOS
   T0IE = 1;                  //INT. DE TIMER0 HABILITADA
     INTE = 1;                  //INT. DE GPIO2 HABILITADA
   RBIE = 0;                  //DESABILITADA INT. DE MUDANCA EM PORTB
   T0IF = 1;                  //FLAG DA INT. DE TIMER0
    INTF = 0;                  //FLAG DA INT. DE GPIO2
   RBIF = 0;                  //FLAG DA INT. DE MUDANCA EM GPIO

//OPTION_REG

   RBPU = 1;                  //PULL UP DESABILITADO
   INTEDG = 1;                  //0 BORDA DE SUBIDA 1 BORDA DE DESCIDA
   T0CS = 0;                  //TIMER0 INCREMENTADO PELO CLOCK
   T0SE = 1;                  //NAO USADO
   PSA = 0;                  //PRESCALER NO TIMER0
   PS2 = 0;
   PS1 = 0;
   PS0 = 1;                  // 1:4
      
//CMCON

   C2OUT = 0;                  //VIN < VOUT
   C1OUT = 0;                  //VIN < VOUT
   C1INV = 0;                  //SAIDA NAO INVERTIDA
   C2INV = 0;                  //SAIDA NAO INVERTIDA
   CIS = 0;                  //VIN- LIGADA NO CIN-
   CM2 = 1;                  
   CM1 = 1;
   CM0 = 1;                  //COMPARADOR DESLIGADO

//CONFIGURAÇÃO DA USART
   TX9 = 0;                                           //TRANSMISSÃO EM 8 BITS
   TXEN = 1;                                           //TRANSMISSÃO HABILIATADA
   SYNC = 0;                                           //TRANSMISSÃO ASSÍNCRONA
   BRGH = 0;                                           //BAIXA VELOCIDADE
   SPBRG = 129;                                   //2400 Bps
   SPEN = 1;                                           //HABILITA TX E RX

        while(1) {
                   TXEN = 1;                             //HABILITA TRANSMISSÃO SERIAL
                   TXREG = 10;                         //CARREGA DADO A SER ENVIADO
                   while(!TXIF);                         //AGUARDA TRANSFERIR DADO PARA TSR
                   while(!TRMT);                        //ESPERA ACABAR DE ENVIAR
                   DelayMs(10);                        //ESPERA 10mS
        }     
}


Agradeço a todos que visitaram o tópico e que deram idéias e opiniões.

Muito obrigado

Abraço

MensagemEnviado: 29 Out 2009 11:29
por vtrx
Voce sabe em ASM?
Não programo em C,mas não da para colocar o bloco ASM completo entre os códigos em C?

MensagemEnviado: 29 Out 2009 11:47
por fabim
CruzCredo de feio.
Tá, blz. masss. mimimi ?
Tipo, o que tem de errado ? o que não funciona e se funciona o que tem?

Tu so falou o que quer fazer rapido, e colocou uma rotina basica, e daí ? que tem isso ? Tendeu?

De detalhes, não funciona ? baud errado ? não isso ou aquilo.

Caso contrario, fica dificil de entender. O Psoal não tem estrela na testa, só chifres e de péssima sintonia. Sei que a maioria tem bola, mais não serve pra adivinhação.

Abraços, e de uma explicada melhor acerca do que quer fazer, e o que tem de errado com essa bagacinha que você postou.

Abraços2

MensagemEnviado: 29 Out 2009 11:54
por vtrx
È,pensando no que o fabim digitou...
Demora +- 15 Ml para enviar um byte ou sequencia?
Voce não colocou um sleep de 10?
Como voce esta lendo no Pc,programa próprio,terminal do Ruindows oque?
Eu leio dados do Pic num programa feito em Delphi com rotinas em assembly,pois as APIs do Windows e componentes para Delphi,em algumas aplicações ,são lentas.

MensagemEnviado: 29 Out 2009 12:20
por ze
já sei o que você quer. é só fazer assim ...

MensagemEnviado: 29 Out 2009 12:25
por Andre_Cruz
vtrx,

Eu sei em ASM. O compilador permite colocar um bloco de comandos ASM.
Implementei em ASM e esta funcionando.

Tenho apenas uma dúvida.

Como eu faço pra enviar o retorno do carro (Enter) ??
Pra enviar tipo uma lista, um em baixo do outro.

Muito obrigado pela dica.


Abraço

MensagemEnviado: 29 Out 2009 12:42
por Andre_Cruz
Pessoal o que eu preciso é transmitir o valor de uma variavel pela serial de maneira rápida.

Aquele código que eu postei era o que eu estava tentando fazer funcionar pra colocar no programa, isso é apenas um programa para teste da USART, descobri que o registrador TXREG só trabalha com caracteres ASCII.

As configurações da USART estão corretas, porque se eu usar o sprintf pra enviar ele funciona normal.

Valew

MensagemEnviado: 29 Out 2009 12:45
por fabim
Andre_Cruz escreveu:Pessoal o que eu preciso é transmitir o valor de uma variavel pela serial de maneira rápida.

Aquele código que eu postei era o que eu estava tentando fazer funcionar pra colocar no programa, isso é apenas um programa para teste da USART, descobri que o registrador TXREG só trabalha com caracteres ASCII.

As configurações da USART estão corretas, porque se eu usar o sprintf pra enviar ele funciona normal.

Valew


TXREG só com char´s ? De onde tu tirou isto ?

Quer dizer que se eu fizer, TXREG = 0x00, o USART não vai enviar um char nulo ?

C ta boiando eim...

MensagemEnviado: 29 Out 2009 13:06
por Andre_Cruz
fabim

Só consegui fazer ele enviar mandando caracter ASCII.

Devo estar boiando mesmo, sou iniciante mais daqui uns 100 anos eu aprendo alguma coisa rsrsrs

Como eu envio o comando \n pra pular de linha mas em ASM ?

MensagemEnviado: 29 Out 2009 13:55
por Djalma Toledo Rodrigues
0x0A ---> Line fine
0x0D ---> Car Return

ver tabela ASCII e seus Cartacteres de Contrôle
que vai de 0x00 a 0x1F
.

MensagemEnviado: 29 Out 2009 14:00
por Djalma Toledo Rodrigues
Não dispondo da Tab. ASCII ai a mão Gloogleia
.

MensagemEnviado: 29 Out 2009 14:05
por Djalma Toledo Rodrigues
Andre_Cruz escreveu: Só consegui fazer ele enviar mandando caracter ASCII.

A UART / USART envia Bytes se imprimível ou não, é outro 'departamento'
.

MensagemEnviado: 29 Out 2009 14:29
por Andre_Cruz
Valew Djalma !!

Consegui pular de linha !
Agradeço a ajuda de todos !

Abraço