堆栈溢出的原因找到了,关于CALL可以嵌套几级/主程序的中断是否全部开放的问题请高手谈谈经验,先谢了!
堆栈溢出的问题找到了,几个关于CALL到底可以嵌套几级/主程序的中断是否全部开放的问题请高手谈谈经验,先谢了!
通过跟踪窗口慢慢查找,发现在16F73程序中 ORG 0004H之后的
BCF PLATCH,3 ;选PAGE0 影响了RETFIE返回出栈的PCLTH值
原来写法为:
ORG 000H
GOTO MAINSTART
ORG 0004H
BCF PLATCH,3 ;选PAGE0 ********多了此句!!!
GOTO INTSRV
...............
MAINSTART:
..........
INTSRV: ;PAGE0
......... ;W,STSTUS,PLATCH 备份
ORG 0800H
..............
改为将INTSRV程序段直接放到 ORG 0004H之后就OK了。
但还有以下问题,请问高手大虾谈谈经验体会:
(1)主程序在循环时,以上9个中断全部开放好不好?
(2)另外在LCD显示送数/SCI串口通讯 等情形是否一定要关闭某个中断或全部中断?
请高手传授经验,多谢!查表前时是关闭了全局中断 GIE 的。
(3)如果中断源比较多,而且中断比较频繁(如1ms一次中断),中断处理程序中是否不能语句太多?否则外围主程序可能老得不到迅速执行。??
(4)考虑中断发生,CALL子程序中到底可以嵌套几级CALL ? 2 / 3 / 5 级 ?
中断处理程序中是否可以再 CALL...[CALL...(CALL...)] ???
另外用了几年PIC单片的8级堆栈总觉得不好用,太少了。
用HYNIX HMS87Cxxxx 写了几个产品程序,觉得很舒服,几乎可以随便地CALL (CALL...)
多层嵌套,只要留的堆栈寄存器多一些就可以了。因为我一直用汇编写,所以能多用些CALL嵌套,程序思路框架比较清晰些。
PIC单片机恰恰不能多用嵌套的CALL,怎么合理解决?
发表时间:2004年5月22日21:19:34