这是一个多节点的数据采集系统, 各节点时时将采集到的数据“自主”上报到主机(采用一种总线仲裁的机制得到总线使用权),程序主流程如下:
初始化
|
数据采集处理(假定程序指针由ORG伪指令指定为0500H)
|
数据发送
|
返回到数据采集处理(循环)
由于数据发送的时间受到网络上其他节点发送数据的限制而导致最终本节点的发送时间不定,有时甚至超过了采集数据的有效期,这时就要将数据作废,重新采集重新上报。我考虑采用定时器中断的方式。在数据发送的开始开启定时器,在“数据发送”的结束和“返回到数据采集处理”之前关闭定时器。如果在限定的时限内数据有效发送的话定时中断就不会起作用,如果数据发送的时间超过定时器限制,定时中断就会发生,就会进入中断服务程序中止此次数据的发送。
问题是:我想在定时器中断服务程序返回时回到“数据采集处理”而不是回到“数据发送”的中断现场,这可不可以通过修改中断时存入堆栈的数据来实现?即将中断时压入堆栈的PC值在中断服务程序内修改为“数据采集处理”的程序地址,这样返回时就可以直接回到“数据采集处理”而赶往下一轮的循环。程序如下:
intserv:
中止发送过程...
pop r0 ;pch出堆栈
pop r1 ;pcl出堆栈
mov r0,#05H ;修改pch
mov r1,#0H ;修改pcl
push r1 ;pcl入堆栈
push r0 ;pch入堆栈
reti ;中断返回
这样做有没有问题?
请高手指点,谢谢! |