-
2020-07-17 08:36:37
中断
TMOD:定时器/计数器工作方式寄存器
TCON:定时器/计数器控制寄存器
IE:中断允许控制寄存器
IP:中断优先级控制寄存器
外部中断0
外部0中断触发:(P3.2口触发;P3.2触发;P3.2触发)
若IT0=0,则为低电平触发
若IT0=1,则为下降沿触发
外部中断0初始化:
初始化方法一:
void Init_INT0() { IT0=1;//设置外部中断0;下降沿触发 EX0=1;//开启外部中断0; EA=1;//开启中断总开关 } 初始
化方法二:
void Init_INT0() { TCON=TCON|0x01;//0000 0001->0x01相当IT0=1;设置下降沿触发中断 IE=0x81;//1000 0001->0X81; //第一个1是EA=1;即中断总开关 //第二个1是EX0=1;即中断分支开关 } 外部0
中断子函数:
void RSI_INT0() interrupt 0 { P0=~P0;//当触发中P0口的LED取反 }
主函数:
void main() { P0=0xff;//灯全熄灭 Init_INT0();//初始化外部中断0 while(1); }
外部中断1:
外部1中断触发:(
P3.3口触发;P3.3触发;P3.3触发
)若IT1=0,则为低电平触发
若IT1=1,则为下降沿触发
外部中断1初始化:
方法一:
void Init_INT1() { IT1=1;//设置外部中断1;下降沿触发 EX1=1;//开启外部中断1; EA=1;//开启中断总开关 }
方法二:
void Init_INT1() { // IT1=1;//设置下降沿触发 // EX1=1;//外部中断1的分支开关 // EA=1;//中断总开关 TCON=TCON|0x04;//0000 0100->0x04相当IT1=1;设置下降沿触发 IE=0x84;//IE=1000 0100->0x84 //第一个1相当EA=1;第二个1相当EX1=1 } 外部1
中断子函数:
void ISR_Int1() interrupt 2 { P0=~P0;//取反 }
主函数:(P3.3给了下降沿,软件触发)
void main() { P0=0xff;//熄灭所有的灯 Init_INT1();//外部中断1初始化 while(1){ Int1=1; Int1=0;//P3.3由1->0;下降沿触发 } }
该主函数可进行Dobug,查看函数的走向。
例题:(中断嵌套)
利用外部中断0,进行3次流水灯;
利用外部中断1,进行3次闪耀;
且外部中断1的优先级高于外部中断1。
不进行中断时LED灯处于熄灭状态。
#include <reg51.h> //延时程序 void delay() { int i,j; for(i=0;i<10;i++) for(j=0;j<3000;j++); } //外部中断0和1初始化 void Init_INT01() { TCON=TCON|0x05;//0000 0101->0x01相当IT0=1,IT1=1;设置下降沿触发中断 IE=0x85;//1000 0101->0X85; //第一个1是EA=1;即中断总开关 //第二个1是EX1=1;即中断1分支开关 //第二个1是EX0=1;即中断0分支开关 IP=IP|0x04;//设置外部中断1优先级高于外部中断0 } //LED右移程序 void lelf(unsigned int n) { unsigned int i,j; for(i=0;i<n;i++) { for(j=0;j<8;j++) { P0=~(0x80>>j); delay(); } } P0=0xff; } //闪耀程序 void flash(unsigned int n) { unsigned int i; for(i=0;i<n;i++) { P0=~P0; delay(); } } void main() { Init_INT01(); while(1); } //外部中断0子程序 void out_INT0() interrupt 0 { lelf(3); } //外部中断1子程序 void out_INT1() interrupt 2 { flash(4); }
定时器0中断:
中断触发:
定时/计数时间到触发中断
定时/计数原理:
脉冲下降沿,定时器/计数的值加 1
初始化程序:
//定时器/计数器0初始化void tminer0_Init() { TMOD&=0XFC;//选择定时模式C/T=0;计数模式C/T=1; TMOD|=0x01;//选择定时器0;工作模式1,16位定时/计数 TH0=0xFF; //装初值 TL0=0xFE; //定时1us ET0=1; //定时器0开关 EA=1; //中断总开关 TR0=1; //启动定时器0 }
中断子程序:
//定时器中断0子程序 void time0() interrupt 1 { TH0=0xFF;//重新装初值 TL0=0xFE;//定时1us P0=~P0; }
主程序:
void main() { tminer0_Init(); while(1); }
定时器1中断:
#include <reg51.h> //定时器/计数器1初始化 void tminer1_Init() { TMOD&=0XCF;//选择定时模式C/T=0;计数模式C/T=1; TMOD|=0x10;//选择定时器1;工作模式1,16位定时/计数 TH1=0xFF;//装初值 TL1=0xFE;//定时1us ET1=1;//定时器1开关 EA=1;//中断总开关 TR1=1;//启动定时器1 } void main() { tminer1_Init(); while(1); } //定时器中断1子程序 void time0() interrupt 3 { TH1=0xFF;//重新装初值 TL1=0xFE;//定时1us P0=~P0; }
更多相关内容 -
228-外部中断0电平触发(51单片机C语言实例Proteus仿真和代码)
2022-06-16 06:14:44228-外部中断0电平触发(51单片机C语言实例Proteus仿真和代码)228-外部中断0电平触发(51单片机C语言实例Proteus仿真和代码)228-外部中断0电平触发(51单片机C语言实例Proteus仿真和代码)228-外部中断0电平触发(51... -
51单片机外部中断编程实例
2020-07-18 15:41:4751单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;下面一起来学习一下 -
UCOSIII外部中断和串口中断管理
2018-05-03 15:43:25UCOSIII系统下按键外部中断和串口2中断管理,按键按下改变LED灯状态,串口2将接收到的数据发送出去。 -
51单片机学习——8.1外部中断0和1
2021-02-13 08:49:54外部中断0和1外部中断原理编程原理(外部中断0)代码实现 外部中断原理 外部中断0:(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置...外部中断0和1
外部中断原理
外部中断0:(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
外部中断1:(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。编程原理(外部中断0)
- 首先我们对中断允许控制寄存器IE赋值,打开中断总开关,令EA=1.
- 然后我们还需要打开外部中断0的开关,令EX0=1
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断1允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU中断允许(总允许)位。 - 最后再对中断请求标志TCON寄存器赋值,我们可以选择的外部中断0的触发方式有两种,一种是低电平触发方式,一种是下降沿的触发方式。如果选择低电平触发,则令IT0=0,如果选择下降沿触发,则令IT0=1。
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为低电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。4.完成以上过程就完成了对中断系统的初始化 ,然后需要编程中断服务函数。格式如下:
void init0() interrupt 0 using m { 函数体 }
函数名(自定):init0
0:外部中断0的中断标号
m:寄存器组
在实际编程中using m 可省去
代码实现
通过独立按键来控制第一个led灯的亮灭
#include<reg52.h> typedef unsigned char u8; typedef unsigned int u16; sbit led1=P2^0; sbit K3=P3^2;//通过独立按键触发外部中断0 void intint0()//外部中断初始化 { EA=1; EX0=1; IT0=1; } void delay(u16 i)//延时函数 { while(i--); } void main() { intint0();//在主函数中调用初始化外部中断0 while(1); } void int0() interrupt 0 //中断服务函数 { delay(1000);//延时消抖 if(K3==0) { led1=~led1;//是第一个led灯状态反转 } }
-
51 中断系统 外部中断0 外部中断1
2019-06-14 22:26:11EX0(IE.0),外部中断0允许位; ET0(IE.1),定时/计数器T0中断允许位; EX1(IE.2),外部中断0允许位; ET1(IE.3),定时/计数器T1中断允许位; ES(IE.4),串行口中断允许位; EA (IE.7), CPU中断允...51单片机的中断系统结构
中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU中断允许(总允许)位。
中断请求标志
1、TCON的中断标志
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
中断源
中断响应条件
中断源有中断请求;
n此中断源的中断允许位为1;
CPU开中断(即EA=1)。
以上三条同时满足时,CPU才有可能响应中断。
#include "reg51.h" #include "intrins.h" typedef unsigned char u8; typedef unsigned int u16; sbit k1=P3^3; sbit led=P2^0; void delay(u16 i) { while (i--); } //外部中断0条件 void Int0Init() { IT0 = 1; //设置外部中断的触发方式为下降沿触发。 EX0 = 1; //开启外部中断0 EA = 1; //中断总开关 } //外部中断1条件 void Int1Init() { IT1 = 1; //设置外部中断1的触发方式为下降沿触发。 EX1 = 1; //开启外部中断1 EA = 1; //中断总开关 } void main() { Int1Init(); while(1); } void Int0() interrupt 0 { delay(1000); if(k1 == 0) { led= ~led; } } void Int1() interrupt 2 { delay(1000); if(k1 == 0) { led= ~led; } }
proteus 8 电路原理图,k3接p32,k4接p33。p32默认高电平,按下k3后,电平拉低,产生下降沿,触发中断0。同样k4按下,触发为中断1。
#include "reg51.h" #include "intrins.h" typedef unsigned char u8; typedef unsigned int u16; sbit k3=P3^2; sbit k4=P3^3; sbit led=P2^0; void delay(u16 i) { while (i--); } //外部中断0条件 void Int0Init() { IT0 = 1; //设置外部中断的触发方式为下降沿触发。 EX0 = 1; //开启外部中断0 EA = 1; //中断总开关 } //外部中断1条件 void Int1Init() { IT1 = 1; //设置外部中断1的触发方式为下降沿触发。 EX1 = 1; //开启外部中断1 EA = 1; //中断总开关 } void main() { Int0Init(); while(1); } void Int0() interrupt 0 { delay(1000); if(k3 == 0) { led= ~led; } } void Int1() interrupt 2 { delay(1000); if(k4 == 0) { led= ~led; } }
-
51单片机外部中断0实例详解
2021-05-22 03:49:54151单片机的中断源51单片机共有5个中断源,分别为:外部中断0定时器0中断外部中断1定时器1中断串口中断每一个中断都对应一个中断向量,中断向量表如下所示:2什么是中断事件当中断发生时单片机将正在执行的程序暂时...今天就以51单片机的外部中断0为例,来简单讲解一下单片机中断的用法。
1 51单片机的中断源
51单片机共有5个中断源,分别为:外部中断0
定时器0中断
外部中断1
定时器1中断
串口中断
每一个中断都对应一个中断向量,中断向量表如下所示:
2 什么是中断事件
当中断发生时单片机将正在执行的程序暂时放下而去处理中断事件,当中断事件处理完毕后再接着去处理之前的事情,这样可以大大降低单片机的资源,提高执行效率。举个例子说明一下什么是中断:
我很喜欢打CS,每天晚上我都会抽时间打CS,但同时厨房里正在烧水,为了不使水烧干,我每隔5分钟就去厨房看一下水有没开,但这就错过了游戏老被别人爆头干掉,我很苦恼,怎么办。于是我在网上买了一个水烧开就会叫的水壶,这样我就不用每隔5分钟去厨房了从而可以专心的打游戏,只有听到水壶吱吱叫的时候,我去把水倒出来就可以了。
在这个例子里,打游戏就是主任务,水烧开就是中断,吱吱叫就是中断向量,听到吱吱响我就明白水烧开了,这时我要把打游戏这个主任务暂时放下,转而去处理水烧开了这个中断事件,水倒完后我就又回到了游戏这个主任务中。这样是不是提高了打游戏的效率呢?
3 中断的硬件实现
51单片机的外部中断0引脚接一只按键,该按键通过上拉电阻接到电源,即没有按键发生时单片机检测到的是高电平,当按键按下时单片机检测到的是低电平。单片机的P0.0引脚以灌电流的方式接了一只LED,当按键按下时LED灯点亮,没按键时LED灯熄灭。
4 中断的软件实现
单片机中断函数的写法比较固定,51单片机中断函数的写法如下:
void Initd() interrupt 0
其中:void:为中断函数的返回类型,中断函数多为空类型;
Initd():是中断函数的名称,这个函数名符合C语言函数命名规范就可以,随便起;
interrupt:为51单片机中断的关键字,必须这么写(51单片机必须这么写);
0:为中断向量,该值详看第一个表格,如果是外部中断1就写2,如果是定时器1中断就写3;
中断函数不用在主函数中调用,只要中断事件发生,单片机自己主动会调到中断函数中。
该例子的函数如下所示:
5仿真实现
当按键发生时,LED灯点亮,如下图所示。注意对比两种图中按键的状态。
-
外部中断0和外部中断1
2016-03-11 23:01:56源程序: #include #define LED P1 void delay(int x); void light(int x); void light1(int x); void main() { IE=0x85; ... LED=0xff; while(1) { delay(500); LED=~LED; } } void -
8051外部中断1解析
2019-07-23 10:41:21程序实现的功能: 在实验板上左下方有一...(外部中断1和外部中断0在处理上类似, 红色的部分为不同之处) 中断处理程序标号: 外部中断0 -----------> 0 定时器0中断 -----------> 1 外部中断1 -----------&... -
8051外部中断0解析
2019-07-23 10:23:44我们令IT0 = 1, 即选择了"边沿触发", 所以每当独立按键按下时, 中断处理函数EX_INT0()就会执行. 当进入中断处理函数执行时, 若P32引脚的电平为低电平, 则说明K3按键已按下; 若P32引脚的电平为高电平, 说明K3按键已... -
6.STC15W408AS单片机外部中断
2021-07-15 09:29:24一、外部中断简介 STC15W408AS单片机有4个外部中断,它们分别是:外部中断0(INT0)、...TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外部中断0和1是上升沿和下降沿均可触发还是仅下降沿触发。如果ITx = 0(x = 0,1),... -
51单片机外部中断流水灯(汇编语言)
2018-06-13 20:07:16设计一个外部中断触发流水灯系统:当外部中断来临时,启动流水灯,即从P2口的LED循环点亮。可以从protues中看到结果 -
STM32F103:外部中断(EXTI)——原理和程序
2021-11-23 13:50:08一、外部中断(EXTI)—简介 EXTI (External interrupt/event controller)——外部中断/事件控制器。 互联型STM32有20个能够产生事件/中断请求的边沿检测器,STM32F103系列有19个能够产生事件/中断请求的边沿检测器。 ... -
外部中断和定时器中断
2018-11-20 13:53:278.外部中断实现代码 9.定时器/计数器中断工作原理 10.定时器/计数器定时值的计算 11.定时器/计数器实现代码 1.什么是中断 中断就是指CPU正在执行一项任务A,然后突然停止任务A去执行任务B,执行完任务B再回来... -
外部中断----高低电平触发,(边沿触发)上升沿触发和下降沿触发区别
2019-07-26 20:09:44外部中断可以分为电平触发和边缘触发两种,那么这两种中断有什么区别,我们今天讲解下 1什么是中断 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理... -
STM32外部中断
2021-05-22 21:58:11外部中断概述 外部中断是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续... -
外部中断1
2020-12-08 17:27:15实验现象:下载程序后,操作K4按键使LED1(D11)状态取反 接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节) 1,单片机-->LED&交通灯模块 P20-->D1 2,单片机-->独立按键... -
实验11:外部中断0
2020-03-05 21:11:06实验11:外部中断0 /************************************************************************************** * 外部中断0实验 * 实现现象:下载程序后按下K3按键可以对D1小灯状态取反。 注意事项... -
外部中断和事件的区别
2018-01-08 15:27:04下图为外部中断和事件的示意图,图中蓝色和红色的虚线分别为外部中断和事件的控制流程图。 由该图可知,中断和事件并没有区别,只是在芯片内部呈现区别。中断到达步骤5后向CPU产生中断请求,需要软件的中断服务函数... -
快速复习51单片机的外部中断、计数/定时器中断和串行口中断,加代码实现
2021-09-13 15:12:32SBUF是像是李信,光信和暗信是一个英雄,但是有不同的技能和外观。 -
单片机实验说明二>外部中断基本使用
2020-10-21 21:55:14请编程实现:当外部中断0请求中断时发光二极管左移;当外部中断1请求中断时发光二极管闪烁。 电路设计: 软件代码: /***************************************************************************** * ... -
51单片机上的检测外部中断程序,分别由汇编和C编写
2011-07-23 00:27:2951单片机上的检测外部中断程序,分别由汇编和C编写.经验证,能成功运行 -
ESP32外部中断
2021-11-21 17:43:22文章目录前言一、外部中断概念二、配置外部中断1.编写中断服务函数2.配置中断总结 前言 提示:以下是本篇文章正文内容 一、外部中断概念 外部中断是单片机实时地处理外部事件的一种内部机制 当外部事件发生后,... -
外部中断
2020-11-20 12:41:42文章目录外部中断硬件控制外部中断矢量外部中断控制寄存器外部中断控制位软件控制外部中断0初始化方法外部中断1初始化方法外部中断程序框架示例P3.2口脉冲输入计数 硬件控制 外部中断矢量 中断源名称 中断源地址... -
51单片机的定时器和外部中断的程序
2012-05-04 16:28:1351单片机的定时器和外部中断的程序,可移植性强 -
51单片机——外部中断
2021-04-16 12:35:06一、外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了。(传送门:51单片机入门教程(5)——定时器中断) 中断是指计算机运行过程中,出现...INT0 – 外部中断0 最高 0 T0 – 定时器/计数器0中断 第2 ... -
外部中断与内部中断原理与使用
2021-07-26 09:36:51外部中断源2个 1.INT0 — 由P3.2端口控制引入,低水平或者下降沿引起。(下降沿就是给5V后给0V形成下降电压) 2.INT1 —由P3.3端口控制引入,低水平或者下降沿引起。 (这两个中断源标志与中断方式由特殊功能寄存器... -
51单片机~定时器和外部中断(各个位控制作用详解)
2021-04-18 14:13:53(一)中断 (二)定时器,计数器中断 TL0低八位先进行存储,达到0XF,向上进一,直到...(2)控制寄存器TCON:(低四位控制外部中断,高四位控制计数器启动和中断申请) (3)定时器的四种工作方式: ... -
Cortex-M0系列 ~ 外部中断
2018-08-16 16:31:52STM32的每个I/O都可以作为外部中断的中断输入口,每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。这里使用的外部中断来检测按键,下面是相关配置代码~ void EXTIX_Init() { GPIO_InitTypeDef GPIO... -
带你了解什么是中断以及外部中断案例分析
2021-06-09 23:37:27每按一下按键(外部 0 中断 P3.2),8 个 LED 从下向上流水 1 次。 电路图: 代码: #include<reg51.h> #include<intrins.h> void delay(unsigned int m) { unsigned int i; for(;m>0;m--) { ...