请教 SM+ 在使用Halt命令后如何从中断中恢复出来!【恢复】
新手,在使用SM+做仿真时,想使用halt命令省电,但是发现使用SM仿真时,一旦使用了halt命令,就没有办法处理中断了。本来想法是:
1.设置80定时器定时值
2.使能定时器,定时器开始计数
3.执行halt命令。
4.希望定时器结束执行80定时器中断程序。
故障现象:单步执行仿真时,执行到halt命令就停止了。使用F8没法继续往下执行。
原因猜测:分析原因觉得是SM在halt模式时。Fcpu停止了,数据手册上虽然说外围时钟Fxp这时还是工作的(80定时器使用Fxp做为时钟)。SM仿真程序由于Fcpu停止了,就无法对外围时钟Fxp操作了。不知道那位大虾能够指点一下啊,使用什么方法能够在Fcpu停止的时候让Fxp运行?
谢谢! 好像发现答案了!
When a program is stopped by halt ,the PC value is changed to an other address, then the program is resumed, SM+ does not operate normally. ZUD-CD-05-0003-1-E这份文档P9页有说到! Sorry,是SET1 TCE80; 但是根本进不了定时中断。连端口中断都进不去。郁闷死了。有时能进端口中断,有时连端口中断都进不去,更不要说定时器中断了!
本贴被 UPD78F9222 编辑过,最后修改时间:2009-01-12,22:22:18. 你的程序全部都在这里吗?
如果你的程序都在这里,那么你的定时器80应当不能产生中断,你80定时器的中断使能并没有打开。 SM+可以仿真Halt模式的,不加halt时能进定时器中断吗?
本贴被 sophie0403 编辑过,最后修改时间:2009-01-12,14:37:12. 没人指点一下吗?我把代码贴出来。
MOV INTM0, #00000000B ; Set the valid edge of INTP1 to falling edge
CLR1 PIF1 ; Clear invalid interrupt requests in advance
CLR1 PMK1 ; Release the INTP1 interrupt mask
EI ; Enable vector interrupt
Main_loop:
; NOP;
; BR $Main_loop;
SET1 P4.5
HALT;
;*******************************************************************************
;
; External interrupt INTP1
;
;*******************************************************************************
INTERRUPT_S3:
CLR1 TMIF80 ; Clear invalid interrupt
CLR1 TMMK80 ; Release the timer80 interrput mask
MOV TMC80, #00000000B;
MOV CR80, #20;
CLR1 TCE80;
CLR1 PIF1;
RETI;
;---------------------------------------------------------------------------------
INTERRUPT_INTTM80:
CLR1 P4.5;
CLR1 TMIF80;
END_INTTM80:
RETI;
end
页:
[1]