单片机外部中断详解及程序

发布者:epsilon15最新更新时间:2015-05-14 来源: 51hei关键字:单片机  外部中断  电子时钟 手机看文章 扫描二维码
随时随地手机看文章
单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。
实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。电路结构和接线不变,仅把程序改为下面的形式。
#include
unsigned int t=500; //定义一个全局变量t,并设定初始值为500次
//===========延时子函数,在8MHz晶振时约1ms=============
void delay_ms(unsigned int k)
{
unsigned int i,j;
for(i=0;i {
for(j=0;j<1140;j++)
;
}
}
//============主函数==================================
void main( void )
{
DDRB = 0xFF; //设置端口B为输出方向
PORTB = 0xFF; //设置端口B的输出为全高电平
DDRD = 0x00; //设置端口D为输入方向
PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态
MCUCR = 0x0A; //设定INT0、INT1为下降沿触发
GICR = 0xC0; //使能INT0、INT1中断
SREG = 0x80; //使能总中断
while(1)
{
PORTB = 0x55; //让接在端口B上的LED显示01010101
delay_ms(t); //延时t个ms
PORTB = 0xAA; //让接在端口B上的LED显示01010101
delay_ms(t); //延时t个ms
}
}
//============中断函数(外部0)==========================
#pragma vector = INT0_vect
__interrupt void INT0_Server(void)
{
t = 100; //设定t的值为100次
}
//============中断函数(外部1)==========================
#pragma vector = INT1_vect
__interrupt void INT1_Server(void)
{
t = 500; //设定t的值为500次
}
把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。下面就来分析一下键盘中断的程序原理。
在分析程序之前,先来了解一下什么叫“外部中断”。前面已讲述过,在没有打扰的情况下,单片机的程序在封闭状态下自主运行,但如果在某一时刻需要响应一个外部事件(比如有按键被按下),这时就需要用外部中断。具体来讲,外部中断就是在单片机的一个引脚上,由于外部因素导致了一个电平的变化(比如由高变低),而通过捕获到这个变化,单片机内部自主执行的程序就被暂时打断,转而去执行相应的中断处理程序,执行完后又回到原来中断的地方继续执行原程序。这个引脚上的电平变化,就申请了一个外部中断事件,而这个能申请外部中断的引脚就是外部中断的触发引脚。在上面的例子中,可以看到两个按键S1、S2被接到了ATMega16的PD3和PD2引脚,而这两个引脚正是该单片机的两个外部中断(INT1和INT0)的触发引脚(第二功能)。当按键没有按下时,这两个引脚都为高电平(执行过PORTD=0xFF),当按键被按下时,引脚电平跳变为低电平,这时若单片机设置成允许中断申请,就会触发外部中断事件,从而转去执行中断服务程序。明白了这个过程之后,接下来就可以分析程序了。
程序执行后,主程序就一直在不停的运行while(1)内的这个死循环,让LED以t=500ms的初始值来交替闪烁,直到有外部中断来打断它。假设某一时刻按键S2被按下,这时由于引脚PD2上的电平突然被拉低,申请了一个外部中断0(INT0),这时的程序就转去执行外部中断0的中断服务程序(即__interrupt void INT0_Server(void)函数)。这时全局变量t的值被该函数重新赋值为100(即延时为100ms),完成后又回到主函数中的while(1)内去继续执行,因此LED闪烁的速度就变快了。
观察程序可看出,如果没有中断去调用中断服务子程序,在主程序中是没有语句去调动它的。也就是说如果没有外部中断,中断服务子程序(即__interrupt void INT0_Server(void)函数)是永远不会被执行的。这也说明,中断服务子程序是一类特殊的子程序,它不能被主程序调用,只能被中断申请调用。因此,中断服务子程序有它固定的格式和写法。在不同的编译系统中的写法不完全一样,下面给出IAR下的中断服务子程序的格式。
#pragma vector = INT0_vect
__interrupt void INT0_Server(void)
{
中断服务程序代码
}
以上是固定格式,除斜体部分外,其余部分不可更改。斜体部分中的INT0_vect表示中断的向量号,不同的中断名称不一样(原型在头文件iom16.h中)。斜体部分中的INT0_Server是中断函数的名称,是由开发者自己定义的。虽然可以自定义,但名称还是要取得“见名知义”,这样一看就知道是什么中断服务了。
关键字:单片机  外部中断  电子时钟 引用地址:单片机外部中断详解及程序

上一篇:MSP430单片机定时器B中断实验
下一篇:回朔算法2

推荐阅读最新更新时间:2024-03-16 14:02

TM1650模块单片机源程序(子函数)
单片机源程序如下: #include STC12C5A.h #include tm1650.h void Delay_us(uint i) //us延时 { for(;i 0;i--) { _nop_(); // _nop_(); // _nop_(); } } void I2CStart(void) //开始信号 { CLK_H; DIO_H; Delay_us(5); DIO_L; } void I2Cask(void) //ACK信号 { uchar timeout = 1; CLK_H; Delay_
[单片机]
利用并口实现AT89S系列单片机ISP功能
1 ISP概述 从事单片机设计和开发的技术人员目前一般采用以下常用的方法开发单片机产品:首先利用单片机仿真设备进行硬件和软件的仿真调试,然后将调试通过的目标代码用程序烧写器固化到单片机的程序存储器中。在这个过程中,程序烧写器是必不可少的开发工具。程序烧写器一般价格较昂贵,对于初学者来说是一笔不小的开支,并将直接影响到初学者进一步学习开发单片机的积极性。另外,以后每修改一次源程序就要将单片机芯片从目标板上取出,再将更新后的目标代码重新固化到单片机芯片中,这样调试时就会由于频繁地插拔单片机芯片而对芯片和电路板带来相应的物理损坏。借助程序烧写器进行单片机编程的缺点是烧写设备昂贵,烧写操作麻烦,不便于实现在系统编程(ISP)。为了克服上
[单片机]
51 单片机 EEPROM小结(FLASH)
概念先行 RAM:可读可写,掉电消失 ROM:只读,掉电保存,存一些开机引导相关信息 两者同属内存,常说的电脑硬盘属外存。 SRAM就是速度快一点,EEPROM就是可重复编程可擦除,FLASH就是高级的EEPROM。 STC8利用ISP/IAP技术将内部DATA FLASH当EEPROM,可以自己设置,512字节单扇区擦除,每次擦除一个扇区,建议同一次修改的数据在一个扇区内。 寄存器 数据寄存器 IAP_DATA 读:读出的EEPROM的数据保存在其中 写:写之前必须将数据放入其中,再发写指令 地址寄存器 IAP_ADDRH:目标地址高字节 IAP_ADDRL:目标地址低字节 命令寄存器IAP_CMD 低两位置
[单片机]
51 <font color='red'>单片机</font> EEPROM小结(FLASH)
基于AT89S52汉字多方式显示屏的设计
  1 引言   生活中可视广告随处可见,大多采用 LED" target="_blank" LED 汉字 显示屏" target="_blank" 显示屏 ,而汉字的显示模块可直接影响广告本身效果。基于AT89S52 LED汉字显示模块有多种形式,包括汉字全屏显示、汉字从右往左显示、汉字从下往上显示、汉字拉幕式显示等多种方式。   2系统组成与工作原理   基于AT89S52 LED汉字显示屏系统组成如图1所示。主要由AT89S52构成微控制器,8块74LS373组成汉字代码的行锁存器,74LS154构成汉字的列选通,16块8×8点阵管LED2088BX构成四汉字显示屏,四个按键用于选择汉字显示方式,16个8550组成汉字
[电源管理]
基于AT89S52汉字多方式显示屏的设计
基于模糊控制的恒温控制系统设计
在日常工业生产当中,恒温控制应用非常广泛。模糊控制技术是通过模仿人的思维方法,运用不确定的模糊信息进行决策以实现最佳的控制效果。模糊控制所关心的是目标而不是精确的数学模型,即研究的是控制器的本身而不是被控对象。因此可以利用特殊的控制媒介,研究控制器本身。本系统以此作为出发点,以单片机为核心控制器,研究模糊控制算法,实现了精确的恒温控制。并设计了单片机与上位机的通信软件,实现了远程温度控制和温度曲线可视化的功能。 1 系统功能和硬件设计 本系统以水温作为测量媒介,以AT89C51单片机作为核心控制器,以AD590温度传感器作为采集器,实现温度的采集、控制、传输、显示的功能。系统采用模糊算法对电热丝的加热时间进行控制,从而
[工业控制]
单片机模拟I2C总线及AT24C01应用实例
I 2 C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I 2 C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。 1. I2C总线特点 I 2 C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I 2 C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并
[单片机]
<font color='red'>单片机</font>模拟I2C总线及AT24C01应用实例
用ZHX1010实现单片机之间的红外通信
摘要:ZHX1010是ZiLOG公司的红外收发芯片,该芯片在1米范围内的最高速度可达115.2kbps,2.4V~5.5V的宽电源范围可使其与各种电压的CPU进行方便的接口。文中介绍了ZHX1010的特点、结构和使用方法,并给出了它与AT89C51的接口应用。 关键词:红外通信 单片机 ZHX1010 引言 目前的单片机应用系统之间一般都使用UART进行通信,通过电平转换口将信号变成RS232或RS485信号来进行直接通信。这种有线通信的好处是通信误码率比较低,受干扰的机率相对较少,但对于要经常插拔通信 线的系统来说,有线通信反而容易出现故障。笔者在开发织机控制系统时,要用一个手持式编程器来修改控制系统的工作参数。在实际使用
[单片机]
单片机C语言来实现相思病
如果刚开始看到这个题目的时候是不是觉得疑惑呢?"相思病"是什么?"相思病"就是我们平常所说的心病。写这个文章的目的在于启发我们的思想,其实编程思想很简单,就是把我们的想法通过编程语言实现出来。就像我们通过汉语来表达我们的想法一样。只不过汉语是用来表达给人的,而编程语言是用来表达给机器,操作系统,或者说一些网络协议的。因为机器,操作系统他们都不会说人话嘛,他们只会说编程语言。所以你就要通过编程语言来建立和他们之间的联系。个人想法,只供参考哦。 现在我们就用一个实际的例子来描述:如何用编程语言来说明人的想法在机器上的实现。这个例子就是用用单片机C语言来实现"相思病",大家都知道,相思病是一种爱情所引起的病,因为双方的距离或他原因导致的一
[单片机]
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved