单片机中断函数是什么(单片机中断函数与普通函数的异同)

海潮机械 2022-12-14 09:12 编辑:admin 99阅读

1. 单片机中断函数与普通函数的异同

中断是单片机进入了中断服务程序,响应并处理发生的突发事件。cpu仍在工作。而暂停是cpu处于停止不工作状态。

2. 单片机中断和子程序调用的区别

我现在也在迷惑这个问题,看单片机的程序里,中断程序明明没有被主程序调用,然而中断程序却可以运行……按照C语言的规则,子函数必须要被主函数调用才能发挥作用,然而在52单片机里,主函数并没有调用中断函数 …………然后我查到了这个: 程序中断和调用子程序有何区别: 1.子程序调用是预先安排好的,程序中断是随机发生的; 2.调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系; 3.子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址 看到这个,大概意思应该是: 中断程序不同于子程序,不需要主函数main调用就能执行。 中断服务程序只需要满足一定条件即可执行,比如定时器/计数器(在写入定时器中断服务程序的前提下)只需要计数“计满”即可触发中断服务程序;外部中断(在写入外部中断的服务程序的前提下)只需要触发外部中断引脚即可自动执行,不需要主函数调用。 子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系 这大概是单片机的特殊之处吧?正常的C语言程序没有这样的吧?我C语言也算新手,这是我的理解

3. 比较中断函数与普通函数的异同

函数间断点是微积分中函数连续性讨论的一个概念,通常是函数在某点没有意义,就是函数的间断点。比如函数y=1/x中,x=0就是一个间断点。

一、对于一般函数:

1、找函数的无定义点(此题为x=0)

2、看无定义点的左右极限是否相等。若相等,则为可去间断点,若不相等,则为不可去间断点。

二、对于分段函数:

1、找函数的分段点(例如x=x0点),

2、看x0点的左右极限是否相等。若相等,且=f(x0),则无间断点;若相等,但≠f(x0),则为可去间断点;若不相等,则为不可去间断点。

扩展资料:

函数概念含有三个要素:定义域A、值域C和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。

一般的,在一个变化过程中,假设有两个变量x、y,如果对于任意一个x都有唯一确定的一个y和它对应,那么就称x是自变量,y是x的函数。x的取值范围叫做这个函数的定义域,相应y的取值范围叫做函数的值域。

4. 单片机的中断函数有什么特点?它是如何定义的?

在开始写中断函数之前,我们来一起回顾一下,单片机的中断系统。

中断的意思(学习过微机原理与接口技术的同学,没学过单片机,也应该知道),我们在这里就不讲了,首先来回忆下中断系统涉及到哪些问题。

(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]

5. 简述中断与函数的相同与区别

计算机系统中,函数是由主程序明确调用,返回一个数值,中断子程序是由计算机系统硬件设备事件触发,何时触发并不确定,操作系统依据优先级选择调用中断子程序处理中断事件, 完成后,返回断点,继续运行主程序。

中断函数是由触发源触发调用的,普通函数是由调用函数调用的

6. 单片机中断函数与普通函数的异同之处

只有汇编语言才能得到精确的时间。

C编译成汇编时,不同的编译器,不同的编译策略都会使最终的程序不一样。如果短时间的延时,可以利用_nop_()来控制,如果是长时间的可以用定时器中断来控制。你自己写函数的话,可以在KEIL调试模式下,单步运行,看左侧窗口中的second,那个是程序从复位到当前的运行秒数(可以看到微妙级的),用不同的参数调用delay,比较下,记住差值就可以了。别忘了把项目使用的晶振数填正确。

7. 单片机中中断函数的结构是怎样的?

1.软件延时

利用多个指令的执行来延时,累加每个指令的运行时间,来计算出延时的总时间。一般写成一个延时函数。

如,以下是10ms软件延时。

delay_10ms() {

int c = 1000; // 调整常数,以达到要求的延时,但很难!

while(c != 0) {

c--;

}

}

以上函数被调用一次,就延时10ms,多次调用可以达到任意更大的时间要求。

!但是,在延时时,就其它什么事也做不了了,就是干等啊!

2.硬件延时

利用定时器/计数器芯片,或用微控制器内部的定时器/计数器,实际上,它就是对晶振的分频(分频系数可编程设置),得到一个精确的低频的周期信号,用这个周期信号(比如10ms)去触发中断,每10ms调用一次定时中断服务程序。在定时中断服务程序中加入计数变量,就可以得到任意的定时了。

在10ms没有到时,微控制器可以运行其它程序,10ms到时再自动进去中断服务程序以处理定时任务,不会像软件延时阻塞了。

3.操作系统中,都有个硬件延时,和定时中断,可以看ucos ii中的源码,节拍时钟,和汇编语言实现的定时中断。

4.硬件延时,要占用一个定时器/计数器硬件资源。

8. 单片机编程在什么时候用到中断程序函数

省略声明和位定义及各变量初如等 进入中断后我们让标志flag为1; 在主程序的大循环里处理;是前面的什么操作影起的中断之后,再进行下面的处理 while(1) { //关掉中断进行处理,上面的要求只是一位进行处理位的,某按键让端引脚电平变化 ES=0;//如果是外部上断就关掉了 if(P10) { P20=0; P21=0; } if((p11=1)&&(p12=1)) { P20=0; P22=0; P23=0; } flag=0; ES=1; //恢复了再打开,处理数据时再怎样操作也不会中断了。机制可能没有预防得那样好 }

9. 简述单片机C语言中函数与中断函数的异同点

应该是PORTA的低4位,循环输出0 比如 num=2时,PORTA=PORTA&FE,第1个I/O口(PA0)将输出0,其他口保留原状 num=3时,PORTA的第2个I/O口(PA1)将输出0,其他口保留原状 num=4时,PORTA的第3个I/O口(PA2)将输出0,其他口保留原状 num=5时,PORTA的第4个I/O口(PA3)将输出0,其他口保留原状 num=40时,PORTA的低4位(PA0~PA3),将全部置1 因此,程序可能是跑马灯一样的效果,四个灯,依次亮起来,然后一段时间后熄灭,再依次亮起来,一直这样循环下去

10. 单片机中断函数与普通函数的异同点

例如定时器0中断: void timer0_sev (void) interrupt 1 timer0_sev是中断程序名称,可自己定 interrupt 1指的是中断号,不能随意写 0 1 2 3 4 分别是外部中断0 定时器0 外部中断1 定时器1 串口中断。 有的还在中断序号后面写 using 0 using 1等,指的是用哪一个寄存器组,防止内存冲突,应该没什么用途 我编程写两个中断程序,专门注明 using 1 using 2 用不同的分组 可查反汇编代码,根本没有修改PSW寄存器的语句 两个中断都是 PUSH ACC PUSH PSW 中断结束前 POP ACC POP PSW

11. 单片机中断函数有什么特点

首先可以肯定,中断服务函数可以写在其他文件中,并不一定要放在main.c中。

中断服务函数如果有特定的关键字修饰,比如keil c51用interrupt,不仅可以放在任意文件中,甚至可以用static 把中断函数定义成局部的函数都没问题。

其他的,一般需要自己定义入口调用,比如某系统的定时中断入口放在0x0008地址,则在0x0008地址放一条长跳转指令,或者直接把函数的地址放在0x0008地址,这个根据系统不同,可能有不同的要求。

另外,有的c把引导程序会有一个默认的中断服务地址表,用户只需要根据系统的要求,按照一定的格式、名称定义好中断服务程序,系统就会自动调用。