MCS-51单片机外中断软件编程

发布者:快乐舞蹈最新更新时间:2010-03-11 关键字:中断  编程  定时器  寄存器 手机看文章 扫描二维码
随时随地手机看文章

    MCS-51单片机有多个中断源,以8051为例,有5个中断源,两个外中断、两个定时中断和一个串行中断,这一节我们讨论外中断软件编程。

    外中断是由外部原因引起的中断,有两个中断源。即外中断0(INT0)和外中断1(INT1),中断请求信号由引脚P3.2(INT0)和P3.3(INT1)输入。

    外中断请求信号有两种方式,一是电平方式,二是脉冲方式。可通过有关控制位的定义进行规定。

    电平方式为低电平有效,只需在单片机的(INT0)和(INT1)中断请求输入端采样到有效的低电平时,就会激活外部中断。

    脉冲方式则在脉冲的后负跳沿有效,即在相邻两个机器周期对中断请求引入端进行采样中,如前一次为高,后一次为低即为有效中断请求。这就要求在这种中断方式,中断请求信号的脉冲宽度必须大于一个机器周期,以保证电平变化能被单片机采样到。

      定时器控制寄存器 (TCON)

    外中断请求方式的控制位在定时控制寄存器TCON(地址为88H)中的位88(IT0)和位8A(IT1)两个位,当IT0(IT1)=0为电平方式,IT0(IT1)=1为脉冲方式。同时在此寄存器中的位89(IE0)和位8B(IE1)为外中断请求标志位,当CPU采样到INT0(INT1)端出现有效中断请求时,此位由硬件置1。在中断响应完成后转向中断服务时,再由硬件自动清0。

定时器控制寄存器 (TCON)
位地址 8F 8E 8D 8C 8B 8A 89 88
位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

     中断允许控制寄存器 (IE)

中断允许控制寄存器 (IE)
位地址 AF AE AD AC AB AA A9 A8
位符号 EA   /   /  ES  ET1 EX1 ET0 EX0

下面我们对有关控制位作说明:

    ·EA——中断允许总控制位,EA=0,中断总禁止,禁止所有中断。EA=1,中断总允许,总允许位打开后,各中断的允许或禁止由各中断允许控制位设置决定。

    ·EX0(EX1)——外部中断允许控制位,EX0(EX1)=0,禁止外部中断。EX0(EX1)=1,允许外部中断。

    ·ET0(ET1)——定时/计数中断允许控制位,ET0(ET1)=0,禁止定时/计数中断。ET0(ET1)=1,允许定时/计数中断。

    ·ES——串行中断允许控制位,ES=0,禁止串行中断。ES=1,允许串行中断。

    中断的允许和禁止就是中断的开放和关闭,中断允许就是开放中断,中断的禁止就是关闭中断。从以上说明我们可看出,MCS-51的中断允许是通过两级控制的,以EA位作为总中断控制位,以各中断控制位为分控制位。当总中断位为禁止状态时,不管分控制位是允许或禁止整个中断都是禁止的。只有当EA=1(允许)时,才能由各分控制位设置各自的中断允许与禁止。MCS-51单片机复位后,IE=00H,因此中断处于禁止状态。

    值得一提的是:单片机中断响应后不会自动关闭中断,因此在转入中断服务程序后,应由软件指令禁止中断。

      中断优先级控制寄存器 (IP)

  MCS-51的中断优先级控制比较简单,只设置了高、低两个级别的有限级,各中断源的优先级别由优先寄存器(IP)进行控制。

中断优先级控制寄存器 (IP)
位地址 BF BE BD BC BB BA B9 B8
位符号  /   /   /  PS  PT1 PX1 PT0 PX0
 
    ·PX0——外中断0(INT0)优先级控制位。
    ·PT0——定时中断0(T0)优先级控制位。
    ·PX1——外中断1(INT1)优先级控制位。
    ·PT1——定时中断1(T1)优先级控制位。
    ·PS ——串行中断(ES)优先级控制位。

    控制位=0,优先级为低。控制位=1,优先级为高。

    中断优先级是为了中断嵌套服务的,控制原则为:
    (1) 低优先级中断不能打断高优先级的中断服务,而高优先级的中断服务可以打断低优先级的中断服务。
    (2) 同级的中断已经响应,其他中断将被禁止。
    (3) 如果同级的多个中断源同时出现,CPU将按查询次序确定哪个中断被响应,次序为:外中断0→定时中断0→外中断1→定时中断1→串行中断。

      中断控制寄存器的状态设置

    在应用中,我们可以通过相应的控制寄存器来使用中断系统,因此从使用的角度上看,这些控制寄存器是面向用户的。这些控制寄存器既可以进行字节寻址,也可以进行位寻址,也就是对位状态的寻址既可以使用字节操作指令也可以使用位操作指令,例如:

        MOV    IE,#81H

    如使用位操作指令,也可写为:
        SETB    EA
        SETB    EX0

    对于一般的外中断程序,我们可以这样安排:

        ORG    0000H    ;主程序入口
START:  AJMP   MAIN

        ORG    0003H    ;外中断程序入口
        AJMP   INT00

MAIN:   MOV    IE,#81H  ;允许总中断和外中断
        ……            ;主程序
        ……
        ……

INT00:  ……            ;外中断服务程序
        ……
        RETI            ;中断返回
关键字:中断  编程  定时器  寄存器 引用地址:MCS-51单片机外中断软件编程

上一篇:基于AT89S51的多参数气体检测仪的研制
下一篇:基于MCS-51单片机的微波脉冲功率测试系统

推荐阅读最新更新时间:2024-03-16 12:28

51单片机(STC89C52)的中断定时器
STC89C51/STC89C52 Timer 内部不带振荡源, 必须外接晶振 采用11.0592MHz,或22.1184MHz,可方便得到串口通讯的标准时钟. STC89和STC90系列为12T, STC11/STC12系列为1T, 也就是一个指令一个机器周期, 这些都需要外置晶振; STC15系列有内置晶振. 中断 中断允许控制寄存器 IE 字节地址A8H, CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的 EA (IE.7): 整体中断允许位, 1:允许 ET2(IE.5): T2中断允许位, 1:允许(for C52) ES (IE.4): 串口中断允许位, 1:允许 ET1(IE.3
[单片机]
51单片机(STC89C52)的<font color='red'>中断</font>和<font color='red'>定时器</font>
STM8S_003_ TIM定时中断
上一篇文章讲述了TIM精确延时(阻塞式),它主要的特点是延时精确,而阻塞式延时在这一延时过程中不能做其它事情,只能等待延时结束。 在某些场合下,我们需要在延时的过程中也要进行其它操作,如在延时过程中需要检测某一个IO口的电平状态、检测某一按键是否处于按下状态等。这个时候我们简单的处理方法就是使用定时中断,一旦这个延时时间到就进行下一个操作。 本文将简单讲述如何实现TIM定时和中断,提供简单的例程源代码。 为方便大家阅读,本文内容已经整理成PDF文件: http://pan.baidu.com/s/1i5uWhJR TIM基础知识 Ⅱ 在上一篇文章中讲述了一些关于TIM的知识,本文说一下TIM中断相关知识。 TIM框图:
[单片机]
STM8S_003_ TIM定时<font color='red'>中断</font>
TMS320C32 DSP的中断编程方法及BOOT功能实现
摘要:采用C语言对DSP编程具有很多优点。针对TMS320C32芯片的特点,提出了一种基于C语言的中断编程方法,同时介绍了具体的BOOT功能实现方案,给出了相应的源程序和结论。 关键词:C语言 BOOT表 中断向量 TMS320C3X系列芯片是美国TI公司推出的第一代浮点DSP芯片,具有丰富的指令集、很高的运算速度、较大的录址空间和较高的性价比,在各领域得到了广泛的应用。TMS320C32是TMS320系列浮点数字信号处理器的新产品,在TMS320C30和TMS320C31的基础上进行了简化和改进。在结构上的改进主要包括可变宽度的存储器接口、更快速的指令周期时间、可设置优先级的双通道DMA处理器、灵活的引导程序装入方式、可重新
[嵌入式]
单片机入门教程第22课-串行口应用编程实例
1. 串口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就可以扩展一个并行口。 例:用8051串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,可以靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通讯之前,都要先对控制
[单片机]
单片机入门教程第22课-串行口应用<font color='red'>编程</font>实例
PLC编程优化设计使程序运行提速
  通过本方法优化可以极大的减少程序语句数,使plc程序更简洁、可读性更好,由于不需要做耗时的类型转换,程序运行效率也得到提高。且数学运算量越大,效率提高越明显。   缺点是要多占用两字节的内存,以后程序中不能使用VW0。但S7-200的RAM空间很大,一般是用不完的,以226为例,有多达10K的RAM,偶从来没有超过1K。这些RAM都是花钱买来的,不用白不用,不用也是浪费了。   同理,如果有字节型变量经常需要与字类型变量相互转换,让字节变量占用一个字的内存宽度浪费一个字节,避免类型转换。具体步骤如下:   1:根据工程实际需求,进行功能块规划,编写子程序   在PLC中子程序是为一些特定的控制目的编制的相对独立的程
[嵌入式]
单片机编程技巧--功能强大的时钟中断
在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。 下面以6MHz时钟的AT89C51系统为例,说明时钟中断的应用。 定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断
[单片机]
51中断-定时器/计数器中断
什么时中断: 是指在执行程序的过程中,当出现每种情况,发出紧急的事件或其他情况时,有服务对象向CPU发出中断请求的信号,CPU暂时中断当前的程序的执行,而转去执行相应的处理程序,待处理程序完毕以后,再返回来执行原来被中断的程序。 关于中断以定时/计数器0中断为例; void timer0_init() { EA = 1; //打开总中断; TMOD |= 0x01; //选定定时/计数器0的工作的方式 TH0 = (65536 - 20000) / 256; TL0 = (65536 - 20000) % 256; //初始化定时/计数器的值 ET0 = 1; //打
[单片机]
STM32之CAN---中断管理浅析
1 前言 bxCAN占用4个专用的中断向量。通过设置CAN中断允许寄存器(CAN_IER),每个中断源都可以单独允许和禁用。 图1 从图1可以看出,最右边共四个中断,中断是可以通过CAN_IER来屏蔽或允许的。 2 CAN中断允许寄存器 (CAN_IER) 地址偏移量: 0x14 复位值: 0x0000 0000 图2 位31:18 保留位,硬件强制为0 位17 SLKIE: 睡眠中断允许 0: 当SLAKI位被置1时,没有中断产生; 1: 当SLAKI位被置1时,产
[单片机]
STM32之CAN---<font color='red'>中断</font>管理浅析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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