PIC单片机汇编语言的中断程序 ,求人分析一下怎么运行的

PIC单片机汇编语言的中断程序 ,求人分析一下怎么运行的,第1张

很简单的。

在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的数据手册里告诉你怎么写的,有图为证:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12089400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存