Estoy teniendo problemas con el siguiente código:
#include <xc.h>
#include "config.h"
void Init(void);
void uart_send(char*);
void main(void)
{
char arr[2]= {'a','b'};
char i=0;
Init();
uart_send(arr+i);
i++;
uart_send(arr+i);
while(1);
}
void uart_send(char* c)
{
while(PIR1bits.TXIF < 1);
TXREG= *c;
}
void Init(void)
{
OSCCON = 0xef;
TRISBbits.RB7 = 0;
ANSELHbits.ANS11 = 0;
PORTBbits.RB5 = 0;
TRISBbits.RB5 = 1;
BAUDCON = 0x00;
BAUDCONbits.BRG16= 1;
SPBRGH = 0x03;
SPBRG = 0x40;
TXSTA= 0x24;
RCSTA= 0x90;
PIE1 = 0x00;
INTCON = 0x00;
RCSTAbits.CREN = 1;
}
En el primer caso, llamo a la función uart_send y recibo 'a'. En el segundo caso, cuando vuelvo a llamar a la función, también recibo 'a' en lugar de 'b'. No puedo entender por qué. Si modifico el código, usar valor en lugar de dirección:
void uart_send(char);
void main(void)
{
char arr[2]= {'a','b'};
char i=0;
Init();
uart_send(*(arr+i));
i++;
uart_send(*(arr+i));
while(1);
}
void uart_send(char c)
{
while(PIR1bits.TXIF < 1);
TXREG= c;
}
Luego, en ambos casos recibo 0x03.
Yo uso MPLAB X v3.30, XC8 1.37, PIC18F14K50
Por favor, si tienes alguna idea de qué me equivoco, compártela. Gracias.
ACTUALIZACIÓN:
Revisé la desasy y debería funcionar. Tal vez mi mcu en parte murió o algo mágico ...