首页 > 其他分享 >51 单片机【外部中断、定时器中断、回调函数】

51 单片机【外部中断、定时器中断、回调函数】

时间:2023-12-23 21:12:02浏览次数:42  
标签:触发 定时器 优先级 中断 51 单片机 寄存器 外部

51 单片机【外部中断、定时器中断、回调函数】

​ 这里的外部中断类似监听器,时时刻刻监视某引脚的电平变化;这里的定时器中断类似于定时任务,可以定时执行某函数;这里将回调函数和中断结合起来,案例里有点设计模式的味道(忘了哪个了,也可能就是感觉,关于高层不能调用低层的解决),也有点函数式编程的味道。

1、中断(包括 外部中断 和 定时器中断,串口todo)

​ 中断可以狭义地看作是监听。它可监听 如 按钮按下、定时器溢出、CPU内部某值的改变等。

​ 以下都是以89C52的某个(大概不是所有)单片机为例,(我也不知道这个是哪个,用哪个就查看哪个的手册) 它共有8个中断,这8个中断包含 4个外部中断、3个计时器中断、1个串口中断。中断有四个优先级可供我们设置。

  • 关于这8个中断。
    • 串口中断 todo
    • 外部中断。  太长了,放下面了,和 “中断” 同级了 
    • 定时器中断。 太长了,放下面了,和 “中断” 同级了
  • 关于优先级。
    • 优先级需要我们自己设置,没设置的话每个中断没有优先级,所以看作它们是同一个优先级,这时需要通过查询顺序区分先后。
    • 优先级可以管控的情况分为两种,第一种——A中断正在执行,B中断触发了; 第二种——A和B中断同时触发了。这两种情况都会比较A和B的优先级进行区分谁去执行。
    • 每一个当下没执行但已经触发了的中断到后来都会被执行的。
    • 如果两个中断平级,则按查询顺序决定哪个中断先执行。
    • 查询顺序(不是优先级)给中断排一下顺序: 外部中断0(INT0')、 定时器中断0(Timer0)、外部中断1(INT1')、定时器1(Timer1)、串口中断(UART)、定时器中断2(Timer2)、外部中断2(INT2')、外部中断3(INT3')。
    • 通过查手册设置优先级。
2、外部中断

外部中断有4个,分别监视四个引脚(P32、P33、P42、P43)。

  • 我们需要先配置外部中断,进行一系列的参数开启,才可以让它监视起来。 这里只记录一丢丢,具体操作需要查询数据手册。看下图,当我们想使用 INT0' 中断时,我们 要做的是 把 总开关 EA、管控 INT0' 的 EX0打开,然后通过 IT0控制是下降沿触发还是低电平触发即可。

    外部中断配置起来简单,但要注意的是,有些寄存器的位在头文件里没有定义,可通过数据手册或下面的第三个图找到它的寄存器然后操作即可。

    中断请求标志位写代码时用不到。

    /**
    * 以0号中断为例
    */
    #include <STC89C5xRC.H>
    #define LED_0 P00
    
    /**
     * @brief 初始化0号中断,这个函数需要被调用一次以开启中断
     */
    void Init_Int0(){
        // 打开中断总开关
        EA = 1;
    
        // 打开外部中断1开关
        EX0 = 1;
    
        // 配置中断为下降沿触发
        IT0 = 1;
    }
    
    /**
    * 0号中断触发后要执行的代码
    */
    void Func_Int0() interrupt 0 {	// interrupt后面的数是啥看手册
        LED_0 = ~LED_0;
    }
    
3、定时器中断。

​ 关于配置定时器中断用到的寄存器位看下图 或者 从数据手册找。

​ 定时器的触发条件是计数寄存器溢出时触发。

​ 计数寄存器有两个,可通过模式决定如何使用这两个寄存器。修改M0和M1的值,如下第三张图片,或者查手册。

​ C/T、GATE、M1、M0 这四个位都在TMOD寄存器里,这个寄存器8bit,另外4bit操控另一个定时器的这四个位,这四个位如何配置看图或手册。

看代码吧

void Timer0_Init() {
    // 打开中断开关
    EA = 1;

    // 打开定时器中断开关
    ET0 = 1;

    // 开启TR0,允许 第一个定时器 中断计数
    TR0 = 1;

    // 设置TMOD,TMOD是一个寄存器,它高四位和低四位分别控制两个不同的定时器
    // 我们需要操作低四位的那个寄存器,高四位保持原态
    TMOD &= 0xF0;
    TMOD |= 0x01;

    // timer0 设置为 1ms 中断
    TL0 = T1MS;
    TH0 = T1MS >> 8;


    counter = 0;
}

总的来说一下,外部中断的配置需要 总开关EA,单个开关,下降沿/低电平的触发方式; 定时器中断配置需要 总开关EA,单个开关,TR0/1/2、控制电路的TMOD(也就是里面的位)、两个寄存器的值(通过它俩控制时间)

回调函数 todo

​ 使用回调函数有个有点,就是可以在高一层定义回调,高一层不用调用低一层的代码,低一层直接调用高一层的回调来掉自己这一层的函数。

标签:触发,定时器,优先级,中断,51,单片机,寄存器,外部
From: https://www.cnblogs.com/wangsiyaoa/p/17923625.html

相关文章

  • 515. 在每个树行中找最大值(中)
    目录题目题解:BFS题目给定一棵二叉树的根节点root,请找出该二叉树中每一层的最大值。题解:BFSBFS遍历每一层,在每一层每一个元素出队的时候更新最大值,保存每一层的最大值,最后返回即可。classSolution:deflargestValues(self,root:Optional[TreeNode])->List[in......
  • 513. 找树左下角的值(中)
    目录题目题解:BFS题解:BFS优化题目给定一个二叉树的根节点root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。题解:BFSBFS,队列的最后一层的第一个结点classSolution:deffindBottomLeftValue(self,root:Optional[TreeNode])->int:......
  • Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)
    C.NumberGame我们考虑那些状态是必胜态我的回合时n为奇数(除1外),直接除以n则必胜下面偶数的情况稍复杂偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败态偶数一定含2的因子,\(n=2^k*q,q为奇数\)当\(k=1时如果q\)是一个质数那么只能除一次q这样......
  • 1251. 平均售价
    1.题目介绍表:\(Prices\)+---------------+---------+|ColumnName|Type|+---------------+---------+|product_id|int||start_date|date||end_date|date||price|int|+---------------+---------+(product_......
  • 世微 AP5186 LED降压型恒流芯片 三功能全亮 暗亮 爆闪SOT23-6
    产品描述AP5186是一款集成三功能的开关降压型LED恒流驱动器。通过电源的接通与关断可实现功能之间的切换:100%全亮→25%暗亮→爆闪。AP5186内部还集成了VDD稳压管,过温保护电路,短路保护电路等,用少量的元器件即可提供优良的系统可靠性。AP5186采用SOT23-6封装,固定关断时间......
  • 通用定时器及定时器中断实验
    定时器:顾名思义是用来定时的一个外设。stm32有八个定时器,分三类计数器计数模式又分为三种:向上,向下,向上/下计数。向上:计数器从零计数到自动加载值,然后重新从零开始并产生一个计数器溢出事件。向下:计数器从自动加载值计数到零,然后重新从自动加载值开始并产生一个计数器溢出事件......
  • 代码随想录算法训练营第八天 | 344.反转字符串,541.反转字符串II,卡码网:54.替换数字,151.
    一、344.反转字符串题目链接:LeetCode344.反转字符串学习前:思路:相向指针。left=0,right=length-1,不停交换left和right的值时间复杂度:O(n)空间复杂度:O(1)学习后:了解swap函数通过位运算实现的方式二、541.反转字符串II题目链接:LeetCode541.反转字符串II学习前:思路:ne......
  • [香橙派开发系列]中断?不!中断!
    目录前言一、什么是中断二、普通单片机和系统单片机的区别三、中断的区别四、配置香橙派的中断1.进程版2.wiringPi库函数版3.线程版3.1Linux内核的线程总结前言中断这个在很多单片机中都是比较常见的,像什么51单片机,stm32单片机都是可以通过自己的设置来实现中断的。在香橙派这......
  • springboot051医院管理系统-计算机毕业设计源码+LW文档
    一、立题依据(研究的目的与意义及国内外现状):现如今,互联网的广泛普及与应用,标志着信息化的时代已经到来,管理信息化行业在生活中占据着越来越重要的地位,信息化的服务与管理,大大简化了传统的管理模式,很大程度上,改善了使得人们的生活水平和工作方式。简单的来说医院管理信息化的形式非......
  • 世微 AP5219 平均电流型LED 降压恒流驱动器 兼容LN2516/LN2517
    产品描述AP5219是一款PWM工作模式,内置功率管,适用于5V~100V输入的高精度降压LED恒流驱动芯片。输出功率可达25W,电流2.5A。AP5219可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮模式。AP5219工作频率固定在130KHZ,同时内置抖频电路,可以降低对其他设备的EMI干扰。另......