乐此不疲 发表于 2025-1-26 12:13:49

请问:AI8051U在主循环中执行掉电指令,唤醒后执行程序怎样才能不跳出主循环

根据官网例程改编的部分相关实验代码如下:
/******************** 主函数 **************************/
void main(void)
{
    WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    P_SW2 |= EAXFR; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

    P40 = 0;    //LED Power On

INT0=1;
INT1=1;
IT0 = 1;
IT1 = 1;
EX0 = 1;
EX1 = 1;
EA = 1;   //允许总中断
t=1;//bit标志
P2 =0x00;//全部电亮
delay_ms(500);

    while(1)
    {
P2=0x55;//间隔点亮
delay_ms(500);
if(t)
{
t=0;
for(ledIndex=0;ledIndex<8;ledIndex++)
{
delay_ms(100);      //延时100ms
//跑马灯指示工作状态
P2 = ~ledNum;    //输出低驱动
}
}
PCON =0x02;//在此休眠,按键触发P3.2或P3.3中断唤醒休眠
NOP10();一、上述代码为8bit编译模式,上电后执行如下顺序:
       1.P2口LED全部点亮0.5秒。
       2.进入主循环后LED间隔点亮0.5S。
       3.跑马灯式逐个点亮LED一个循环后停止值P2.7口点亮状态。
二、按一次P3.2或P3.3口的按键:程序运行顺序如上述一样,
       1-3执行一遍的模式。而不是2-3的主循环内执行的模式。
三、实验板是本站的“擎天柱-AI8051U转89C52-DIP40核心功能板”



此前使用STC8H8K64U单片机时没有出现过这个问题,
如果每次掉电唤醒都回到主函数继续执行的话,
很多用户变量重新初始化就不能正常工作了,
怎样才能让单片机在中断唤醒后保留在主循环中运行,
不知道是我的实验哪里有问题,请各位指点。



Lkck8210 发表于 2025-1-26 15:39:28

代码不全,请贴出完整代码
盲猜没有中断函数,唤醒后跑飞重启了

神农鼎 发表于 2025-1-26 18:34:26

IRCDB = 0x10;




乐此不疲 发表于 2025-1-26 20:59:47

神农鼎 发表于 2025-1-26 18:34
IRCDB = 0x10;
非常感谢,根据你的指点加入IRCDB寄存器配置后立竿见影的解决了问题,
另外,权衡利弊后我将我的系统时钟由40MHz降到24MHz正在观察中,再谢!

神农鼎 发表于 2025-1-26 21:44:23

乐此不疲 发表于 2025-1-26 20:59
非常感谢,根据你的指点加入IRCDB寄存器配置后立竿见影的解决了问题,
另外,权衡利弊后我将我的系统时钟 ...

可以 33MHz 以上

乐此不疲 发表于 2025-1-27 10:12:17

神农鼎 发表于 2025-1-26 21:44
可以 33MHz 以上
好的,另外我还想请教你一个问题:
配置掉电后的省电模式时在掉电指令PCON = 0x02;
之前我做了关断各个I/O口的数字通道的配置,比如:P3IE = 0x00;
而后在掉电唤醒指令的后面在重新配置成P3IE = 0xff;的模式,
这时在STC8H8K64U中通过P3.7的I/O口中断是可以唤醒MCU的,
但在AI8051U中却不能、而且即使P3.2的INT0也无法响应中断的,
只能配置成P3IE = 0x84,10000100B;
保留P3.2、P3.7数字通道这样才能响应中断,不知道是否是正常的?

神农鼎 发表于 2025-1-27 11:55:41





页: [1]
查看完整版本: 请问:AI8051U在主循环中执行掉电指令,唤醒后执行程序怎样才能不跳出主循环