精华内容
下载资源
问答
  • PLC子程序与中断程序的区别
    千次阅读
    2019-02-28 10:08:42

    通讯都用到了中断,可中断到底是个什么东西?它和调用子程序有什么区别呢?

     

    因为中断是由系统调用的,不知道什么时候中断,所以你可以选择允许中断或者不允许中断,这就好比你正在干工作时,电话铃响了,你可以选择接电话也可以选择不接电话,中断就好比电话铃,你不知道电话铃什么时候响起。开放中断就是允许中断,就好比电话铃响允许你接电话,禁止中断就是不允许中断,就好比电话铃响不允许你接电话。子程序是条件调用的程序,你可以知道什么时候调用,子程序是为了优化程序结构。 

     

    简单一句,中断是随时发生的,时间不确定。而子程序则时间确定,跟系统设计顺序有关系,起简化、优化作用。 

     

    用在随机事件,只是中断的一个应用。

     

    有些中断的应用,其事件是可以预料,也能确定的。比如说定时。

     

    子程序控制的内容与主程序是一样的,都是在扫描周期结束后才变化的,而中断就是马上去做,不等这个扫描周期结束 。

    更多相关内容
  • 西门子200 PLC 中断程序做流量累计 程序 西门子200 PLC 中断程序做流量累计 程序
  • 中断程序要注意哪些方面?

    千次阅读 2021-08-20 16:51:07
    它包括中断服务程序的入口地址。 当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。 ...

    与每类I/O设备相关的进程都有一个靠近内存底部的地址,称作中断向量。它包括中断服务程序的入口地址。

    当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断

    一个中断分为哪几个部分:
    中断请求、中断响应、中断处理、中断返回

    中断处理过程:

    (1)保护被中断进程现场。为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。

    (2)分析中断原因,转去执行相应的中断处理程序。在多个中断请求同时发生时,处理优先级最高的中断源发出的中断请求。

    (3)恢复被中断进程的现场,CPU继续执行原来被中断的进程。

    三个大注意事项

    1、中断函数代码应尽量简洁。一般不宜在中断函数内编写大量复杂冗长的代码;应尽量避免在中断函数内调用其他自定义函数;

    2、尽量避免在中断内调用数学函数。因为某些数学函数涉及相关的库函数调用和中间变量较多,可能出现交叉调用。在必须使用数学函数时,可考虑将复杂的数学函数运算任务交给主程序完成,中断函数通过全局变量引用其结果;

    3、宏的定义与调用。在中断函数中调用宏,可减少在函数调用中压栈与出栈的开销。

    九个小注意事项

    1、中断函数不能进行参数传递

    2、中断函数没有返回值

    3、在任何情况下都不能直接调用中断函数

    4、中断函数使用浮点运算要保存浮点寄存器的状态。

    5、如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同,被调函数最好设置为可重入的。
    6、(可忽略)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:

    在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。

    中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。

    如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。

    C51编译器从绝对地址8m 3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。

    7、中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。

    8、在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。

    首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的。

    其次它可使中断服务程序的结构简单,不容易出错。中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。

    9、中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的中断

    举例说明

    中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

    __interrupt double compute_area (double radius) 
    {
        double area = PI * radius * radius;
        printf("\nArea = %f", area);
        return area;
    }
    

    这个函数有太多的错误了:

    1. ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。
    2. ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。
    3. 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。
    4. 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。

    解释重入:

    printf()经常有重入解释

    不可重入函数不可以在它还没有返回就再次被调用。例如printf,malloc,free等都是不可重入函数。因为中断可能在任何时候发生,例如在printf执行过程中,因此不能在中断处理函数里调用printf,否则printf将会被重入。

    函数不可重入大多数是因为在函数中引用了全局变量。例如,printf会引用全局变量stdout,malloc,free会引用全局的内存分配表。

    如果中断发生的时候,当运行到printf的时候,假设发生了中断嵌套,而此时stdout资源被占用,所以第二个中断printf等待第一个中断的stdout资源释放,第一个中断等待第二个中断返回,造成了死锁。

    不可重入函数指的是该函数在被调用还没有结束以前,再次被调用可能会产生错误。可重入函数不存在这样的问题。

    不可重入函数在实现时候通常使用了全局的资源,在多线程的环境下,如果没有很好的处理数据保护和互斥访问,就会发生错误。

    常见的不可重入函数有:

    	printf --------引用全局变量stdout
    	malloc --------全局内存分配表
    	free   --------全局内存分配表
    

    在unix里面通常都有加上_r后缀的同名可重入函数版本。如果实在没有,不妨在可预见的发生错误的地方尝试加上保护锁同步机制等等。

    满足下列条件的函数多数是不可重入的:

    (1)函数体内使用了静态的数据结构;
    
    (2)函数体内调用了malloc()或者free()函数;
    
    (3)函数体内调用了标准I/O函数。
    

    可重入函数

    void strcpy(char* lpszDest, char* lpszSrc)
    {
      while(*lpszDest++ = *lpszSrc++);
      *dest=0;
    }
    

    非可重入函数1

    char cTemp; // 全局变量
    void SwapChar1(char* lpcX, char* lpcY)
    {
      cTemp = *lpcX; 
      *lpcX = *lpcY; 
      lpcY = cTemp; // 访问了全局变量,在分享内存的多个线程中可能造成问题
    }
    

    非可重入函数2

    void SwapChar2(char* lpcX, char* lpcY)
    {
      static char cTemp; // 静态局部变量
      cTemp = *lpcX; 
      *lpcX = *lpcY; 
      lpcY = cTemp; // 使用了静态局部变量,在分享内存的多个线程中可能造成问题
    }
    

    如何写出可重入的函数?在函数体内不访问那些全局变量,不使用静态局部变量,坚持只使用局部变量,写出的函数就将是可重入的。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。

    展开全文
  • 一个中断程序的示例,可以一目了然的指导用c程序如何空心化i汇总短发是一个中断程序的示例,可以一目了然的指导用c程序如何空心化i汇总短发是一个中断程序的示例,可以一目了然的指导用c程序如何空心化i汇总短发是一...
  • python中断程序运行的几种方法

    千次阅读 2022-02-26 20:08:08
    程序终止后shell运行不受影响。 二、在命令行输入os._exit(0)。关闭整个shell 三、按Ctrl+C快捷键。强制终止程序执行,不影响shell继续执行。 四、关闭运行python的程序、IDE。 ...

    一、在命令行输入sys.exit(0)。程序终止后shell运行不受影响。

     二、在命令行输入os._exit(0)。关闭整个shell

    三、按Ctrl+C快捷键。强制终止程序执行,不影响shell继续执行。

    四、关闭运行python的程序、IDE。

     

     

    展开全文
  • proteus单片机中断程序 利用单片机的P0口做输出接8只发光二极管,P3.2引脚接独立按键产生外部中断信号。编写程序,当程序正常运行时8个发光二极管做流水灯显示,当外部中断0有中断请求信号时,8只发光二极管全部点亮...

    proteus单片机中断程序

    利用单片机的P0口做输出接8只发光二极管,P3.2引脚接独立按键产生外部中断信号。编写程序,当程序正常运行时8个发光二极管做流水灯显示,当外部中断0有中断请求信号时,8只发光二极管全部点亮约5s后返回原状态。在外部中断0中断服务状态,如果外部中断1有中断请求信号,则8只发光二极管全部熄灭约5s后返回原状态。

    Proteus仿真电路图如下

    在这里插入图片描述

    程序分析:

    主程序中首先初始化中断,打开INT1和INT0,并打开总中断EA,用IP设置INT1中断优先级高于INT0中断,之后初始化LED灯,让LED灯第一个亮。随后进入while循环函数中,让P0通过不断左移并且延时一段时间来实现流水灯,当小灯移到最后一个灯时要将P0重新初始化为0x01。
    中断INT0中用全局变量a来保存当前LED灯亮的情况(P0的值),全亮并延迟5秒,将a的值赋值回P0使LED灯依然保持之前的情况。
    中断INT1中用全局变量b来保存当前LED灯亮的情况(P0的值),全亮并延迟5秒,将b的值赋值回P0使LED灯依然保持之前的情况。
    程序中用到了中断系统和P0口控制LED灯。
    代码如下:

    #include<reg51.h>
    #include<intrins.h>
    unsigned char a,b;
    void delay(unsigned char x)
    {
    	unsigned int y=5000;
    	while(x--)
    		while(y--);
    }
    void main()
    {
    	EA=1;
    	EX0=1;
    	EX1=1;
    	IT0=1;
    	IT1=1;
    	IP=0x04;
    	
    	P0=0x01;
    	while(1)
    	{
    		P0<<=1;
    		if(P0==0x00) P0=0x01;
    		//P0=_crol_(P0,1);
    		delay(2);
    		
    	}
    }
    void INT_0() interrupt 0
    {
    	a=P0;
    	P0=0xff;
    	delay(8);
    	P0=a;
    }
    void INT_1() interrupt 2
    {
    	b=P0;
    	P0=0x00;
    	delay(8);
    	P0=b;
    }
    
    展开全文
  • Arduino 中断程序运行及注意事项

    千次阅读 2021-05-27 16:56:23
    使用attachInterrupt()函数,利用Arduino的引脚触发中断程序。arduino不是所有引脚都能实现中断,具体要求见下表: Arduino控制板 支持中断的引脚 Uno, Nano, Mini 2, 3 Mega, Mega2560, MegaADK 2, 3, 18...
  • 中断程序设计(微机原理实验三)

    千次阅读 2021-03-30 21:15:23
    实验三 中断程序设计 实验目的: 1.掌握中断概念,掌握中断程序设计方法; 2.掌握中断程序调试方法。 实验步骤与任务: 任务一(占总分30%): 1.编辑 利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM3.ASM...
  • 汇编中断程序编写步骤

    千次阅读 2020-05-18 15:30:36
  • 04-ABB工业机器人中断程序样例

    千次阅读 2019-03-18 16:45:16
    前段时间一个项目需要机器人将自己的坐标定时发送给上位机,我师父随手写了一个中断样例,在这里...这样只要发现中断识别号,就会自动执行软中断程序。 样例如下: 第一、变量的申明: 第二、主程序: 第三...
  • 中断程序要注意哪些方面

    千次阅读 2020-04-21 10:13:34
    它包括中断服务程序的入口地址。 当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。...
  • 中断程序设计(微机原理实验三)

    千次阅读 2021-03-30 21:04:33
    实验三 中断程序设计 实验目的: 1.掌握中断概念,掌握中断程序设计方法; 2.掌握中断程序调试方法。 实验步骤与任务: 任务一(占总分30%): 1.编辑 利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM3.ASM...
  • 该示例提供了中断处理的详细代码,含驱动程序和应用程序。用户可以直接调用接口进行中断函数的处理。
  • python中断程序执行(不抛出异常)

    千次阅读 2020-10-16 15:35:51
    当运行Python程序时,正常都是从上到下执行脚本中所有代码,当python解释器执行到脚本的末端就会自动退出,但是有时我们可能需要调用内建函数显示退出程序。 1.sys.exit(n) 退出程序引发SystemExit异常, 可以捕获...
  • 第十四课(7)定时器中断程序示例

    千次阅读 2020-04-17 12:34:56
    ②当TCNTn == TCMPn,可以产生中断,也可以使对应的PWM引脚翻转(比如原来是高电平,现在是低电平) ③TCNTn继续减1 当TCNTn == 0时,可以产生中断,PWM引脚再次翻转 ④TCNTn == 0时,可自动加载初值 CNTn 、TCMPn的...
  • 单片机中断程序详解(转)

    万次阅读 多人点赞 2017-07-29 10:21:41
    比如小七我现在正在电脑前写帖子,突然老妈叫我帮她下楼拿点东西,于是我就收到了老妈给我的一个中断(可以叫做外部中断),当我去拿东西时,突然尿急(内部中断,尿袋快要撑爆了),这又是一个中断,!我们把引起中断...
  • TinyThread源码分析之中断 转载请注明来源:cuixiaolei的技术博客 ... TinyThread 是基于Cortex-... IPSR(中断程序状态寄存器),IPSR包含了当前正在执行的中断服务程序编号,用于识别当前中断。  Cortex-M0处理器...
  • 中断系统
  • c语言编写51单片机中断程序,执行过程是怎样的?

    千次阅读 多人点赞 2017-10-11 09:53:00
    Q:c语言编写51单片机中断程序,执行过程是怎样的?   例如程序:#include&lt;reg52.h&gt; void main(void) { EA=1; //开放总中断 EX0=1; //允许使用外中断 IT0=1; //选择负跳变来触发外中断 P0=0...
  • 执行该语句会直接退出程序,这也是经常使用的方法,也不需要考虑平台等因素的影响,一般是退出Python程序的首选方法。 该方法中包含一个参数status,默认为0,表示正常退出,也可以为1,表示异常退出。 1 import sys...
  • 各种Arduino外部中断程序

    万次阅读 多人点赞 2017-02-12 14:57:08
    CPU执行时原本是按程序指令一条一条向下顺序执行的。 但如果此时发生了某一事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务). 待CPU将事件B处理完毕后, 再回到原来...
  • 响应中断条件是:中断使能和中断标志同时成立时. 一般来讲,响应中断后,有硬件清标志和软件清标志两种.(如果硬件不能清标志,说明书会说明). 单片机要靠查询中断标志来判断是否要进入中断,如果你不清除中断标志,本次...
  • Sublime Text 中断程序的快捷键

    千次阅读 2019-01-29 11:51:15
    跑起来的程序中断的话, 在菜单栏的 Tool &gt; Cancel Build 可以停止. 但是使用快捷键 Ctrl + break 是什么鬼? 有谁可以告诉我 win10 笔记本上哪个键是 break 么?! o(゚Д゚)っ! 不管了, 通过查询谷歌得知, ...
  • 微机实验课-实验三中断程序设计

    万次阅读 多人点赞 2018-11-07 18:02:39
    结合实验指导书,1)掌握中断概念,掌握中断程序设计方法;2)掌握中断程序调试方法。 一,建立本次实验的工程文件 如前面实验一样,复制实验指导书上的代码,建立如 shiyan3.asm文件,放在带汇编工具的目标文件夹...
  • 51单片机定时器中断程序

    万次阅读 多人点赞 2016-10-13 12:14:48
    程序运行开始,A灯先亮5秒,然后灭了到B灯亮5秒,B再灭再到C灯亮5秒,C灭,程序结束,不再运行。这程序该怎么写?用定时器精确定时……晶振11.092MHZ。 #include "REG52.H" /* * */ sbit LED_A = P1^0; sbit LED...
  • 中断程序设计

    千次阅读 2014-11-30 16:15:35
    中断程序设计 实验目的: 1.掌握中断概念,掌握中断程序设计方法 2.掌握中断程序调试方法 实验步骤: 1.编辑 利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM3.ASM的文本文件,内容如下: ASSUME DS...
  • 我没有修改过中断向量地址表,也没有改过中断程序,只是想直接调用中断程序10h的2号子程序改变光标位置,可是执行到int 10h后下一步就无法执行了,查看中断程序10h的地址第一行的指令就是三个问号. 其实我发现我调用了几...
  • 单片机MSP430 - Timer_A 定时器中断程序

    万次阅读 2016-11-21 11:13:56
    一、利用定时器定时功能,实现定时器单个溢出中断,实现 P3.0 方波输出 #include "cc430x613x.h" void main() { WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器 P3DIR |= 0x04; // P3口初始化,设置为输出模式
  • STM32串口USART1的查询和中断方式程序

    热门讨论 2015-11-23 17:17:59
    资源介绍和使用方法见博客:http://www.cnblogs.com/zitech/p/4989001.html
  • 中断 为了对计算机的硬件(键盘,硬盘,鼠标等)进行管理,内核需要和这些硬件通信。一种方式是使用轮训(polling)的方式,这种方式周期性地查看所有硬件设备的状态并做相应处理,这会造成很多不必要的系统开销。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 677,273
精华内容 270,909
关键字:

中断程序