请教休眠问题 | 已解决
大家好,请教下:1.所用IC型号: STC8H3K64S2;
2.问题点:引脚唤醒,高电平或低电平唤醒;
3.硬件唤醒使用引脚:P1.2,正常工作时此引脚用作ADC功能;
因电路设计P1.2引脚除用作ADC功能外,在程序休眠后还需用作休眠唤醒;因型号限制,此脚不能用外中断唤醒休眠,只能用T2唤醒,所以我在写了一段程序,但引脚不具备唤醒功能,请各位老师帮忙看看,谢谢。
//因之前P1.2用作AD,所以在休眠前设为准双向口并置为高电平;
P1n_standard(2);
P12 = 1;
//Time2已用作串口2作为波特率发生器且一切工作正常;这里用两个官方库函数停止后再使能Timer2中断;
Timer2_Stop();
Timer2_InterruptEnable();
EA = 1; //初始化时已开,这里再开一次;
PCON = 0x02;//进入休眠;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
//这里用两个官方库函数,先开启计数,再禁止中断;
Timer2_Run();
Timer2_InterruptDisable();
//提供中断入口,程序不跑飞;
void timer2_int (void) interrupt 12
{
}
STC8H3K系列 普通I/O 脚可以高电平或者低电平唤醒
【新提醒】所有普通I/O口都支持外部中断的演示程序,STC8系列、STC32系列, 中断号37~44 - I/O读写及点灯,外部中断 ,所有I/O都支持的普通I/O中断,按键扫描 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
支持 PCON = 0x02 的唤醒吗,我看手册 没有说唤醒功能 例程也没有唤醒。我主要是要唤醒 主要就是要P1.2 唤醒 PCON = 0x02 我用库函数例程包里的串口收发例子测了一下,没什么问题。
按照你的方式串口1使用定时器2作为波特率发生器,休眠前开启定时器2中断,唤醒后关闭中断
delay_ms(100);
printf("MCU Sleep!\r\n");
P1_MODE_IO_PU(GPIO_Pin_2);
Timer2_Stop();
Timer2_Interrupt(ENABLE);
PCON = 0x02;//进入休眠;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P1_MODE_IN_HIZ(GPIO_Pin_2);
Timer2_Run(ENABLE);
Timer2_Interrupt(DISABLE);
printf("MCU Wakeup!\r\n");通过拉低P1.2口可以唤醒MCU
附件是我的测试程序,请参考。
本帖最后由 QQ334911390 于 2023-11-1 14:20 编辑
可以的,谢谢
页:
[1]