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...