Página 1 de 1

PIC18F1320 + MPLAB C18 + USART

MensagemEnviado: 01 Mai 2012 19:15
por leo_alves_br
Olá a todos, precisava de uma pequena ajuda.

Estou tentando implementar o código abaixo em um PIC18F1320, mas não estou conseguindo. Compilando no C18 da Microchip.

Devo estar cometendo algum erro muito "idiota", pois não estou conseguindo fazer a transmissão utilizando a instrução "printf", não aparece nada na porta serial.

Utilizei este mesmo código em um PIC 18F4550 (alterando apenas os arquivos .h) e o código funcionou. Alguém tem alguma dica?

Código: Selecionar todos
#include<p18f1320.h>                              
#include<delays.h>                              
#include<usart.h>                              
#include<stdio.h>                                 
#include "D:\Projetos\Microchip_C\Teste_RS_232\config_PIC18F1320.h"       


/* ------------------------------------------------- Define Saidas do PIC 18F1320 ------------------------------------------------- */
#define LED_1   PORTBbits.RB2      // Define o PORTB.2 como LED

#define Fosc 4                                           // Define a Frequencia do Oscilador usado no PIC18F1320

// Subrotina de Configuracao do AD do PIC 18F1320
void Configura_AD (void)
{
   ADCON0=0b00000000;                                 // Vref- = VSS e Vref+ = VDD <7:6>
                                                      // canal AN0 selecionado <4:2>
   ADCON1=0b00000001;                                 // Pino RA0/AN0 analógico e demais pinos digitais <6:0>
   ADCON2=0b10000001;                                 // Resultado justificado à direita <7>
                                                      // Tempo de aquisição de 0 TAD <5:3>
                                                      // FOSC/8 <2:0>
}


void main (void)
{
   TRISA = 0b11111111;                                 //
   PORTA = 0x00;                                       // Coloca a PORTA em 0V
   TRISB = 0b11111011;                                 // RB2 - OUT, 
   PORTB = 0x00;                                       // Coloca a PORTB em 0V

   INTCON=0b00000000;

   Configura_AD();                                    // Configura AD do PIC
             
   OpenUSART(USART_TX_INT_OFF                         // Interrupcao de transmissao desabilitada
               &USART_RX_INT_ON                      // Interrupcao de recepcao habilitada
               &USART_ASYNCH_MODE                     // Modo Assincrono
               &USART_EIGHT_BIT                       // Dados de 8 bits
               &USART_SINGLE_RX
               &USART_BRGH_HIGH                       // Alta velocidade
               ,207);                                 // Baud rate de bps
   
   baudUSART(BAUD_8_BIT_RATE                          // Gerador de 8 bits
               &BAUD_AUTO_OFF                         // Auto baudrate desabilitado
               &BAUD_WAKEUP_OFF);                     // Desabilita o auto-wake-up
   
   stdout = _H_USART;                                 // Configura o destino de saida da funcao printf como sendo a USART
   
   printf("Teste");                                   // Envia uma String para a USART
   
   
   
   LED_1 = 1;
   Delay10KTCYx(10);                                  //
   LED_1 = 0;
   
   while(1)                                           // Looping Infinito
   {
     
      printf("Teste");                                   // Envia uma String para a USART

      Delay10KTCYx(5);                                //

   }
}


O circuito está certo, pois quando substitui as instruções OpenUSART e printf pelo código abaixo e fiz a transmissao por hardware, funcionou.
Código: Selecionar todos
void Configura_UART (void)
{
   TRISBbits.TRISB4 = 1;
   TRISBbits.TRISB1 = 1;

   TXSTA = 0b00100100;
   RCSTA = 0b10010000;
     BAUDCTL = 0b00000000;
   SPBRG = 207;
}

void Transmite_UART (char dado)
{
   TXREG = dado;               // Inicia a transmissão
   while(!TXSTAbits.TRMT);         // Aguarda transmissão terminar
}


Agradeço por toda ajuda...

MensagemEnviado: 02 Mai 2012 08:44
por Daniel dos Santos Costa
Ola meu caro.

Acoselho que vc use as funções da lib. usart.h, como por exemplo putsUSART(); ou putrsUSART();, pois estas funções imprimem um strings de caractere, observe o help delas que encontra-se na pasta doc do C18, vai ajudar.

Quero dizer em vez de usar printf("Teste"); use
putrsUSART("Teste"); ou putsUSART("Teste");

MensagemEnviado: 02 Mai 2012 18:42
por leo_alves_br
Olá Daniel.

Estava tão maluco em resolver o problema com o printf que nem parei para "ler o manual".

Bom a sua dica funcionou perfeitamente.

Não entendo por que com o 18F4550 funcionou corretamente e com o 18F1320 deu este problema.

Bom, problema resolvido... vamos para frente...

Até mais e muito obrigado pela ajuda.