单片机中使用中断程序会延长主程序执行的时间吗

2021-01-11 19:46:38 字数 3322 阅读 9164

1楼:

可以的,但是得判断中断标志位,判断有中断时跳转到reti,正常执行主程序时不跳转。 其实还不如把主程序写两遍,一个是不带rei的主程序,一个是中断服务程序,后面要加reti 举个例子,假设你可以判断tf0(中断0的溢出标志) *** 000bh ajmp main1 *** 0100h main: …… …… main1:

…… …… jb tf0,int0 …… …… ajmp main int0: clr tf0 reti end 这下够明白了吧

为什么单片机中断程序执行时主程序还在慢慢运行?初学~~~

2楼:匿名用户

你从哪看出来程序还在运行的,你的中断只有一句,马上就执行完成了,就跳出中断函数继续执行之前的程序了,你要是想观察中断后主程序是否运行,应该用死循环或者延时吧程序指针留在中断函数里,比如你可以在中断里延时个2s,等跳出中断后再观察主程序跑到哪儿了就一目了然了

3楼:

前面的说的都有各自的说明,我想说的是,你选择低电平触发,你怎么触发它?

手动?还是一直给它一个低电平?如果一直给它低电平的话,因为中断是随机的,我们不可能知道它什么时候会发生中断,又因为你的终端函数太短了,执行一次中断只需要一个机器周期,一直接地的话,随时都在发生中断,所以你原先设置的0.

5s变一次,就变成了差不多3s变一次,其实你仔细观察它或许不是精确的几s变一次,由于中断的随机性,导致你的0.5s的时间也发生了随机性。

4楼:生活如歌

和前面的朋友说的一样。你的中断程序太短,执行时间很快,所以你感觉不到它的执行。

5楼:匿名用户

单片机是单线程的,不可能同时运行。

6楼:匿名用户

建议先了解一下中断的概念。它是处理异常事件时暂停正在运行的程序,跳转到一个特定地址去响应异常事件。随后继续执行原来的程序。详细概念到书上查查或网上搜一下

7楼:匿名用户

遇到和您一样的问题,请问您现在知道原因吗?

51单片机中中断服务程序占用时间不?

8楼:

答:你的意思是定时10个周期,每一个周期中断一次,在中断程序里加1 至10吗?

那么加到10以后呢?接下来干什么?接下来的程序也在中断程序里吗?

照你的程序,不会影响计时时间,只是在加到10以后,执行下一步工作时要多一些中断程序用去的时间。这是因为中断程序在执行加够10以后的程序时,前几句程序已经用一些时间。像这个在一般的设计中都不考虑。

中断函数不影响定时器的工作,定时器是完全独立的。

可以在中断程序中关闭定时器。

9楼:匿名用户

在某种意思上,中

断更具有实时性,中断处理是根据程序段的大小花费时间的,中断程序段如果比定时时间还长,那个这个定时在主程序里失去意义了;比如中断定时为10个机器周期,而中断程序段需要执行11个机器周期,那么意味着紧着的中断程序失去了理论的实时性;cpu无法在设计的要求下执行指令,所以,一般情况下,要考虑程序段是否能在中断定时时间内完成;若能完成,那么使用非自动赋值时也存在时间差异,两个高低8位的赋值语句也将至少浪费两个机器(还需要放在中断的最前面),所以要求时间较为精确时,一定要使用自动装载方式,若是使用非中断方式,c语言程序是无法保证的,要使用汇编,一个一个指令进行计算。

而所谓的查询等待,cpu在这个时间段内就执行累加或自减计数,不做任何工作,这个时间就被白白的浪费了;

中断程序中可以关闭定时器的,在主程序里设置一个变量,不断地查询这个变量是否为要关闭定时器的值,而中断程序可以为这个变量赋值。

如:...while(1)

}interrupt 1

10楼:匿名用户

中断程序是肯定要占用时间的,在中断中可以关闭定时器的;

一般可以在中断中做计数,累加,设置标志位,到主循环里面查询比较好,

当然主要是看你要求的时间精度以及允许的误差了,如果不是特别高的话也是没太大影响的,我用t1技术,t0定时,可以测65000hz内的频率,误差不查过50,反正可以达到我的频率测量效果了

11楼:匿名用户

如果要保证实时性,那就要对每条指令的执行时间相当的了解,只有这样才能够准确地进行时间的设定;

如果改用查询等待,则在计时时会占用主程序的时间,而利用计时器的中断程序则可以和主程序同时进行,可以让单片机的效率更高,当然用查询也是可以的,只是单片机此时需要占用主程序段的时间;

在中断程序中和主程序中是一样的,均可以对计时器进行关闭和开启操作。

12楼:匿名用户

需要占用时间,时间的长短 由 中断服务程序 的长短有关。

单片机中中断服务子程序没执行完能强行跳回主程序吗,若不能为什么?若能,相应的中断标志位会被清零吗

13楼:匿名用户

当然可以强行跳回主程序,不影响中断标志位的清零,只要进入中断,该硬件清零的就自动清零,但强行跳回主程序,单片机会认为一直在执行中断程序,因此以后有中断发生时也不会再进入中断程序。所以不能这样做,用reti就会跳回主程序。

14楼:寡人天才

goto语句能随便跳

硬件清零的中断标志会清0

软件手动清0的中断标志不会自动清0

51单片机,如果中断函数比较长,执行到一半又触发了这个中断,程序会停止从头执行,还是执行结束后响应中

15楼:

51单片机中,中断分高低两个优先级,高优先级的中断能打断低优先级的中断。

但同级中断是不能打断同级中断的!无论该中断函数有多长,在执行到一半这个中断又发生了,还是要等到该中断函数执行完毕,并再执行了一条主程序指令后才会再次进入该中断。

不过,若楼主恰好在这个低优先级中断服务程序中修改了该中断为高优先级,那么如果该中断函数比较长,执行到一半又触发了这个中断,则该中断函数就会被重新从头开始执行(中断嵌套)。这是因为除串口中断以外的其他中断,在 cpu 响应该中断,程序转入该中断函数前就已经将该中断的中断标志清零了。

另外,51的串口中断比较特别,因为需要软件清除串口中断标志,所以只要在未清串口中断标志前,是不会发生上述这样的中断嵌套的。

16楼:匿名用户

如果同一个中断触发的话,会在你中断退出后马上又进入中断。如果退出中断时清除了标志的话,就当什么都没发生。

不会把你正在执行的中断程序给中断了。除非是另外一个更高优先级的中断被触发。

17楼:in奋斗

会重新执行中断函数 执行完以后再接着刚才的一半执行

判断题1在计算机中用来解释执行程序中指令的

1楼 匿名用户 第一题是对的,在电脑中,用来解释 执行程序中指令的部件为控制器。控制器是 处理器的一部分。 处理器是电脑的心脏,由运算器和控制器组成,内部结构分为控制器 运算器和存储器,这三个部分相互协调,可以进行判断 运算和并控制电脑各部分协调工作。 目前流行的 处理器为英特尔酷睿 处理器,分为双...