我正在使用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;
}
答案 0 :(得分:0)
你得到的警告信息只是因为空字符(00h)不是中断条件。
您的pic代码可能没问题,但开发工具没有生成正确的测试数据。
很久很久以前,我曾经不顾一切地休息一下,唤醒了一块休眠设备,需要休息一下。我的终端无法发送一个。我必须让这个工作,所以一个快速的黑客是发送一个空字符,终端设置为较低的波特率,并切换回正确的波特率。