Autor Tema: Ayuda recepcion uart dspic33  (Leído 58 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado plcisrael

  • PIC10
  • *
  • Mensajes: 7
Ayuda recepcion uart dspic33
« en: 08 de Noviembre de 2017, 23:15:34 »
Saludos mundo, espero su ayuda en la recepción de datos uart el envío me salio bien pero la recepción no la pude hacer trabajar me guíe en el ejemplo de microchips y trabajo en x16 les agradezco su atención y dejo el código.

// DSPIC33FJ12MC201 Configuration Bit Settings

// 'C' source line config statements

#include <xc.h>
#include <pps.h>
#include <stdio.h>
#include <stdlib.h>
#include <libpic30.h>
#include <uart.h>

// FBS
#pragma config BWRP = WRPROTECT_OFF     // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_FLASH           // Boot Segment Program Flash Code Protection (No Boot program Flash segment)

// FGS
#pragma config GWRP = OFF               // General Code Segment Write Protect (User program memory is not write-protected)
#pragma config GSS = OFF                // General Segment Code Protection (User program memory is not code-protected)

// FOSCSEL
#pragma config FNOSC = FRCPLL           // Oscillator Mode (Primary Oscillator (XT, HS, EC) w/ PLL)
#pragma config IESO = OFF               // Internal External Switch Over Mode (Start-up device with user-selected oscillator source)

// FOSC
#pragma config POSCMD = XT              // Primary Oscillator Source (XT Oscillator Mode)
#pragma config OSCIOFNC = OFF           // OSC2 Pin Function (OSC2 pin has clock out function)
#pragma config IOL1WAY = OFF            // Peripheral Pin Select Configuration (Allow Multiple Re-configurations)
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Both Clock Switching and Fail-Safe Clock Monitor are disabled)

// FWDT
#pragma config WDTPOST = PS32768        // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128           // WDT Prescaler (1:128)
#pragma config WINDIS = OFF             // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = OFF             // Watchdog Timer Enable (Watchdog timer enabled/disabled by user software)

// FPOR
#pragma config FPWRT = PWR128           // POR Timer Value (128ms)
#pragma config ALTI2C = OFF             // Alternate I2C  pins (I2C mapped to SDA1/SCL1 pins)
#pragma config LPOL = ON                // Motor Control PWM Low Side Polarity bit (PWM module low side output pins have active-high output polarity)
#pragma config HPOL = ON                // Motor Control PWM High Side Polarity bit (PWM module high side output pins have active-high output polarity)
#pragma config PWMPIN = ON              // Motor Control PWM Module Pin Mode bit (PWM module pins controlled by PORT register at device Reset)

// FICD
#pragma config ICS = PGD1               // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF             // JTAG Port Enable (JTAG is Disabled)

// configuracion uart
#define FCY 40000000
#define BAUDRATE 9600
#define BRGVAL ((FCY/BAUDRATE)/16)-1
// fin config uart

// Declaracion de variables

//

int main() {
// configuracion de osilador y pll
PLLFBD=41; // Configuración de dsPIC a 40MIPS
CLKDIVbits.PLLPOST=0; // N1=2
CLKDIVbits.PLLPRE=0; // N2=2
OSCTUN=0;
RCONbits.SWDTEN=0; // Deshabilita WatchDog Timer
__builtin_write_OSCCONH(0x01); // Habilita reloj con PLL
__builtin_write_OSCCONL(0x01); // Comienza reloj
// fin configuracion osilador y pll

// configuracion de TX en RP0 "declaramos que tx estara en el pin RP0"
PPSUnLock;
PPSInput(IN_FN_PPS_U1RX, IN_PIN_PPS_RP0);
PPSLock;
// fin configuracion tx

//configuracion de UART
U1MODEbits.STSEL = 0; // 1-stop bit
U1MODEbits.PDSEL = 0; // No Parity, 8-data bits
U1MODEbits.ABAUD = 0; // Auto-Baud disabled
U1MODEbits.BRGH = 0; // Standard-Speed mode
U1BRG = BRGVAL; // Baud Rate setting for 9600
U1STAbits.URXISEL = 0; // Interrupt after one RX character is received;
U1MODEbits.UARTEN = 1; // Enable UART
// fin de UART
   
    TRISBbits.TRISB7 = 0;   // Declaramos el pin rb7 como salida
while(1)
{
char ReceivedChar;
/* Check for receive errors */
if(U1STAbits.FERR == 1)
{
continue;
}
/* Must clear the overrun error to keep UART receiving */
if(U1STAbits.OERR == 1)
{
U1STAbits.OERR = 0;
continue;
}
/* Get the data */
if(U1STAbits.URXDA == 1)
{
ReceivedChar = U1RXREG;
if (ReceivedChar == 'a')
{
PORTBbits.RB7 = 0;  // Ponemos en bajo el pin rb 
}
if (ReceivedChar == 'A')
{
PORTBbits.RB7 = 1;  // Ponemos en bajo el pin rb 
}
}
}
}


 

anything