使用USART RX唤醒PIC

时间:2016-12-19 18:43:24

标签: sleep microcontroller pic wakeup usart



我正在使用eXtreme Low Power(XLP)微控制器PIC 16LF1933 为了消耗很少的电池,我让它进入睡眠状态,直到它在RX中收到一个Break字符(00h)。该文档很好地解释了如何在RX中设置具有中断自动唤醒功能。我跟着它。

我正在使用Proteus来模拟项目,使用Virtual Terminal发送信息。如果按 CTRL + SHIFT + @ ,它会发送de 00h(null / all 0),因此,这将唤醒PIC,如文档中所述。
问题是,当我这样做时,我会收到一条警告日志,说明这一点 Wake up event is only 937.500003us wide. Minimum (at current baudrate) expected is 6.656ms. I'm using 9600 baudrate.
如何使用RX进行正确的唤醒事件?

我的while代码

while (1) {
    BAUDCONbits.WUE = 1;    //Wake-up Enable
    SLEEP();

    while (BAUDCONbits.WUE);

    msg = Receive_Serial(); //Clear RCIF
    __delay_ms(100);
    msg = '\0';             //Discard
    __delay_ms(100);
    msg = Receive_Serial(); //Receive the next character
    __delay_ms(100);
    RCREG = 0;
    msg = '\0';
    __delay_ms(100);
}


我的接收功能

unsigned char Receive_Serial() {
    if (OERR) {                 //Overrun error
        RCSTAbits.CREN = 0;     //Fix reset Enable Receive
        RCSTAbits.CREN = 1;
    }

    while (!RCIF);

    return RCREG;
}



1 个答案:

答案 0 :(得分:0)

你得到的警告信息只是因为空字符(00h)不是中断条件。

您的pic代码可能没问题,但开发工具没有生成正确的测试数据。

很久很久以前,我曾经不顾一切地休息一下,唤醒了一块休眠设备,需要休息一下。我的终端无法发送一个。我必须让这个工作,所以一个快速的黑客是发送一个空字符,终端设置为较低的波特率,并切换回正确的波特率。

相关问题