C51_外部中断

2024-04-02 17:44
文章标签 中断 外部 c51

本文主要是介绍C51_外部中断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

终端的概念

  • 当CPU在正常运行时,如果外部发生了紧急事件请求,CPU则会先暂停当前的工作,转而调用特定的的程序来处理这个紧急事件。处理完毕后,再回到原来中断发生的地方继续工作,这样的过程称为工作
  • 实现这种功能的系统称为中断系统,请示CPU中断的请求称为中断源,对紧急事件的处理程序称为中断服务程序

中断系统框架

在这里插入图片描述

中断源

在这里插入图片描述

中断触发条件

  • 低电平触发
    • 当外部中断输入引脚检测到低电平时中断触发,并且在低电平保持的时间内持续触发中断,直到引脚变为高电平
    • 注意:只有在CPU处理完成当前中断后,下一个中断才会被相应
  • 下降沿触发
    • 引脚电平从高电平到低电平跳变的瞬间,称为下降沿。当外部中断输入引脚检测到下降沿时,中断触发。当引脚保持低电平时,中断不会再次触发

中断请求标志

在这里插入图片描述
在这里插入图片描述

中断优先级

  • 如果单片机正在处理一个中断程序,此时又有优先级更高的中断请求,单片机会暂停当前的中断程序,转而处理新的优先级更高的中断程序。待新的中断处理完毕后,再继续处理之前的中断程序。这个过程称为中断嵌套
  • 在同一优先级中,如果有多个同一优先级的中断同时触发,则CPU的响应顺序取决于内部硬件电路形成的查询次序

中断处理

  1. 软件查询
  2. 硬件查询
  • 通常情况下,使用中断系统时都会采用硬件查询法
  • 终端服务函数是特殊的函数 函数类型 函数名 () interrupt 中断号 using 工作寄存器组号
  • 在编写终端服务函数时,应遵循以下规则
    • 只能由CPU中断处理时调用,不能在代码中直接调用
    • 不能进行参数传递,若在中断服务函数中包含参数类型声明将导致程序编译出错
    • 不能含有返回值,因此需要将终端服务函数的类型定义为void类型
    • 中断服务函数中不宜处理耗时较长的指令,避免延误下次中断响应

实例与代码解析

  1. 包含头文件
#include <reg52.h>
  1. 位定义LED
sbit LED1 = P2 ^ 4; // 定义LED1
sbit LED2 = P2 ^ 5;
  1. 编写中断配置函数
static void InitInterrupt(void); // 内部函数声明
static void InitInterrupt(void)
{IT0 = 1; // 设置外部中断0的触发方式为下降沿触发EX0 = 1; // 打开外部中断0的中断允许IT1 = 1;EX1 = 1;EA = 1; // 打开总中断允许
}
  1. 编写主函数
void main()
{InitInterrupt(); // 配置中断while (1){}
}
  1. 编写外部服务中断函数
void Externa10_Handler() interrupt 0
{LED1 = ~LED1; // 翻转LED1的亮灭状态
}void Externa11_Handler() interrupt 2
{LED2 = ~LED2; // 翻转LED2的亮灭状态
}

这篇关于C51_外部中断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870642

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

【AI大模型应用开发】2.1 Function Calling连接外部世界 - 入门与实战(1)

Function Calling是大模型连接外部世界的通道,目前出现的插件(Plugins )、OpenAI的Actions、各个大模型平台中出现的tools工具集,其实都是Function Calling的范畴。时下大火的OpenAI的GPTs,原理就是使用了Function Calling,例如联网检索、code interpreter。 本文带大家了解下Function calling,看

外部中断的边缘触发和电平触发

MCS-51单片机中的边缘触发是指当输入引脚电平由高到低发生跳变时,才引起中断。而电平触发是指只要外部引脚为低电平就引起中断。         在电平触发方式下,当外部引脚的低电平在中断服务返回前没有被拉高时(即撤除中断请求状态),会引起反复的不需要的中断,造成程序执行的错误。这类中断方式下,需要在中断服务程序中设置指令,清除外部中断的低电平状态,使之变为高电平。

【Java编程思想】线程的基本协作机制 与 线程的中断

wait/notify Java在Object类中定义了一些线程协作的基本方法,wait和notify public final void wait() throws InterruptedException;public final native void wait(long timeout) throws InterruptedException; 一个带时间参数,单位是毫秒,表示最

基于IMX6ULL的Cortex-A中断原理讲解,以及编写其中断向量表

首先借助STM32我们需要了解中断系统是如何构成的         会有一个中断源,也就是能够向CPU发出中断请求的设备或事件。中断源不分硬件和软件,也就是产生中断信号,就会执行中断服务函数         但是CPU是如何知道中断源产生后就找到对应的中断服务函数呢,这个时候就要引入中断向量表,它的主要功能是描述中断对应的中断服务函数,每个中断源都有一个唯一的中断号(也称向量号),

【银河麒麟高级服务器操作系统实例】虚拟化平台系统服务中断现象分析及处理建议

服务器环境以及配置 【机型】虚机 处理器: Kunpeng-920 内存: 40G 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 银河麒麟操作系统 Kylin-Server-10-SP1-Release-Build20-20210518-arm64 【第三方软件】 智能运维系统、mysql数据集群 现象描述 环境描

从应用内跳转至外部浏览器 - 鸿蒙 HarmonyOS Next

从应用内跳转至外部浏览器,基于 Want 来实现,同时也可以通过其方式尝试跳转至其它系统模块,具体可参考如下 code : 方法调用 // 调用pushOutsideWeb(controller, url) 方法实现 import { common, contextConstant, Want } from '@kit.AbilityKit';import { HintMessage

s3c2440---中断控制器

一、概述 S3C2440A 中的中断控制器接受来自 60 个中断源的请求。提供这些中断源的是内部外设,如 DMA 控制器、 UART、IIC 等等。 在这些中断源中,UARTn、AC97 和 EINTn 中断对于中断控制器而言是“或”关系。 当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求 ARM920T 内核的 FIQ 或 IRQ。 仲裁步骤由硬件优先级逻辑决定