示例#1
0
void Setup_USART1XBAPI()
{
    //Declaración de Variables
    unsigned char USART1Config=0;
    unsigned int BaudRate=0;

    TRISCbits.RC6=0;        //TX es salida
    TRISCbits.RC7=1;        //RX es entrada

    //Configuración USART
    USART1Config=USART_TX_INT_OFF   //Interrupcion por Ttransmisión: Off
            &USART_RX_INT_OFF       //Interrupcion por Recepción: Off
            &USART_ASYNCH_MODE      //Modo Asíncrono
            &USART_EIGHT_BIT        //Transmision de 8bits
            &USART_CONT_RX          //Recepción Continua
            &USART_BRGH_HIGH        //Baudios
            &USART_ADDEN_OFF;       //Detección de Dirección OFF
    BaudRate=51;            //Valor que se carga a SPRBH para Definir BaudRate = 9600
    Close1USART();          //Cierra USART2 en caso de estar previamente abierto.
    Open1USART(USART1Config, BaudRate); //Abre USART1

    IPR1bits.RC1IP =1;      //Receive Interrupt: High Priority
    PIE1bits.RC1IE=1;       //Receive Interrupt: Enabled
    PIR1bits.RC1IF=0;       //Reset de EUSART2 Receive Interrupt Flag
}
示例#2
0
文件: main.c 项目: dacan84/u-mote
void main(void) {
    // Enable UART for serial output display
    Open1USART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_EIGHT_BIT & USART_ASYNCH_MODE & USART_ADDEN_OFF, BAUDRG);

#ifdef INVERT_UART
    baud1USART(BAUD_IDLE_TX_PIN_STATE_LOW & BAUD_IDLE_RX_PIN_STATE_LOW & BAUD_AUTO_OFF & BAUD_WAKEUP_OFF & BAUD_16_BIT_RATE & USART_RX_INT_ON);
#else
    baud1USART(BAUD_IDLE_TX_PIN_STATE_HIGH & BAUD_IDLE_RX_PIN_STATE_HIGH & BAUD_AUTO_OFF & BAUD_WAKEUP_OFF & BAUD_16_BIT_RATE & USART_RX_INT_ON);
#endif

    // I/O states will be held until DSCONL.RELEASE = 0, but we must still initialize
    // to what we want before clearing the RELEASE bit.
    InitializeIO();

#ifdef USE_32KHZ_CRYSTAL
    // Enable the Secondary Oscillator for RTCC use.
    OpenTimer1(TIMER_INT_OFF & T1_SOURCE_PINOSC & T1_PS_1_1 & T1_OSC1EN_ON & T1_SYNC_EXT_OFF, 0);
#endif

    // Did we wake up from Deep Sleep? Or is this the first initial power on?
    if (WDTCONbits.DS) {
        // woke up from Deep Sleep
        DSCONLbits.RELEASE = 0; // release control and data bits for all I/Os

        wait(); // allow time for INTOSC to stablize before using UART
        printf("Woke from Deep Sleep via ");
        if (DSWAKEHbits.DSINT0 != 0) {
            printf("RB0/INT0\r\n");
        } else if (DSWAKELbits.DSMCLR != 0) {
            printf("MCLR\r\n");
        } else if (DSWAKELbits.DSFLT != 0) {
            printf("DSFLT\n");
        } else if (DSWAKELbits.DSWDT != 0) {
            printf("DSWDT\n");
        } else if (DSWAKELbits.DSRTC != 0) {
            printf("RTCC Alarm\n");
        }
    } else {
        // first initial power up of the device.
        // unlock the RTCC registers so that we can write to them
        EECON2 = 0x55;
        EECON2 = 0xAA;
        RTCCFGbits.RTCWREN = 1;

        // reset RTCC date/time (only on first power on)
        RTCCFGbits.RTCPTR1 = 1;
        RTCCFGbits.RTCPTR0 = 1;
        RTCVALL = 0x09; // reserved | year
        RTCVALH = 0xFF;

        RTCVALL = 0x01; // month | day
        RTCVALH = 0x01;

        RTCVALL = 0x12; // weekday | hours
        RTCVALH = 0x01;

        RTCVALL = 0x00; // minutes | seconds
        RTCVALH = 0x00;

        RTCCFGbits.RTCEN = 1; // enable RTCC module
        RTCCAL = RTCCALIBRATION;

        wait(); // allow time for INTOSC to stablize before using UART
    }

    // Application Tasks
    DoApplicationTasks();

    // Power down into Deep Sleep mode.
    printf("Powering down into deep sleep, push RB0/INT0 down to wake...\r\n");
    Flush1USART();
    Close1USART();
    RB0ReleasedWait(); // wait for user to release INT0 so we don't get spurious wake up

EnterDeepSleepMode:
    EnableINT0();
    EnterDeepSleep();

    // Execution should normally never reach here, as Deep Sleep powers up
    // at the Reset Vector.
    //
    // However, there exists a small possibility an INT0 wake up is triggered
    // before the processor has fully enter Deep Sleep mode. As a result, gaurd
    // code is required here to handle re-initiating Deep Sleep entry.
    goto EnterDeepSleepMode;
}