精华内容
下载资源
问答
  • 80C51单片机 中断系统及其应用;3.3.1 80C51单片机中断系统;3.3.1 80C51单片机中断系统; 80C51单片机有5个中断源2个中断优先级它的中断处理程序可实现两级嵌套有较强的中断处理能力 单片机中断系统的管理是通过...
  • C51 单片机中断函数的定义及应用 C51 函数声明对 ANSI C 作了扩展具体包括 1.中断函数声明 中断声明方法如下 void serial_ISR interrupt 4 using 1 { /* ISR */ } 为提高代码的容错能力在没用到的中断入口处生成 ...
  • C51单片机中断定义

    2019-09-17 00:42:38
    作者:小J 文章来源:www.EC66.com 点击数: 更新时间:2005-6-2 C51函数声明对ANSI C作了扩展,具体包括: 1. 中断函数声明: 中断声明方法如下: void serial_ISR () interrupt ...

    作者:小J 文章来源:www.EC66.com 点击数: 更新时间:2005-6-2

    C51函数声明对ANSI C作了扩展,具体包括:

    1. 中断函数声明:

    中断声明方法如下:

    void serial_ISR () interrupt 4 [using 1]

    {

    /* ISR */

    }

    为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。

    /* define not used interrupt, so generate "IRET" in their entrance */

    void extern0_ISR() interrupt 0{}    /* not used */

    void timer0_ISR () interrupt 1{}    /* not used */

    void extern1_ISR() interrupt 2{}    /* not used */

    void timer1_ISR () interrupt 3{}    /* not used */

    void serial_ISR () interrupt 4{}    /* not used */

    2. 通用存储工作区

    3. 选通用存储工作区由using x声明,见上例。

    4. 指定存储模式

    由small compact 及large说明,例如:

    void fun1(void) small {  }

    提示:small说明的函数内部变量全部使用内部RAM。关键的经常性的耗时的地方可以这样声明,以提高运行速度。

    5. #pragma disable

    在函数前声明,只对一个函数有效。该函数调用过程中将不可被中断。

    6. 递归或可重入函数指定

    在主程序和中断中都可调用的函数,容易产生问题。因为51和PC不同,PC使用堆栈传递参数,且静态变量以外的内部变量都在堆栈中;而51一般使用寄存器传递参数,内部变量一般在RAM中,函数重入时会破坏上次调用的数据。可以用以下两种方法解决函数重入:

    a、在相应的函数前使用前述“#pragma disable”声明,即只允许主程序或中断之一调用该函数;

    b、将该函数说明为可重入的。如下:

    void func(param...) reentrant;

    KeilC51编译后将生成一个可重入变量堆栈,然后就可以模拟通过堆栈传递变量的方法。

    由于一般可重入函数由主程序和中断调用,所以通常中断使用与主程序不同的R寄存器组。

    另外,对可重入函数,在相应的函数前面加上开关“#pragma noaregs”,以禁止编译器使用绝对寄存器寻址,可生成不依赖于寄存器组的代码。

    7. 指定PL/M-51函数

    由alien指定。

    转载于:https://my.oschina.net/XTechFly/blog/639647

    展开全文
  • C51单片机中断实验

    2021-04-28 22:59:53
    要求通过中断方式检测有无按键 判断哪个按键(编号0-9),并且在数码管上显示对应的0-9 代码部分 #include<reg51.h> char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char key_buf[]={...

    实验要求:

    • 要求通过中断方式检测有无按键
    • 判断哪个按键(编号0-9),并且在数码管上显示对应的0-9

    代码部分

    #include<reg51.h>
    char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
    char key_buf[]={0xee,0xde,0xbe,0xed,0xdd,0xbd,0xeb,0xdb,0xbb,0xe7};
    void getKey() interrupt 0{
        char key_scan[]={0xef,0xdf,0xbf,0x7f};
        char i=0,j=0;
        for(i=0;i<4;i++){
            P2=key_scan[i];
            for(j=0;j<10;j++){
                if(key_buf[j]==P2){
                    P0=led_mod[j];
                    break;
                }}}
        P2=0x0f;
            }
    void main(void){
        P0=0x00;
        IT0=1;
        EX0=1;
        EA=1;
        P2=0x0f;
        while(1);
    }
    

    原理图

    原理图

    展开全文
  • C51单片机学习笔记(四)——单片机的中断系统及应用 文章目录C51单片机学习笔记(四)——单片机的中断系统及应用1.单片机的中断系统2.中断需要设置的4个寄存器 1.单片机的中断系统 中断的概念: CPU在处理某一事件A时...

    C51单片机学习笔记(四)——单片机的中断系统及应用

    1.单片机的中断系统

    • 中断的概念:
      CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断产生);
      CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
      待CPU将事件B处理完毕后,再回到原来事件A中断的地方继续处理事件A(中断返回),这一过程称为中断。
      在这里插入图片描述
    • 引起CPU中断的根源叫做中断源。中断源向CPU的请求,叫做中断请求。
      CUP暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再
      回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的
      部件称为中断系统(中断机构)。在这里插入图片描述
    • 51单片机的中断源:引起中断的事件称为中断源,51单片机一共有5个中断源,如下图:
    • 中断优先级:当单片机正在执行主程序时,如果发生了几个中断请求,单片机会由根据中断优先级寄存器的默认优先级进行处理,如下表:
      在这里插入图片描述
    • 中断嵌套:51单片机最多可以执行二级嵌套:
      在这里插入图片描述

    2.中断需要设置的4个寄存器

    • 中断允许寄存器IE
      CPU对中断源允许或不允许,由中断允许寄存器IE控制,IE在特殊功能寄存器中,字节地址为A8H,编程时可对寄存器的每一位单独操作,单片机复位时IE的各个位全部变为0.
      在这里插入图片描述
      在这里插入图片描述
    • 中断优先级寄存器IP
      中断优先级寄存器IP在特殊功能寄存器中,字节地址为B8H,IP用于设定各个中断源属于两级中断中的哪一级,单片机复位时,IP全部赋值为0
      在这里插入图片描述
      在这里插入图片描述
      注意:高优先级中断可以打断低优先级中断而形成中断嵌套,同优先级中断之间不能形成嵌套,低优先级中断不能打断高优先级中断。一般情况下,中断优先级寄存器不需要设置,而采用默认设置。
    • 定时器、计数器工作方式寄存器TMOD:
    • TMOD在单片机内部的特殊功能寄存器中,字节地址为89H,不能位寻址(编程时不能单独操作各个位,只能采用字节操作),该寄存器用来设定定时器的工作方法及功能选择,单片机复位时,TMOD全部为0.
      在这里插入图片描述
      在这里插入图片描述
    • 中断控制寄存器TCON:
      TCON在特殊功能寄存器中,字节地址为88H,可以进行位寻址,该寄存器用于控制定时器/计数器的开启停止、标志定时器/计数器的溢出和中断情况,还可对外部中断进行设置,单片机复位时TCON全部为0.
      在这里插入图片描述
    • 中断系统的工作原理图:
      在这里插入图片描述
    • 中断程序的写法格式:
    void 函数名() interrupt 中断号
    {
    	中断服务程序的语句
    }
    

    3.使用中断控制流水灯

    #include<reg52.h>
    #define uchar unsigned char
    #define LED P2
    void main()
    {
    	EA = 1;	 //中断允许寄存器IE中的总控制开关,EA=0代表允许产生中断
    	EX0 = 1; //中断允许寄存器IE中的EX0=1代表允许INT0产生中断
    	IT0 = 0; //中断控制寄存器TCON 当IT0 =0时,为电平触发方式,
    	         //如果P3.2为低电平,则产生中断请求(我的单片机P3.2连的是按键6,所以当按键6被按下时,产生中断请求)
    	
    	LED = 0x0f; //使后四个LED灯亮
    
    }
    void Change_LED() interrupt 0
    {
    	LED = 0xf0;	 //使前四个LED灯亮
    }
    

    4.定时器T0和T1的工作方式1

    • 这里用到前面所展示的定时器和计数器的工作方式寄存器TMOD

      在这里插入图片描述
      • 工作方式1的计数位是16位,下面以T0为例说明(T1和T0方式1是一样的)。T0有两个寄存器TL0个TH0组成,TL0为低8位,TH0为高8位。
      • 启动T0后TL0便在机器周期的作用下从0000 0000开始计数每次加一,当TL0计满(1111 1111十进制255)时,再计一个到256,此时TL0清零,同时向TH0进一位,直到TH0也计满此时达到65535,再计一个数就溢出,产生中断请求,进入中断处理程序,同时TF0(中断标识位自动置1)中断程序执行完后,硬件将自动将TF0清0.

    5.定时器控制流水灯

    • 下面用定时器做一个将发光二极管亮1s,熄1s,周期性闪烁
    #include<reg52.h>
    #define uchar unsigned char
    #define LED P2
    uchar num;
    void main()
    {
    	LED = 0xf0;
    	TMOD = 0x01;//将定时器0设为方式1,即16位定时器
    	/*TH0中每增加1,就相当于计了256个数,所以TH0装入初值是对256取模,TL0是对256取余*/
    	TH0 = (65536-45872)/256;//给定时器的高八位赋初值
    	TL0 = (65536-45872)%256;//给定时器的低八位赋初值
    	/*过程中不可能让其计65536个数,所以要给他赋初始值,单片机的晶振为11.0582MHz,机器周期为
    	1.09us(计一个数的时间),若要每50ms产生一个中断,则要计数50000/1.09=45872,所以将其作为初值*/
    	EA = 1;//开总中断
    	ET0 = 1;//开定时器0中断
    	TR0 = 1;//启动定时器T0
    	while(1)
    	{	   
    		
    		if(num == 20) //num=20代表用了50ms*20  = 1s
    		{
    			num = 0;
    			LED = ~LED;
    		}
    	}
    }
    void T0time() interrupt 1
    {
    	TH0 = (65536-45872)/256;//重装初值
    	TL0 = (65536-45872)%256;
    	num++;			  //每发生一次中断后,num++,num等于几,用的时间就是几个50ms
    
    }
    

    6。按键+中断+流水灯实例

    • 要求,当按键按下时,流水灯停止流动,再次按下时,流水灯从原来的位置继续流动
    #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    #define LED P2
    sbit S = P3^2;
    int j;
    uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    void init();
    void key();
    void delay(uint z);
    void LED_display();
    void main()
    {
    	init();
    	while(1)
    	LED_display();
    }
    
    void init()
    {
    	IT0 = 0; //设置低电平触发外部中断
    	EA = 1;  //开总中断
    	EX0 = 1;//开外部中断
    	j = 0;
    }
    void key()
    {
    	if(S == 0)
    	{
    		delay(8); //按键消抖
    		if(S == 0)
    		{
    			j++;
    			if(j==2)
    			j = 0;
    		}
    	}
    	while(!S);
    }
    void delay(uint z) //延时函数
    {
    	uint x,y;
    	for(x = z;x>0;x--)
    		for(y=110;y>0;y--);
    }
    void LED_display()
    {
    	uint i;
    	for(i=0;i<8;i++)   //数组控制流水灯
    	{
    		LED = table[i];
    		delay(500);
    	}
    }
    void stop() interrupt 0
    {
    	do{
    		key();
    	}while(j == 1);  //中断函数,当按键按下时中断
    
    }
    
    展开全文
  • 本文简单介绍了C51单片机中断体系结构。
  • 如题: ** 代码如下: ** #include<reg52.h> void delay() { int i,j; for(i=0;i<200;i++) for(j=0;j<200;j++); } void delay_1s() { int i=0;...//闪烁led 外部中断 void flas

    如题:
    在这里插入图片描述
    **

    代码如下:

    **

    #include<reg52.h>
    void delay()
    {
    	int i,j;
    	for(i=0;i<200;i++)
    		for(j=0;j<200;j++);	
    }
    void delay_1s()
    {
    	int i=0;
    	for(i=0;i<20;i++)
    	{
    		TH0=0X3C;
    		TL0=0XB0;
    		TR0=1;
    		while(TF0!=1);
    		TF0=0;
    	}
    }
    //闪烁led 外部中断
    void flash() interrupt 2	//外部中断1 k4
    {
    	int i;
    	for(i=0;i<10;i++)
    	{
    		P2=0XFF;
    		delay_1s();
    		P2=0XF0;
    		delay_1s();
    	}
    }
    //流水灯 外部中断
    void flow() interrupt 0		//外部中断0	k3
    {
    	int i;
    	P2=0xFF;
    	for(i=0;i<4;i++)
    	{
    		P2=P2<<1;
    		delay();
    	}
    }
    void main()
    {
    	EA=1;//总中断
    	
    	EX1=1;//外部中断1允许位
    	IT1=1;//触发方式
    	
    	EX0=1;
    	IT0=1;
    	TMOD=0X01;//定时器工作方式1
    	P2=0XFF;
    	while(1)
    	{
    		P2=0XF0;
    	}
    	
    }
    
    展开全文
  • C51单片机————中断系统

    千次阅读 多人点赞 2018-07-14 19:42:35
    51单片机中断系统 CPU和外设之间的速度差异太大,CPU跑的太快了,外设追不上,机器的内部也可能出现突发事件。那怎么办?所以引入中断技术呀。 那什么是中断哇? CPU和外设并行工作,有突发事件或者外设要给...
  • 1、外部中断 0、 1;分别由引脚/INT0、/INT1的电平信号引起。 2、定时/计数器 0、1;分别由T0、 T1的溢出引起。 3、串行口发送、接收;发送完一个字节或接收到一个字节引起。 上述共5个中断源。 一、中断号 外部中断...
  • c51单片机定时器中断

    2013-04-19 19:45:36
    学习c51单片机的同学可以看本教程方便学习单片机。。
  • c51单片机中断详解--适合初学者

    千次阅读 多人点赞 2019-03-01 12:15:33
    代码文本在文末,文中为代码截图 ...其实这里还有个想说的是,IE在中断请求的时候,会置位为1,然后CPU同意并执行中断程序后,IE自动清零。为什么说这个,这个可以在以后的一些情况,作为中断条件。 ...
  • C51单片机定时器中断应用,程序控制LED灯的亮灭,通俗易懂,运用简单程序学习中断
  • C51单片机 外部中断

    2020-06-15 10:48:56
    51单片机中断系统 一、中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来...
  • c51单片机中断.pptx

    2020-02-21 09:05:28
    单片机的定时与中断系统;中断系统包含中断源中断方式中断控制寄存器中断响应和中断请求的撤除 ; 单片机在某一时刻只能处理一个任务当多个任务同时要求单片机处理时这一要求应该怎么实现呢通过中断可以实现多个任务的...
  • C51单片机外部中断

    2021-04-15 15:08:31
    实现外部中断:用外部中断1,且中断只受到低电平触发。主程序,任意相邻4个数码管显示 2(1秒后)-0(1秒后)-2(1秒后)-1(1秒后)(...
  • c51单片机指令系统

    2021-04-12 17:42:11
    c51单片机指令系统 ##指令: 一条指令有操作码+操作数组成 选址方式 寄存器选址:操作数为某寄存器的内容 MOV A,Rn 直接选址:直接给出操作数的单元地址 MOV A,direct 选择空间:内部RAM,特殊功能寄存器 寄存器...
  • C51单片机汇编实验金沙滩实验4 外部中断代码和各种文件
  • //流水数码,当外部中断产生,流水数码闪烁
  • MCS-51单片机中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。
  • 在完成交通灯基本功能基础上,当有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验题以按键为中断申请,表示有急救车通过。
  • 大家晚上好,我分享的内容大体是先介绍中断,各寄存器使用(可能这里有点啰嗦),然后就简单写一下定时器,然后PWM原理,以及它的配置和...中断:当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊请求...
  • C51单片机学习(二)中断系统定时器
  • C51单片机运用定时器T0中断实现电子时钟,含有原理图和相关程序设计。
  • 学习心得①学习单片机中断总思想[废话]②学习单片机中断总思想[废话]③学习单片机中断总方法[废话]④总结(干货)附 ①学习单片机中断总思想[废话] 标题客观的说,学习单片机只需要掌握 I/O 和 中断。掌握了这两点...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,888
精华内容 1,955
关键字:

c51单片机中断系统