gente les pido ayuda estoy muuuuuuuuuuuy complicado con el tema del oscilador para DSPIC30F4011, estoy intentando usar el oscilador interno. Cuando pruebo de levantar los datos en el hyperterminal o el hercules con un 232-usb comun, me da caulquier valores. estoy probando este código. Lo único que hace es programar la uart y escribe SEBASTIAN. Pero levanto cualquier cosa, solo con el pikyt2 levanto SEBASTIAN
supongo que el BRG está bien para 30 MIPS, pero no estoy seguro de estar en esta velocidad
supongo que el BRG está bien para 30 MIPS, pero no estoy seguro de estar en esta velocidad
Código:
#include <p30f4011.h>
_FOSC( CSW_FSCM_OFF & FRC_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & PWRT_OFF & MCLR_DIS);
#include <uart.h>
#include <stdio.h>
//////////////////////////////////////////////////////////
void DelayUs(unsigned int v) { // pierde 8+2
while(v != 0){
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
v--;
}
}
//////////////////////////////////////////////////////////
void DelayMs(unsigned int v) {
//////////////////////////////////////////////////////////
while (v != 0 ){ DelayUs(1000); v--;}
}
//////////////////////////////////////////////////////////
void __attribute__((__interrupt__)) _U1TXInterrupt(void)
{
IFS0bits.U1TXIF = 0;
}
//////////////////////////////////////////////////////////
void InicializaUART1()
{
unsigned int baud;
unsigned int U1MODEvalue;
unsigned int U1STAvalue;
CloseUART1();
ConfigIntUART1(UART_RX_INT_DIS & UART_RX_INT_PR0 & UART_TX_INT_DIS & UART_TX_INT_PR0);
U1MODEvalue = UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK &
UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT & UART_RX_TX;
U1STAvalue = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE &
UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
baud=194;//9600 194 38400 48
OpenUART1(U1MODEvalue, U1STAvalue, baud);
}
//////////////////////////////////////////////////////////
void InicializaUART2()
{
unsigned int baud;
unsigned int U1MODEvalue;
unsigned int U1STAvalue;
CloseUART2();
ConfigIntUART2(UART_RX_INT_DIS & UART_RX_INT_PR0 & UART_TX_INT_DIS & UART_TX_INT_PR0);
U1MODEvalue = UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK &
UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT & UART_RX_TX;
U1STAvalue = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE &
UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
baud=194;//9600
OpenUART2(U1MODEvalue, U1STAvalue, baud);
}
//////////////////////////////////////////////////////////
int main ()
{
TRISB=0xFFFF;
TRISBbits.TRISB1=0;
ADPCFG=0xFFFF;
InicializaUART2();
InicializaUART1();
while(1)
{
WriteUART2(0x42);
WriteUART1(0x42);
printf ("SEBASTIAN \n\r");
LATBbits.LATB1 = 1;
DelayMs(100);
LATBbits.LATB1 = 0;
DelayMs(100);
WriteUART1(0x45);
WriteUART2(0x45);
}
}
Última edición por un moderador: