大神求救!
问题是这样的,我用的是8H2K17U,手册上写的是支持I/O 中断唤醒功能,我使用P1.4、P1.5、P1.6三个IO口,上拉到VCC,按下按键后到GND,预期目标是在没有按键按下的时候单片机保持在STOP模式下,当按下按键后唤醒单片机串口发送键值,发完键值后继续进入STOP模式。配置了P1IM1 = 0x00; P1IM0 = 0x00;(下降沿) P1WKUE = 0x70; ,在进入STOP模式后,按键无法唤醒,不知道是为啥,下面贴上代码,大神帮看看,谢谢!
IO配置代码:
复制代码
main代码:
- #define MAIN_Fosc 5529600L //定义主时钟
- #define CE P35 //无线模块片选,高电平或悬空SLEEP,低电平唤醒
- #define LED P33 //LED灯,0亮,1不亮
- #define K1 P14
- #define K2 P15
- #define K3 P16
-
- bit B_Alarm = 0; //唤醒标志,1醒,0没醒
- unsigned char key = 0; //哪个按键按下,0没有,1=K1,2=K2,3=K3
- unsigned char send = 0; //发送键值标志,1发送了,0没发送
- /********************** 主函数 ************************/
- void main(void)
- {
- Delay_ms(10);
- BSP_Configuration();//硬件驱动初始化函数
- LED = 1;
- Delay_ms(10);
- App_STC8_Sleep();//开始休眠
-
- while(1)
- {
- if(B_Alarm)//休眠醒来
- {
- B_Alarm = 0;//清除休眠标志
- P1INTE = 0x00;//禁止中断
- App_GPIO_Init_Work();//全部引脚工作
- Delay_ms(100);//等待无线模块醒来
- if(key == 1)
- {
- App_UART1_SendByte(0x01);
- }
- else if(key == 2)
- {
- App_UART1_SendByte(0x02);
- }
- else if(key == 3)
- {
- App_UART1_SendByte(0x03);
- }
- key = 0;//清除键值
- P1INTE = 0x70;//允许中断
- send = 1;//已发送键值
- Delay_ms(100);//等待无线模块发送完
- }
-
- if((K1==0)||(K2==0)||(K3==0))//亮灯
- {
- LED = 0;
- }
- if((K1==1)&&(K2==1)&&(K3==1))//灭灯
- {
- LED = 1;
- if(send == 1)//如果发送了键值才休眠
- {
- send = 0;//清发送标志
- App_STC8_Sleep();//开始休眠
- }
- }
- }
- }
-
- void App_STC8_Sleep(void)
- {
- _nop_();
- _nop_();
- App_GPIO_Init_Sleep();//休眠前配置引脚
- PCON |= (1<<1); //进入掉电模式
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
-
- /***********************************************************************
- * 函 数 Name: BSP_Configuration
- * 功能说明: 初始化硬件设备。配置CPU寄存器和外设的寄存器并初始化一些全局变量。
- ***********************************************************************/
- void BSP_Configuration(void)
- {
- P_SW2 |= 0x80;
- App_GPIO_Init_Work();//全部引脚工作
- App_GPIO_Init();
- App_UART1_Init();
- EA = 1;//打开总中断
- }
复制代码
|