根据官网例程改编的部分相关实验代码如下:
- /******************** 主函数 **************************/
- 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[ledIndex]; //输出低驱动
- }
- }
- 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单片机时没有出现过这个问题,
如果每次掉电唤醒都回到主函数继续执行的话,
很多用户变量重新初始化就不能正常工作了,
怎样才能让单片机在中断唤醒后保留在主循环中运行,
不知道是我的实验哪里有问题,请各位指点。
|