Estoy luchando 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, para usar el valor en lugar de la 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.
Uso MPLAB X v3.30, XC8 1.37, PIC18F14K50
Por favor, si tienes alguna idea de en qué me equivoco, compártela. Gracias.
ACTUALIZAR:
Revisé el problema y debería funcionar. Tal vez mi mcu murió en parte o algo mágico...
No especifica la tasa de baudios prevista, pero supongo que es de 9600 bps, si es así, está configurando la tasa de baudios incorrectamente.
Al usar el oscilador interno, está configurando la frecuencia del oscilador del microcontrolador en 16 MHz, también está configurando los bits BRG16 y BRGH en 1, por lo que la fórmula de velocidad en baudios es Fosc/[4*(n+1)], donde n es el valor SPBRG que está configurando en 832.
Al reemplazar los valores con los proporcionados, tiene:
Entonces:
Por lo tanto, su valor SPBRG debe ser 0x1A0.
Hace 2 años, pero lo recuerdo por este molesto tema. Finalmente, compré un nuevo PIC, luego mostré el mismo programa. Funcionó correctamente.
Conclusión: El primer mcu (parcialmente) murió.
tom carpintero
i
tipouintptr_t
(el tipo debe definirse enstdint.h
). Es posible que termine con extraños desbordamientos de enteros; no es exactamente el mejor compilador del mundo.efox29
PeterPal
PeterPal
efox29
PeterPal
dan laks
efox29
PeterPal
PeterPal
ConductoEnVenta
ConductoEnVenta