Me enfrento a un bloqueo de carretera con mi PIC UART / USART. Anteriormente estaba trabajando con UART en PIC18F452. Pero cuando traigo mi código para usar con PIC16F1824, no funciona. Supongo que esto se debe a que PIC16F1824 está utilizando USART mejorado. Técnicamente debería soportar UART. Pero no sé cómo hacerlo funcionar.
Estoy usando MikroC Pro. Detecta los datos entrantes utilizando UART1_Data_Ready()
, cuando leí los datos usando UART1_Read()
, Parece que los datos son basura.
Pregunta:
-
¿Cómo me aseguro de que la MCU lea los datos tal como están (UART)? En este momento solo quiero leer los datos entrantes.
-
¿Esto tiene algo que ver con el oscilador? Estoy usando XTAL 4Mhz.
-
Estoy usando PICKIT 3. ¿Hay alguna forma de ver los datos entrantes?
Enlaces útiles:
Código
void main()
{
ANSELA = 0; //Digital I/O for PORTA
TRISA = 0b00100001;
PORTA = 0;
APFCON0.RXDTSEL = 1; //0:RX is on RC5 1:RX is on RA1
TRISC = 0;
PORTC = 0;
RCSTA.RX9D = 0;
RCSTA.ADDEN = 0;
RCSTA.CREN = 1; // eneble reception.
RCSTA.SPEN = 1; //Serial port enable
RCSTA.RX9 = 0;
T1CON = 1; // Turn on timer TMR1
PIR1.TMR1IF = 0; // Reset the TMR1IF bit
TMR1H = 0xFC; // TMR1H and TMR1L timer registers are returned
TMR1L = 0x18; // their initial values
PIE1.TMR1IE = 1; // Enable an interrupt on overflow
INTCON = 0xC0; // Enable interrupt (bits GIE and PEIE)
PWM1_Init(4000); //initialize PWM at 5Khz
UART1_Init(9600);
while(1)
{
if (UART1_Data_Ready())
{
//Blink the LED, indication data is coming in.
PORTA = 4;
delay_ms(50);
PORTA = 0;
sVal = UART1_Read();
//My debug code to see what character coming in
EEPROM_Write(0x00+ii, sVal);
ii++;
if (sVal == '3')
motor_run_fast();
else
motor_stop();
} //UART ready
}
}