单片机中断的应用

51单片机:

P3.2 引脚为INT0 中断

P3.3引脚为INT1 中断

按钮 P3.2    P3.3

按钮低电平触发:

while(PB0==0);

delay();

#include <reg51.h>
#define    SEG    P0             //    定义七节显示器接至Port 0
sbit    LED = P2^0;      // 定义LED灯接至P2.0
sbit    com = P1^0 ;     // 数码管 com 口
sbit    OC  = P1^1;      // 定义573锁存器使能口,我是用的573驱动7段数码管

void delay10ms(int x);    //    声明延迟函数 10ms * x; 

sbit    PB0=P3^2;      //按钮0
sbit    PB1=P3^3;      //按钮1

unsigned char code TAB[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67 };    // 共阴极

main()
{
    OC = 0;          //锁存置0 ,点亮数码管
    com = 0;         //点亮SEG
    EA =1;             //总中断
     EX0 = 1;         //外部中断 INT0
     EX1 = 1;         //外部中断 INT1
    TR0 = 1;         //    运行INT 0中断
      TR1 = 1;         // 运行INT1 中断
    //TCON = 0x05;     //    设置信号触发方式为负边沿触发
    while(1)
    {
        int i;
        for(i=0;i<10;i++)    //    显示0-9(上数)
        {    SEG=TAB[i];
            delay10ms(40);    //    延迟 0.4s

        }
    }
}
void my_int0(void) interrupt 0   // INT 0
{     int i;
     while(PB0==0);
     delay10ms(25);
       for (i=9;i>=0;i--)        //    for循环显示9-0(下数)
       {
        SEG=TAB[i];                //    显示数字至七节显示器
        delay10ms(40);            //    延迟 0.4s
       }    

}
void my_int1(void) interrupt 2          //INT 1
{        int i;
        while(PB1==0);
        delay10ms(25);
         for(i=0;i<10;i++)
         {
         LED = 0;
         delay10ms(25);
         LED = 1;
         delay10ms(25);
        }
}

/* 延迟函数,延迟约x*1ms */
void delay10ms(int x)            //    延迟函数开始
{
        int i,j;
          for (i=0;i<x;i++)        //    计数x次,延迟x*10ms
        for (j=0;j<1200;j++);    //    计数1200次,延迟10ms   1200*8us
}                     

时间: 2024-10-13 08:55:29

单片机中断的应用的相关文章

51单片机中断interrupt……using……

51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using 0 是第0组寄存器: using 1 是第1组寄存器: using 2 是第2组寄存器: using 3 是第3组寄存器:51单片机内的寄存器是R0--R7(不是R0-R3)R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1.RS0位决定的.using 0时设置 RS1=0,RS

用定时器中断,单片机中断处理时间大于定时器定时时间会怎样?

如果是不同的中断类型是可以根据优先级嵌套,如果是同一中断类型(如题), 有三种结果:1.马上进入新的中断处理(中断嵌套) 2.等待中断处理完再进入新的中断处理 3.出错. 单片机中断处理时间大于定时器定时时间,在下次中断时间到时,因为中断是同一类型.同一优先级,所以不会马上进入新的中断处理. 而是在本次中断处理结束后,单片机又马上进入新的定时器中断函数,主函数中的语句可能会没有机会运行下去,会影响后面中断的实时性.所以答案为2. 如果为了避免中断嵌套(同一优先级不会发生),在中断处理中人为的在进

单片机中断的IE和IP寄存器(摘抄)

收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 一.中断允许寄存器IE    CPU对中断源的开放或中断屏蔽的控制是通过中断允许寄存器IE设置的,IE既可按字节地址寻址(其字节地址为A8H),又可按位寻址.AT89S52单片机中的6个中断矢量都是可屏蔽中断,通过对IE的某些位置位和清0,允许或禁止某个中断,当对IE的EA位清0时,屏蔽全部中断源.IE中各标志位功能如表1所示: 例:开放外部中断0字节操作:MOV IE,#81H 或 MOV 0A8H,#81H位操作:SETB EA

【转】 51单片机中断学习

一.中断的概念    CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生):    CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务):    待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 二.中断源 在51单片机中有5个中断源 中断号          优先级                    中断源                    中断入口地址 0               1(最高)   

【007】AVR单片机中断系统

AVR单片机的21个中断源 I/O端口的第二功能 AVR单片机共有单个定时器,定时/计数器1是16bit的,其余的定时/计数器0和定时/计数器2都是8bit的定时器. 定时器的工作模式 普通模式 CTC模式 快速PWM模式 相位修正PWM模式 相位频率修正PWM模式 输入捕获模式 和51单片机的定时计数器类似,根据设定的时钟频率,每过一个时钟,计数寄存器数值加1. 用到的寄存器 T/C1控制寄存器B:(控制时钟的来源和频率) 后三位的设置,1表示定时器停止,2~6表示不同频率的内部时钟,7~8表

单片机中断函数的理解感悟

随着使用单片机次数越来越多,对单片机中断处理函数的理解更加升入.下面写了曾经血的教训,供大家参考. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1.单片机的不同中断是有优先级的区别,当同时发生两个不同中断时,

单片机中断全局变量保护方法

首先要明白这几个知识点:关键字volatile的使用,原子操作,临界区的使用.明白的直接跳到文中的4.全局变量的使用及保护处查看. 1.关键字volatile 关键字volatile用于告诉编译器,说明被修身的变量可能会被意想不到地改变,防止编译器对代码进行优化. 比如如下程序: 1 ucNms=0x65;2 ucNms=0x66;3 ucNms=0x67;4 ucNms=0x68; 上述4条语句,如果变量在声明的时候(unsigned char ucNms;)没有使用volatile,那么编译

51单片机中断系统

51中断系统 1.什么是中断 中断是CPU在执行程序是不需要管中断源的状态,当中断源满足中断触发条件时CPU再去进行终端处理 2.中断源 80C51共五个中断源分别是两个外部中断源:INT0.INT1,两个定时中断源T0.T1,一个串行口中断源 每个中断源对应着一个中断入口地址 中断源 入口地址 外部中断源INT0 0003H 定时器T0 000BH 外部中断源INT1 0013H 定时器T1 001BH 串行口中断 0023H 3.中断控制 3.1.     定时控制寄存器TCON 控制对象

51单片机中断号