51内核的最基础的中断源请求有外部中断、定时器中断和串口中断,这也是学习和开发者最长用的。当然还有其他的中断源,比如ADC、SPI、PWM等。以外部中断0为例,在编程中常使用的方式为:
void INT0()interrupt 0 using 1
{
……
}
在这里特别做上笔记:其中前面的void INT0() 只是代表一个普通没有形参的函数而已,函数名写成什么都是可以的,这个到不重要。那么后面的就一个一个词的扣把:
其中 interrupt n 组成一组,n用来指明中断号,在函数后使用了interrupt关键字后,就会自动的生成中断向量,51内核中断号如下图,这是我今天查的正在使用的MCU:
例如:
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1
。。。
对于51内核的MCU,不同厂家及不同型号的内部资源会有所不同,上图是我正在开发的一款中颖SH88F516单片机,由上图可见内部资源还算可以,能够满足一般的产品。后面的using n 指的是使用第n组寄存器。这个之前我在使用的过程中往往忽略了这个,也没有出现什么问题。但是今天注意到这个问题,查完资料后用上发现效果还不如不用,很有肯能是没有把这个知识用好的原因把。对比之后给我的感觉是在使用C语言写程序时,能不用就不用吧。查资料解释说假如在中断函数中使用了using n,中断不再保存R0-R7的值,这也就意味着假如一个高优先级的中断及一个低优先级的中断同时使用了using n,而这个n恰恰相等,那就等着哭把,因为这个BUG还真不是那么好找出来的(今天我就遇到了这个问题)。
其次就是中断优先级的问题了,如图上面的中断表,在右侧第二栏标的很清楚,除了复位之外,就数外部中断0优先级最高了,依次往下排列,那么问题来了,今天刚好就碰到了需要串口0的优先级比定时器0的优先级高。没办法,只好接着啃数据手册,还好这寄存器不多,一会就查到了下表和相关的描述:
所以按照描述修改下优先级就可以达到目的了。
总结:用到回过头来用到51的中断,发现有些东西在之前学习的时候并没有太在意,导致现在在开发产品上使用的时候不清楚用途。因为工作跟学习性质是不一样的,作为开发者的角度来说,质量往往是第一要求。同时会接触到很多新鲜的事物和技术,但是话又说回来了,最基本的知识还是需要打牢。要学的东西太多了!记不住,怎么办?想个办法记住它,比如写该笔记。知识很基础,但是我想以后很难再忘记!
关键字:单片机 51内核 中断 中断向量
引用地址:
【单片机笔记】51内核的中断及中断向量
推荐阅读最新更新时间:2024-03-16 16:20
51单片机汇编——延时和点灯
前言 这篇文章主要是看视频学习51汇编,但是我的环境总是配置不好,出现了这个问题(keil2+vdmagdi.exe+Proteus),有懂的小伙伴可以帮助一下我 ^.^ 一、延时程序 1.1 延时程序的简介和分类 在单片机的控制应用中,常有延时的需要,CPU 过一段时间再去做某件事,称之为延迟。延时有两种方法,即软件延时和硬件延时 硬件延时是通过定时/计数器(中断程序)来实现的,这种方法不占用 CPU 的工作时间 软件延时一般采用循环程序,通过 CPU 执行一个具有固定延迟时间的循环体来实现的 1.2 软件延时 1、机器周期数 延时程序的延时时间主要与两个因素有关,一是所用晶振,二是延时程序中的循环次数,一旦晶振确定之后
[单片机]
51单片机按键程序中while(!key)的作用是什么
我相信大家也是常常遇到过这一句代码while(!key);,那么大家知道这句代码是有什么用吗?在这我就和大家分享一下,还是用代码来说话吧: #include reg52.h typedef unsigned int uint; typedef unsigned char uchar; sbit key=P1^0; void delay(uint x) { uchar i; while(x--)for(i=0;i 120;i++); } void scan_key(void) { uchar j; if(key==0)//判断按键是否被按下 delay(10);//按键消抖 if(key==0)
[单片机]
提高MSP430G系列单片机的Flash擦写寿命方法
简介:本文从软件方面,以及安全性方面探讨了使用MSP430G 系列单片机在使用Flash 模拟EEPROM方面的应用,提供了两种不同的方式供选择。两种方式都可以大幅度提高模拟EEPROM 的编写、擦除寿命,并且满足高可靠性的应用设计,用户可以结合具体的应用进行选择。 在嵌入式设计中,许多应用设计都需要使用EEPROM 存储非易失性数据,由于成本原因,某些单片机在芯片内部并没有集成EEPROM。MSP430G 系列处理器是TI 推出的低成本16 位处理器,在MSP430G 系列单片机中并不具备EEPROM。为了存储非易失性数据,MSP430G 系列处理器在芯片内部划分出了256 字节的Flash 空间作为信息Flash,可用于存
[单片机]
ARM学习之中断体系结构
今天下午和晚上研究了一直在研究s3c2410中断体系结构,虽然以前老师上课也接触过,考试也考过,但仔细研究起来,还是有不少收获的。现记述如下: 1.什么是中断? 答:中断是CPU保证并发程序的一种机制。它使得CPU在执行程序的时候能够响应异常的情况发生。 其实,在CPU在运行的过程中,如何知道各类外设发生了某些没预期的事,比如说串口接受到了数据、USB接口中插入了设备、按下了某个按键。有两种方法,一个是前面所说的中断、另一个就是轮询方式。(就是不断的while循环查询)。从某种程度上说,这两种方式其实是一样的。前者是把查询的时间跨度缩小到每条指令执行结束后,即当某事件发生时,硬件会设置某个寄存器;CPU在每执行完一条指令时,通过硬
[单片机]
nRF24L01单片机通信的总结--看了就会用了
1周时间,我从一个没用过STC单片机,不知道什么叫SPI接口的“文盲”,把nRF24L01的整个通信过程弄到完全没有bug.。兴奋之余来小屁一下。给那些正在奋斗着这个牛逼的芯片的小牛们小炫一下。希望有所帮助。屁话少说。正题: 基本的东西我理解了,那就是:1.用5根线的SPI接口向2401发送数据或指令。2.芯片在每次上电的时候都需要进行一番配置。这些配置数据,就是所谓的指令了。3.配置完成后知道芯片处在哪个模式。并且知道它将要转向哪个模式。4.通讯协议。5.观察现象。 好了,小牛们一定急切想知道自己的程序问题出在哪里了,再小白一点的一定想急切的知道如何配置才能让它工作。更小白一点的一定想知道这个芯片的各个模式之间是怎么联系
[单片机]
51单片机常用寄存器速查表
一 : 定时器 / 计数器方式选择 : TMOD 地址 (89H) 不可位寻址 D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 GATE : 门控制位 GATE= 0 时于外部中断无关 GATE= 1 时无外部中断才允许启动。即( INT0/1 = 1 时) C/T : 定时、计数 方式选择位。 C/T=0 时为定时
[单片机]
51单片机项目设计:定时宠物喂食系统
链接:https://pan.baidu.com/s/1CKrXkIHite1LWaWM26gjeQ 提取码:abcd 取走点赞哦~ 题目要求: 一、拟解决的主要问题 1、仔细分析题目要求,理解投食器工作原理,明确工作任务和设计要求,确定整体设计方案,选定单片机以及相关传感器等元器件,实现投食器设定时间,按设定时间发出响声,吸引宠物过来并自动投放食物等功能; 2、通过Proteus软件进行设计与仿真,给出系统硬件设计框图、元件选择及各部分电路原理图; 3、软件程序流程并编写程序; 4、软硬件联合调试; 5、完成实物焊接,调试实物, 二、设计方案 基于单片机的自动投食器设计,通过模块化的设计,利用ST
[单片机]
GPIO做输出还能作外部中断输入吗?
偶尔会有人问起STM32芯片的GPIO做输出时还是否可能作为外部中断触发输入,这里一起聊聊该话题。 作为STM32芯片,其外部中断触发源可以是硬件模式或软件模式。所谓软件模式就是通过操作相关寄存器产生内部中断触发信号并向内核NVIC控制器申请中断。硬件模式自然是指来自GPIO引脚的电平跳变信号经边沿检测器形成中断触发信号向内核申请中断。【注:还有个别外设事件也可以作为外部中断触发源映射到外部中断控制器。】 我们这里要谈的是基于硬件模式的外部中断话题。当STM32的GPIO作为输出时,可能是通用GPIO输出也可能是基于其它外设复用情况下的输出,即复用输出。 下图是GPIO作为基本输入输出时的功能框图。 下面是GPIO作为
[单片机]