Dúvida com USART !!! [RESOLVIDO]

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Dúvida com USART !!! [RESOLVIDO]

Mensagempor Andre_Cruz » 29 Out 2009 08:07

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
Editado pela última vez por Andre_Cruz em 29 Out 2009 14:29, em um total de 1 vez.
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor vtrx » 29 Out 2009 11:29

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?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor fabim » 29 Out 2009 11:47

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor vtrx » 29 Out 2009 11:54

È,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.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2240
Registrado em: 20 Abr 2008 21:01

Mensagempor ze » 29 Out 2009 12:20

já sei o que você quer. é só fazer assim ...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Andre_Cruz » 29 Out 2009 12:25

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
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Andre_Cruz » 29 Out 2009 12:42

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
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor fabim » 29 Out 2009 12:45

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...
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Andre_Cruz » 29 Out 2009 13:06

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 ?
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Djalma Toledo Rodrigues » 29 Out 2009 13:55

0x0A ---> Line fine
0x0D ---> Car Return

ver tabela ASCII e seus Cartacteres de Contrôle
que vai de 0x00 a 0x1F
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Djalma Toledo Rodrigues » 29 Out 2009 14:00

Não dispondo da Tab. ASCII ai a mão Gloogleia
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Djalma Toledo Rodrigues » 29 Out 2009 14:05

Andre_Cruz escreveu: Só consegui fazer ele enviar mandando caracter ASCII.

A UART / USART envia Bytes se imprimível ou não, é outro 'departamento'
.
Editado pela última vez por Djalma Toledo Rodrigues em 29 Out 2009 15:23, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Andre_Cruz » 29 Out 2009 14:29

Valew Djalma !!

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

Abraço
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06


Voltar para PIC

Quem está online

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

cron

x