首页 > 乐鱼官方网站

04 07 2024

51单片机的中断基本知识介绍

相关产品推荐

  对于单片机中断的概念,我们大家可以这样理解:单片机处理某一事件A时,发生了另一事件B请求(中断请求);单片机暂时中断当前工作,转去处理事件B(中断响应和中断服务);待单片机将事件B处理完毕,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。

  单片机的中断系统一般允许多个中断源,当几个中断源同时向单片机请求中断,要求为它服务的时候,这就存在单片机优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。单片机总是先响应优先级别最高的中断请求。

  当单片机正在处理一个中断请求源的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。单片机暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。

  上图是单片机内部和中断有关的电路,从图中我们大家都知道单片机可以有5个中断源,分别是/INT0,T0,/INT1,T1,RX和TX。/INT0和/INT1为外部中断源;T0和T1为定时器/计数器中断;RX和TX为串口收发中断。

  TF1是定时器1的溢出标志位,当定时器1发生溢出时,此位变成1,同时提出中断请求,从始至终保持到CPU响应中断时,才由硬件清0。如果程序不是采用中断的方式,而是采用查询的方式,那么这位需要软件清0。

  TR1是定时器1的运行控制位,当它为1时允许定时器1开始计数,为0时禁止定时器1计数。

  对于IE1,IT1,IEO,IT0的功能在上图中有描述了,就不多说了。

  IE寄存器是中断允许寄存器,只有相应的位置为1了,相关的中断才能被允许哦。

  IP寄存器是中断优先级控制寄存器,当某位被设成1了,那么对应的中断源就是高优先级了哦,就可以中断低优先级中断源的处理函数了哦。

  好了,今天给大家介绍了单片机内部中断电路和相关的寄存器,明天给结合程序给大家讲述怎么来实现单片机中断功能。

  上一条分享我们提到单片机一般有5个中断源,在这条分享中我们一起看看如何通过编程实现这些中断功能。1、外部中断外部中断源有:INT0和INT1,可由外部信号引发单片机的中断,我们应该将信号引到单片机的INT0和INT1管脚上。外部中断INTO和INT1即可底电平触发,也可下降沿触发。相关的寄存器有TCON,IE,IP。下面我们通过一段例程序理解下,怎样编写代码:#include “reg51.h”void init_int0(void)//中断功能的初始化函数,只有对相关的寄存器进行了正确的配置,采用运用单片机的中断功能哦。{IT0=1; //IT0是寄存器TCON的最低位,在这里设成1,单片机管脚INT0上的信号低跳变(下降沿)引发中断。EX0=1; //EX0是寄存器IE的最低位,在这里设成1,允许发生INT0中断。EA=1; //EA是寄存器IE的最高位,在这里设成1,相当于开启了允许中断的总开关。只有EA和EX0都设成1了, 才开启了INTO中断功能哦。}void main(void){init_int0(); //需要在主函数中,对INT0的相关寄存器进行初始化配置的。while(1);}Void exint0() interrupt 0 //中断函数,把我们大家都希望实现的功能加进入,这里面的代码应该尽可能简洁,短 小,以免占用太多的时间哦。{加上你希望实现的功能。}在看懂上面这段代码的基础上大家在想想如果希望是低电平引发中断,程序该怎么写呢?外部中断INT1的初始化函数和中断处理函数该怎么写呢?2、定时中断与定时器/计数器T0,定时器/计数器T1中断相关的寄存器主要有TMOD,THX,TLX,TCON,IE。下面我们通过一段例程看看怎样实现定时器/计数器的中断功能(以定时器/计数器0为例)。#include “reg51.h”void timer0_init(void)//定时器0中断初始化函数{TMOD=0x80; //将定时器/计数器0当成13位定时器/计数器,TL0只用低5位参与分频,TH0整个8位全用。TH0=0xXX;//设定定时器0初始计数值的高8位TL0=0xXX;//设定定时器0初始计数值的低8位TR0=1; //定时器0开始计数ET0=1; //开定时器0中断允许EA= 1; //开总中断允许}void main(void){timer0_init();while(1);}void timer0int interrupt 1{TH0=0xXX; //在中断处理函数里面记得给TH0重新赋初值哦TL0=0xXX; //在中断处理函数里面记得给TL0重新赋初值哦加上你希望实现的功能哦。}这样在单片机工作频率固定的前提下,我们大家可以通过调节TH0和TL0的初值来改变定时0的定时时长,从而改变定时中断发生的时间间隔。这样就以我们希望的时间间隔执行中断处理函数中的指令。定时器1的中断的初始化和定时器0的中断初始化类似。需要指出的是定时器0和定时器1有4中不同的工作方式,不同的工作方式的选择能够最终靠设置寄存器TMOD来实现。3、串口收发中断#include//FOSC = 11.0592MHz,12T模式,SMOD=0#define reload_count_1200bps 0xe8#define reload_count_2400bps 0xf4#define reload_count_4800bps 0xfa#define reload_count_9600bps 0xfdvoid serial_port_initial(char TH,char TL){SCON=SCON0x50; //确定串口工作方式,8位可变波特率,无奇偶校验位TMOD=TMOD0x20; //设置定时器1为8位自动重装记数器PCON=PCON0x00; //这个寄存器里有一位SMOD,它和波特率的确定有关。TH1 = TH; //设置定时器1自动重装数TH1,它和波特率的确定有关。TL1 = TL; //设置定时器1自动重装数TL1,它和波特率的确定有关。ES=1; //允许串口中断EA=1; //开总中断TR1=1; //开定时器1}波特率=(2SMOD/32)x(定时器1的溢出率) 定时器1的溢出率 = SYSclk/12(256-TH1)char UARTReceive(void) //串口数据接收函数{char ch;ch=SBUF;return (ch); // 暂存接收到的数据}void main(void){serial_port_initial(reload_count_2400bps,reload_count_2400bps);//初始化串口参数while(1);}void UART_Interrupr_Receive(void) interrupt 4//串口接收中断处理函数{ES = 0;RI = 0; //当串口接收到数据时,RI回被置1,同时引发中断,在中断处理函数中将其清零。buf = UARTReceive();ES = 1;}好了,今天简单地和大家伙儿一起来分享了一下单片机中断的一些基本知识,在这里只是简单地具了几个例,中断的用法很有技巧,这需要大家在项目的实践中去掌握,吃透。关键字:引用地址:51单片机的中断基本知识介绍

  ARP是Address Resolution Protocol的缩写。中文译做“地址解析协议”,本质是完成网络地址到物理地址的映射。从概念上讲就是找到一个映射方法f,使得“物理地址 = f(网络地址)”。物理地址有两种基本类型:以太网类型和proNET令牌环网类型,网络地址特指IP地址,对映射方法的要求就是高效。具体到以太网,它使用的是动态绑定转换的方法。为啥不直接用同一种地址,而要这么麻烦呢?因为TCP/IP网络就是为将不一样的种类计算机互联而发明的,它的体系结构是分层的,层和层之间相互独立,改变物理层的实现不会影响到网络层。 32位IP地址到以太网48位物理地址的映射,采用动态绑定转换的方法会遇到许多细节问题,例如:减

  以下程序已实际调试运行通过) ; ---AT89C2051加氧泵控制器源程序-OK! org 0000h ajmp main nop org 01bh clr tr1 ajmp timon org 30h main:mov 40h,#00h mov 41h,#00h mov 42h,#00h mov 43h,#02h mov 44h,#00h mov 45h,#00h

  发光二极管导通时,产生一个正向的工作电流IF,工作电流根据发光二极管的材料、功率等不同,额定电流一般在10~40mA左右,发光二极管导通时的正向压降VF比较大,一般为1.5~3V(普通硅二极管约为0.7V)。因此在正常使用中,为了能够更好的保证发光二极管在电源电压V的作用下管子的工作电流不超过额定值,必须给发光二极管串联一只限流电阻R,R的阻值可由下式算出:R=(V-VF)/IF。其中V为工作电源电压,VF为发光二极管的正向压降,IF为额定工作电流。 #include reg51.h #define uint unsigned int #define ucher unsigned char sbit

  目前,大多数的产品研究开发是在基于一些小容量的单片机上进行的。51系列单片机,是我国目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这样的一种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐全,速度慢慢的变快,也从一个侧面说明了51系列单片机在国内的生命力。 多年来我们从始至终想找一个合适的实时操作系统,作为自己的开发基础。根据开发需求,整合一些常用的嵌入式构件,以节约开发时间,尽最大可能地减少开发工作量;另外,要求这个实时操作系统能很容易地嵌入到小容量的芯片中。毕竟,大系统是少数的,而小应用是多数而广泛的。显而易见,uCOS-II是不太适合于以上要求的,而Ke

  的实时操作系统的实现 /

  一般而言,锂离子电池有三部分构成: 1.锂离子电芯 2.保护电路(PCM) 3.外壳即胶壳 电池的分类 从锂离子电池与手机配合情况去看,大体上分为外置电池和内置电池,这种叫法很容易理解,外置电池就是直接装在手上背面,如: MOTOROLA 191,SAMSUNG 系列等;而内置电池就是装入手机后,还另有一个外壳把其扣在手机电池内,如:MOTOROLA998,8088,NOKIA的大部分机型 1.外置电池 外置电池的封装形式有超声波焊接和卡扣两种: 1.1超声波焊接 外壳 这种封装形式的电池外壳均有底面壳之分,材料一般为ABS+PC料,面壳一般喷油处理,代表型号有 :MOTOROLA 191,SAMSUNG 系列,原装电池的外壳经喷

  目标:外部中断0实现led闪烁 #include reg52.h typedef unsigned int u16; typedef unsigned char u8; sbit k3 = P3^2; //独立按键,连接外部中断0 sbit led = P2^0; void delay(u16 i) { while(i--); } void Int0_init() //提前把外部中断0的参数准备好 { EA = 1; IT0 = 1; EX0 = 1; } void main() { Int0_init(); while(1); } void INT0() interrupt

  // 熔丝位 F7 DC F9 FF // 功能: pb1 输出高低电平 时隔为一秒 #include iom88v.h #include macros.h int blink_sign = 0; void timer0_init(void) { TCCR0A = 0x00; //timer0 普通模式 TCCR0B = 0x03; //预分频/64 启动TIME0 普通模式 TCNT0 = 0x83; //晶振8MHz, 频率为1KHz 0x83 = 256 - 8000000 * 1 / 64 / 1000 TIMSK0=0x01; SREG=0x80; //使

  前面的内容,我们从传统的51单片机出发,从硬件的基础上,一步步衍生出了增强型51单片机所增强的地方。现在我们大家可以清楚地了解,增强型51单片机对比传统的51单片机,增强的地方在于存储器的扩展。而51单片机对于片内内存的寻址方式和片外内存的寻址方式有着非常大的不同。因此,我们在使用C语言对增强型51单片机编程的时候,也需要按照寄存器位置的不同,采用不一样的操作方式。 1寄存器位于内部的特殊功能寄存器区 我们之前介绍传统8051单片机的时候,曾经列出了传统8051单片机已经使用的21个特殊功能寄存器,因此扩展外设寄存器的一个办法是利于剩余的特殊功能存储器空间。 由于51单片机的特殊功能寄存器寻址方式只能是直接寻址,不可间接寻址,因此在

  对比分析 /

  【下载】LAT1396 STM32CubeIDE实用技巧之STM32H7双核调试的配置

  【下载】LAT1343 STM32H5 USBD Classic驱动 CDC移植

  【下载】LAT1392 LTDC RGB接口 LCD的TouchGFX工程的移植步骤

  【直播】4月11日,STM32Trust如何帮助新产品设计提升信息安全保护能力

  【线日,基于Buildroot制作STM32MP13启动镜像-深圳/厦门/西安/郑州/苏州

  【新品】STM32U0新一代超低功耗入门级MCU,助力终端产品省电,安全,BOM成本低

  【新品】 STM32H7R/S基于Cortex-M7,运行频率高达600 MHz,板载闪存型MCU 拥有高速的外部存储

  【新品】STM32WBA54/55 支持BLE5.4、IEEE 802.15.4通信协议、Zigbee®、Thread和Matter协议

  【新品】STM32MP2 最高配备双核Arm® Cortex®-A35和Cortex®-M33的STM32MP2系列微处理器

  【新品】STM32H5-Arm® Cortex®-M33 内核,主频高达250MHz,提升性能与信息安全性

  【51单片机】矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤

  一、环境我用的是Keil5做编译工具,用proteus仿线不知道有无另外的好用的能生成 hex文件的软件(要单片机运行是需要生成 hex文 ...

  【51单片机】矩阵键盘线反转法实验仿线单片机】〈C语言+Keil5+Proteus仿真〉矩阵键盘逐行扫描法-20210414中,提到了矩阵键盘的线反转法,但是在仿真上出现了一 ...

  前言继上次仿真实验【51单片机】矩阵键盘线反转法实验仿真之后,尽管也对点阵LED进行了学习,但是,点阵LED的显示效果不佳(仿真时的色 ...

  前言系列文章中的四篇是我学习单片机以来写下的4篇学习记录。在有了以上知识的了解后,我也掌握了部分80C51单片机的编程思想,当然80C51可 ...

  1 A D与D A将模拟量转换为数字量称为模数转换(A D转换),模拟量是连续的,比如电压、电流等,可以连续变化的量;数字量是离散的,对应于 ...

  综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程词云:

相关文章