pic16f876仓库只要8级,每产生一次子程序调用(或中止),将当时13位地址压到仓库,PC=子程序开端地址低8位+PCLATH(或04H),子程序回来时将13位地址从仓库中弹出=PC。
仓库的操作由CPU操控不行监控,溢出不报警,子程序调用(或中止)超越8次嵌套时,最早压到仓库的13位地址被冲掉,子程序回来时将回不到调用前的PC,程序。
一般运用不会到达8次嵌套,但假如有5、6 次子程序嵌套,而中止服务程序中有1、2次子程序调用便适当风险。调试时很难彻底模仿一切实际情况,
一般的防止办法:
1、一般的子程序调用不要超越6次子程序嵌套,在开端编程前最好画一下流程。
2、尽量防止在不行确认产生时间的中止(如串口接纳、定时器)程序中加子程序调用。中止服务程序中尽量用GOTO句子。
3、在6次子程序嵌套产生前屏蔽总中止。
4、厂家供给的器材读写驱动比方一般喜爱用许多子程序,用之前最好改一下。
5、能够将CALL改用GOTO,比方:
AAA …….
REYURN
…….
BBB CALLAAA
能够改为:
AAA……
MOVFW PCLATH_TEMP
MOVWF PCLATH
MOVFW PC_RETURN
MOVWF PCL
……
BBB
MOVFW HIGHCCC
MOVWF PCLATH_TEMP
MOVFW HIGHAAA
MOVWF PCLATH
MOVLW CCC
MOVWFPC_RETURN
GOTO AAA
CCC NOP
…………….
6、假如嫌费事,能够用C编程,C编译出来之所以大,与为防止仓库溢出而作的绕弯处理不无关系
关于中止时的仓库溢出
pic16f876…
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/273033.html