您的位置 首页 FPGA

单片机_C言语函数_中止函数(中止服务程序)

在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应

在开端写中止函数之前,咱们来一同回想一下,单片机中止体系

中止的意思(学习过微机原理与接口技能的同学,没学过单片机,也应该知道),咱们在这儿就不讲了,首要来回想下中止体系涉及到哪些问题。

(1)中止源:中止恳求信号的来历。(8051有3个内部中止源T0,T1,串行口,2个外部中止源INT0,INT1(这两个低电平有用,上面的那个横杠不知道怎样加上去))

(2)中止呼应与回来:CPU收集到中止恳求信号,怎样转向特定的中止服务子程序,并在履行完之后回来被中止程序持续履行。期间涉及到CPU呼应中止的条件,现场维护,现场康复。

(3)优先级操控:中止优先级的操控就形成了中止嵌套(8051答应有两级的中止嵌套,优先权次序为INT0,T0,INT1,T1,串行口),同一个优先级的中止,还存在优先权的凹凸。优先级是能够编程的,而优先权是固定的。

80C51的原则是①同优先级,先呼应高优先权②低优先级能被高优先级中止③正在进行的中止不能被同一级的中止恳求或低优先级的中止恳求中止。

80C51的中止体系涉及到的中止操控有中止恳求,中止答应,中止优先级操控

(1)3个内部中止源T0,T1,串行口,2个外部中止源INT0,INT1

(2)中止操控寄存器:守时和外中止操控寄存器TCON(包括T0、T1,INT0、INT1),串行操控寄存器SCON,中止答应寄存器IE,中止优先级寄存器IP

详细的是什么,包括哪些标志位,在这儿不讲了,一切书上面都会讲。

在这儿咱们讲下留意的事项

(1)CPU呼应中止后,TF0(T0中止标志位)和TF1由硬件主动清0。

(2)CPU呼应中止后,在边缘触发方法下,IE0(外部中止INT0恳求标志位)和IE1由硬件主动清零;在电平触发方法下,不能主动清楚IE0和IE1。所以在中止回来前有必要撤出INT0和INT1引脚的低电平,不然就会呈现一次中止被CPU屡次呼应。

(3)串口中止中,CPU呼应中止后,TI(串行口发送中止恳求标志位)和RI(接纳中止恳求标志位)有必要由软件清零。

(4)单片机复位后,TCON,SCON给位清零。

C51言语答应用户自己写中止服务子程序(中止函数)

首要来了解程序的格局:

void 函数名() interrupt m [using n]

{}

关键字interrupt m [using n]表明这是一个中止函数

m为中止源的编号,有五个中止源,取值为0,1,2,3,4,中止编号会告知编译器中止程序的进口地址,履行该程序时,这个地址会传个程序计数器PC,所以CPU开端从这儿一条一条的履行程序指令。

n为单片机作业寄存器组(又称通用寄存器组)编号,共四组,取值为0,1,2,3

中止号 中止源
0 外部中止0
1 守时器0
2 外部中止1
3 守时器1中止
4 串行口中止

这5个中止源的中止进口地址为:(在上一篇文章中讲到的ROM前43个存储单元便是他们,这40个地址用来寄存中止处理程序的地址单元,每一个类中止的存储单元只要8B,明显不是中止处理的程序,而是寄存着中止处理程序的真实地址)

INT0:0003H 0

T0:000BH 1

INT1:0013H 2

T1: 001BH3

串口: 0023H 4

中止向量(中止进口地址)= 中止号x8 +3

前面m意思很清楚,不同的m值表明这个函数是针对不同的中止源,比方m为1是表明它是守时器0的中止函数,

如void time0() interrupt 1{}

那么后边的using n 又是什么意思呢?在正在履行一个特定使命时,有更紧迫的作业需求CPU来处理,涉及到中止优先权。高优先权中止低优先权正在处理的程序,所以最好给每个优先程序分配不同的寄存器组。

CPU正在处理某个事情,忽然别的一个事情需求处理,所以进入中止后,而你不想将现在履行的程序的各寄存器状况入栈,那么能够把这个中止程序放入另一个寄存器组,如切换到1组,然后退出中止时,再切回到0组(本来的程序在0组)。

为了更好的了解这儿意思,你能够看看作业寄存器组的效果是什么。

下面的留意事项转自网络上其他朋友的文章(收拾下,重复的去掉了,写的非常好):

(1)中止函数不能进行参数传递
(2)中止函数没有回来值
(3)在任何情况下都不能直接调用中止函数

(4)中止函数运用浮点运算要保存浮点寄存器的状况。
(5)假如在中止函数中调用了其它函数,则被调用函数所运用的寄存器有必要与中止函数相同,被调函数最好设置为可重入的。
(6)C51编译器对中止函数编译时会主动在程序开端和完毕处加上相应的内容,详细如下:在程序开端处对ACC、B、DPH、DPL和PSW入栈,完毕时出栈。中止函数未加using n修饰符的,开端时还要将R0~R1入栈,完毕时出栈。如中止函数加using n修饰符,则在开端将PSW入栈后还要修正PSW中的作业寄存器组挑选位。
(7)C51编译器从肯定地址8m+3处发生一个中止向量,其间m为中止号,也即interrupt后边的数字。该向量包括一个到中止函数进口地址的肯定跳转。
(8)中止函数最好写在文件的尾部,而且制止运用extern存储类型阐明。避免其它程序调用。

(9)在规划中止时,要留意的是哪些功用应该放在中止程序中,哪些功用应该放在主程序中。一般来说中止服务程序应该做最少数的作业,这样做有许多优点。首要体系对中止的反响面更宽了,有些体系假如丢掉中止或对中止反响太慢将发生非常严峻的结果,这时有足够的时刻等候中止是非常重要的。其次它可使中止服务程序的结构简略,不简单犯错。中止程序中放入的东西越多,他们之间越简单起抵触。简化中止服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。中止服务程序的规划对体系的胜败有至关重要的效果,要细心考虑各中止之间的联系和每个中止履行的时刻,特别要留意那些对同一个数据进行操作的ISR.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/259976.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部