新闻中心

EEPW首页>嵌入式系统>设计应用> 关于PIC单片机的中断现场保护问题

关于PIC单片机的中断现场保护问题

作者: 时间:2013-03-04 来源:网络 收藏

我们来看前面的程序 有一点需要声明的是,PIC的一部分汇编语句在运行的过程中会改变STATUS寄存器的数据,所以在保护好STATUS之前禁止使用能够改变STATUS的语句

语句1用来保护W寄存器,因为MOVWF语句不改变STATUS所以可以直接使用PIC数据的传递基本都是通过W来转的,所以保护一上来先将W中的数据保护到临时备分中,在返回的时候再将其恢复.

语句2:用来保护STATUS,由于MOVF指令改变了STATUS所以在这里不能直接使用

MOVF STATUS,W语句,而使用了SWAPF 指令,在这里我们没有应用他的高低半字节交换的功能,而是应用了这条语句的执行对STATUS寄存器没有影响,所以在恢复的时候我们仍然要使用SWAPF将高低半字节颠倒过来:)

语句3 和4:这个时候我们已经将STATUS的内容低位与高位颠倒后放入W寄存器中,所以这个时候我们就可以放心的改变STATUS的内容了 ,此两句是将STATUS的内容放到临时寄存器中。另外还有一点就是在恢复STATUS之前我们就不介意使用改变STATUS内容的指令了,一但恢复后,仍然不能使用改变STATUS的指令,直到返回到主程序中.

语句5、6和7 是对PCLATH的保护,其实对于一些小的程序这个是不用保护的,但怎么说呢,为了程序的规范性,以及防止因为某些因素而让PCLATH变成一个不可预料的数据,我们还是在这里对它进行一下保护吧。因为我们的中断服务程序在体0中,所以保护完后就将PCLATH清0

语句8、9是恢复PCLATH的指令在这里也就不多说了

语句10、11,我们前面已经说了在中断返回的时候恢复STATUS的数值需要将高低位颠倒过来,然后放入STATUS寄存器中,这两个语句都不改变状态位,所以可以放心使用

语句12、13 由于此前已经恢复了STATUS所以这个时候我们在恢复W的时候要非常注意不要影响STATUS,所以在这里使用了两个SWAPF语句,字节交换上负负为正,还没有影响到状态位,呵呵。

今天就说到这里了。欢迎朋友们给提出一些看法和意见。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭