发布网友 发布时间:2022-04-12 14:40
共3个回答
热心网友 时间:2022-04-12 16:09
你用的哪一款的PIC单片机,怎么程序还分页??
用了那么久的PIC12/16/18/24四个系列单片机,只有PIC12/16系列的数据存储器有分页。但程序并不在这些“页”上,而是放在和这些“页”毫无关系的程序存储区。
如果你想表达的是,在中断前,你的程序在操作着第二页(即bank1)的寄存器,而你中断程序里是要操作第一个页(即bank0)的寄存器。
你希望推出中断后,继续执行非bank0的寄存器。那么你需要把STATUS寄存器压入堆栈。然后跳出中断前需要做出栈操作
首先前面要声明两个变量W_TEMP和S_TEMP
然后在中断服务程序里这样写:
MOVWF w_TEMP
SWAPF STATUS,W
MOVWF S_TEMP ;入栈操作
……
中断服务程序
……
SWAPF S_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF w_TEMP,W ;出栈操作
这是汇编的写法。
如果是用C语言,那你做好中断的函数体它自动回给你做入栈操作。
BTW:记住,不是程序的分页,而是数据寄存器的分页。应该说中断服务程序操作bank0的寄存器,而不是“中断服务程序在第一分页”。
而且,这东西显然你是没看过PIC的数据手册,比如上面的程序就是PIC16F883的数据手册里告诉你怎么写的,有图为证:
热心网友 时间:2022-04-12 17:27
什么叫跨页中断?热心网友 时间:2022-04-12 19:02
建议你用C编程,根本不用考虑这些问题。我用汇编十几年,用了C以后,毫不犹豫地扔了汇编而用C,并极力推荐周边的同事用C,大家都尝到了用C的甜头!