在main主程序里面
LOOP GOTO LOOP
这条程序,会不停的执行,到了TMR0溢出的时候就会执行中断程序
ORG 0004H为中断程序的地址
这是个流水灯程序,:/定时器装初值 执行while(1)
定时器标志位溢出时 程序就进入中断了
中断中 副初值 清除定时器中断的标志位
s加1
主函数while1中 如果s加到25(就是中断了25次) 就 清零s 将c口移位
你用什么型号的pic单片机啊 你确定程序可以运行么???
你用的哪一款的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的数据手册里告诉你怎么写的,有图为证:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)