程序大致如下:
时钟是内部复位后的时钟
初使化IO时,设定PD6为带内部上拉的中断输入。
在进入停机模式前,先判断是否满足条件,然后进入停机模式(仅有外部复位或PD6的下降沿可将其唤醒)
中断程序为一个空操作汇编指令(即无任何实质代码),目的仅仅是为了让单片机从停机状态醒来。
现在问题是:中断程序返回后,PC指针有时会指向0000,有时又是正常的。
SP指针在进入主函数前是03FF,在执行_asm("halt")前是03FD,通过PD6引脚的唤醒进入中断,此时SP指针为03F4.
但不知何故,有时在进入_asm("halt")前SP指针会是03F4.不得其解
在执行_asm("halt")后,程序会马上转入唤醒中断,但中断返回后程序又指向_asm("halt")这句代码
我想是否会是因为在进入_asm("halt")要清除一些中断触发标志位,但是我在手册中没有发现似乎51单片机的中断触发标志位.
求高手帮忙,谢谢.
main()
{
//一条关中断汇编指令
初始化IO端口,初始化用户变量等
while(1)
{
//关中断
.
.
.
.
if (进入停机模式的条件)
{
//一条停机指令的汇编
//关中断
}
}
}
PD口中断唤醒入口程序()
{
_asm("nop");
}
转载
|