Hola, estoy usando dsPIC30F4013 y he estado intentando interconectar uart con pic. Quiero enviar algunos datos a la PC a través de uart y mostrarlos en el terminal, pero lo que obtengo está lejos de lo que espero, para ser exacto, no tengo sentido. Uso el módulo convertidor serial USB FTD232RL para conectar el MCU con la PC. Al principio pensé que podría ser una diferencia de velocidad en baudios, pero hice una doble verificación e incluso probé diferentes velocidades en baudios, pero el resultado es el mismo. He publicado mi código a continuación. ¿Qué podría ser un problema y cómo solucionarlo? Gracias de antemano.
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <p30fxxxx.h>
#include "uart.h"
_FOSC(CSW_FSCM_OFF & XT_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_DIS);
#define period 7372
unsigned int counter;
void initTMR1(void)
{
TMR1 = 0;
PR1 = period;
IFS0bits.T1IF = 0;
IEC0bits.T1IE = 1;
T1CONbits.TON = 1;
}
void delay_ms(unsigned int time)
{
counter = 0;
while (counter < time);
}
void initUART()
{
U1BRG = 0x0040; //baud rate 9600
U1MODEbits.ALTIO = 1;
IEC0bits.U1RXIE = 1;
U1STA &= 0xfffc;
U1MODEbits.UARTEN = 1;
U1STAbits.UTXEN = 1;
}
void writeUART(unsigned int data)
{
while(U1STAbits.TRMT == 0);
if(U1MODEbits.PDSEL == 3)
U1TXREG = data;
else
U1TXREG = data & 0xFF;
}
void RS232_putst(register const char *str)
{
while((*str)!=0)
{
WriteUART(*str);
str++;
}
}
void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void)
{
TMR1 = 0;
counter++;
IFS0bits.T1IF = 0;
}
int main(void)
{
ADPCFGbits.PCFG9 = 1;
TRISBbits.TRISB9 = 0;
LATBbits.LATB9 = 0;
initUART();
initTMR1();
RS232_putst("START");
delay_ms(2000);
while(1)
{
RS232_putst(00000);
RS232_putst("This is test!!");
LATBbits.LATB9 = ~LATBbits.LATB9;
delay_ms(1000);
}
return 0;
}