关于定时器实验中 保护现场和恢复现场 及堆栈的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 14:34:38
请问以下的题目中设置堆栈和保护现场、恢复现场有什么区别和联系吗?
另外,中断的返回RETI是回到SJMP $吗?

题目:
由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次,P1口的P1.0-P1.7分别接八个发光二极管,要求编写程序模拟一时序控制装置,开机后第一秒钟L1,L3亮,第二秒钟L3,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒L1,L3,L5,L7亮,第六秒L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去。

解答: ORG 0000H
AJMP START
ORG 001BH ;T1中断入口地址
AJMP INT_T1
ORG 0100H
START:
MOV SP,#60H
MOV TMOD,#10H ;置T1为方式1
MOV TL1,#3CH ;延时50mS的时间常数
MOV TH1,#0B0H
MOV R0,#00H
MOV R1,#14H
SETB TR1
SETB ET1
SETB EA ;开中断
SJMP $
INT_T1: ;T1中断服务子程序
PUSH ACC ;保护现场
PUSH PSW
PUSH DPL
PUSH DPH
CLR TR1

请问以下的题目中设置堆栈和保护现场、恢复现场有什么区别和联系吗?

MOV SP,#60H 设置堆栈是设置堆栈的起始存储单元,PUSH ACC ;保护现场 PUSH PSW PUSH DPL PUSH DPH ,就是在60H单元开始依次存储ACC、PSW、DPL、DPH
另外,中断的返回RETI是回到SJMP $吗?
不是,返回RETI是回到响应中断前PC的位置,不一定是在SJMP $