51单片机外部中断
- 格式:doc
- 大小:91.00 KB
- 文档页数:6
关于51单片机外部中断响应外部中断方式最好设为下降沿方式,特别是中断引脚接按键的情况。
外部下降沿中断:SETB IT0。
每个机器周期都由硬件对引脚自动采样,若连续在2个周期采样到电平从高到低,则认定有中断请求,IE0=1。
IE0会一直保持到该中断请求被CPU响应,响应前都不会自动清零,只有在响应后硬件才自动将IE0清零IE0=0。
外部低电平中断:CLR IT0。
当中断引脚为低电平时,并保持一个机器周期,硬件自动置IE0=1。
如果在下一个周期采样到中断引脚为高电平时,硬件自动将IE0清0。
中断标志位自动清0条件:下降沿中断只有CPU响应中断同时才会清0,否则一直保持。
低电平中断:任何时候当外部中断引脚为低电平时,IE0=1;为高电平时,IE0=0,所以不需要响应中断才会清0,与引脚状态有关。
注意:当EA=0时,中断引脚为低电平也不会将IE0自动置1,只有EA=1时才会自动置1单片机设计中有两个CPU时,主CPU控制副CPU中断时应注意:主CPU发出中断信号的时候,副CPU能够及时接收到,也就是副CPU工作状态不允许在关中断CLR EA的程序中运行。
只要副CPU不工作在关中断的程序中运行,主CPU发出的中断信号副CPU都能够及时响应中断。
还有就是如果采用下降沿方式,主CPU发出的高低电平之间间隔时间只需一条NOP指令。
所以应该尽可能考虑这个时差问题。
有时候就是副CPU还没有运行完屏蔽中断的程序的时候,主CPU就发出了中断信号,造成副CPU无法中断或时好时坏。
键盘中断到今天为止终于可以告一段落了。
现在才知道,程序架构有了并不代表程序就容易完成,更多的时间在于调试,防真,再调试,如此循环。
所以遇到问题要有耐心,信心,细心。
做到这三点,不行也得行!!!!。
51单片机interrupt用法1. 什么是51单片机interrupt?51单片机是一种常用的嵌入式微控制器,被广泛应用于各种电子设备中。
中断是一种特殊的处理机制,它允许单片机在执行某个任务的过程中,临时暂停当前的任务,去处理其他紧急事件。
这些紧急事件可以是来自外部设备的信号、计时器溢出等。
2. 为什么要使用interrupt?使用interrupt的好处是可以及时响应外部事件,提高系统的实时性和可靠性。
不使用interrupt的话,单片机只能按照预定的程序执行,无法即时响应外部事件,造成系统的延迟和不稳定。
3. 如何使用interrupt?首先,我们需要了解51单片机的interrupt架构。
51单片机有两个interrupt源,分别是外部中断和定时器/计数器中断。
外部中断:单片机的P3口(即引脚INT0和INT1)可以接收外部中断信号。
当INT0引脚检测到高电平脉冲时(可以通过软件设置为下降沿触发或低电平触发),单片机就会执行外部中断的相关程序。
INT1引脚类似。
定时器/计数器中断:单片机的定时器/计数器模块可以设置定时中断。
定时器可以根据一定的时钟源进行计数,当计数值达到预设值时,就会触发中断。
通过设置计数器的工作模式和计数初值,可以灵活控制定时中断的触发时间和频率。
对于外部中断,我们可以通过设置相应的中断控制寄存器来选择触发方式(下降沿触发、低电平触发等)。
然后,在主程序中需要响应外部中断的地方,我们可以编写一个中断服务程序(ISR),用来处理中断事件。
中断服务程序需要使用关键字”interrupt”进行声明,同时需要保存现场(将寄存器的值及其他关键状态保存在堆栈中),以便中断结束后能够正确恢复。
对于定时器/计数器中断,我们首先需要对定时器进行初始化设置,选择时钟源和工作模式。
然后,我们可以设置计数初值和中断触发时间。
当计数器达到预设值时,中断程序会被执行。
下面我们就来介绍一个常见应用案例:使用外部中断实现按键控制LED的亮灭。
用51单片机的外部中断来测频率//晶振:12M//实验方法:首先要把51hei单片机开发板上的ne555的方波输出信号J7的第一脚用杜邦线//引入P3.2口,数码管即可显示ne555震荡电路当前的频率值,旋动PR1电位器可//发现数字有变化.//原理:1秒钟内计数外部脉冲个数,如计数1000次,则表示频率为1000Hz//1秒钟定时采用51单片机定时器0实现,外部脉冲由外部中断0引脚接入#includereg51.h#include51hei.h#define uchar unsigned charuchar counter1;sbit duan=P2 ;//74HC573的LE端U5 LED的段选端sbit wei=P2 ;//74HC573的LE端U4 LED的位选端unsigned int counter2,tmp; uchar table[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 共阳型数码管09显示unsigned int dis[6]; uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //共阳型数码管控制端init();delay(uchar);display(); jishu(); void main(){guandz();init();while(1){ jishu(); } }//定时器0和外部中断0的初始化init(){ EA=1;EX0=1;ET0=1;IT0=1; TMOD=0x01;TH0=0x3c;TL0=0xaf;TR0=1;} //延时程序delay(uchar x){uchar a,b;for(a=x;a0;a--) for(b=20;b0;b--);}//外部中断0中断程序void external0() interrupt 0{ tmp++; } //定时器0中断程序void timer0() interrupt 1{ TH0=0x3c;TL0=0xaf;counter1++; } //显示程序display(){uchar i; dis[0]=counter2/10000; //获取计数值的万位dis[5] =counter2%10000;dis[1]=dis[5]/1000; // 获取计数值的千位dis[5]=dis[5]% 1000;dis[2]=dis[5]/100; // 获取计数值的百位dis[5]=dis[5]%100;dis[3]=dis[5]/10; // 获取计数值的十位dis[4]=dis[5]%10; // 获取计数值的个位for(i=0;i5;i++) //依次显示万、千、百、十、个位,动态显示{ // P0=0xff; P0=con[i]; wei=1; wei=0; P0=table[dis[i]]; duan=1; duan=0; delay(1); P0=0; duan=1; duan=0; } }。
一.外部中断相关寄存器1.定时器/计数器控制寄存器控制寄存器(TCON)IT0:外部中断0触发方式控制位当IT0=0时,为电平触发方式(低电平有效)当IT0=1时,为边沿触发方式(下降沿有效)IT1:外部中断1触发方式控制位当IT1=0时,为电平触发方式(低电平有效)当IT1=1时,为边沿触发方式(下降沿有效)2.中断允许控制寄存器(IE)EX0:外部中断0允许位;EX1:外部中断1允许位;EA :CPU中断允许(总允许)位。
二.外部中断的处理过程1、设置中断触发方式,即IT0=1或0,IT1=1或02、开对应的外部中断,即EX0=1或EX1=1;3、开总中断,即EA=1;4、等待外部设备产生中断请求,即通过,口连接外部设备产生中断5、中断响应,执行中断服务函数三.程序编写要求:通过两位按键连接外部中断0和1,设定外部中断0为下降沿触发方式,外部中断1为低电平触发方式,按键产生中断使数字加减,用一位共阳极数码管来显示数值。
目的:感受外部中断对程序的影响,体会低电平触发和下降沿触发的区别。
#include<>#define uint unsigned int #define uchar unsigned char uchar code dat[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uint num;void main(){EA=1; //开总中断IT0=1; //下降沿触发IT1=0; //低电平触发EX0=1; //外部中断0允许EX1=1; //外部中断1允许while(1){P0=dat[num%10];}}void plus() interrupt 0//外部中断0 {EX0=0;num++;EX0=1;}void minus() interrupt 2//外部中断1{EX1=0;num--;EX1=1;}。
51单片机中断系统详解51 单片机中断系统详解(定时器、计数器)51 单片机中断级别中断源INT0---外部中断0/P3.2 T0---定时器/计数器0 中断/P3.4 INT1---外部中断1/P3.3 T1----定时器/计数器1 中断/P3.5 TX/RX---串行口中断T2---定时器/计数器 2 中断第5 最低4 5 默认中断级别最高第2 第3 第4 序号(C 语言用) 0 1 2 3 intrrupt 0中断允许寄存器IE位序号符号位EA/0 ------ET2/1 ES ET1 EX1 ET0 EX0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 EA---全局中允许位。
EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。
EA=0,关闭全部中断。
-------,无效位。
ET2---定时器/计数器2 中断允许位。
ET2=1, 打开T2 中断。
ET2=0,关闭T2 中断。
关,。
ES---串行口中断允许位。
关,。
ES=1,打开串行口中断。
关,。
ES=0,关闭串行口中断。
关,。
ET1---定时器/计数器1 中断允许位。
关,。
ET1=1,打开T1 中断。
ET1=0,关闭T1 中断。
EX1---外部中断1 中断允许位。
EX1=1,打开外部中断1 中断。
EX1=0,关闭外部中断1 中断。
ET0---定时器/计数器0 中断允许位。
ET0=1,打开T0 中断。
EA 总中断开关,置1 为开;EX0 为外部中断0 (INT0) 开关,。
ET0 为定时器/计数器0(T0)开EX1 为外部中断1(INT1)开ET1 为定时器/计数器1(T1)开ES 为串行口(TX/RX)中断开ET2 为定时器/计数器2(T2)开ET0=0,关闭T0 中断。
EX0---外部中断0 中断允许位。
EX0=1,打开外部中断0 中断。
EX0=0,关闭外部中断0 中断。
中断优先级寄存器IP位序号位地址------PS/0 PT1/0 PX1/0 PT0/0 PX0/0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -------,无效位。
51单片机中断程序例子1. 外部中断程序:外部中断是指由外部设备或外部信号触发的中断。
在51单片机中,通过设置中断允许位和中断优先级来实现对外部中断的响应。
例如,当外部设备发出一个信号时,单片机可以立即停止当前任务,转而执行外部中断程序。
外部中断程序的编写需要根据具体的外部设备和信号进行相应的处理,如读取设备状态、处理数据等。
通过外部中断程序,可以实现单片机与外部设备的互动和数据交换。
2. 定时器中断程序:定时器中断是指通过设置定时器的计数值和中断允许位,使得在指定的时间间隔内触发中断。
在51单片机中,可以通过定时器中断来实现定时任务的执行。
例如,可以设置一个定时器,在每隔一定的时间就触发中断,然后在中断程序中执行相应的任务,如数据采集、数据处理等。
通过定时器中断程序,可以实现定时任务的自动执行,提高系统的实时性和可靠性。
3.串口中断程序:串口中断是指通过串口通信接口接收或发送数据时触发的中断。
在51单片机中,可以通过设置串口中断允许位和中断优先级来实现对串口数据的中断处理。
例如,当接收到一个完整的数据包时,单片机可以立即停止当前任务,转而执行串口中断程序,对接收到的数据进行处理。
通过串口中断程序,可以实现单片机与外部设备的数据交换和通信。
4. ADC中断程序:ADC(模数转换器)中断是指在进行模数转换时触发的中断。
在51单片机中,可以通过设置ADC中断允许位和中断优先级来实现对模数转换结果的中断处理。
例如,当模数转换完成后,单片机可以立即停止当前任务,转而执行ADC中断程序,对转换结果进行处理和分析。
通过ADC中断程序,可以实现对模拟信号的采集和处理,用于实时监测和控制。
5. 外部中断优先级设置:在51单片机中,可以通过设置外部中断的中断优先级来确定中断的响应顺序。
中断优先级越高,优先级越高的中断会先被响应。
通过合理设置中断优先级,可以确保关键任务的及时响应和执行。
例如,当多个外部设备同时发出中断信号时,可以通过设置优先级,确保先响应优先级高的设备,保证系统的正常运行。
51单片机各种中断源的中断请求原理
1. 外部中断:51 单片机有两个外部中断源,分别为 INT0 和 INT1。
当外部中断源输入一个低电平信号时,会触发中断请求。
在中断服务程序中,可以通过查询中断标志位来确定是哪个外部中断源触发了中断。
2. 定时器中断:51 单片机有两个定时器/计数器,分别为 T0 和 T1。
当定时器计数溢出时,会触发中断请求。
在中断服务程序中,可以通过查询定时器的计数寄存器来确定定时器是否溢出。
3. 串口中断:51 单片机有一个全双工的串口,可以接收和发送数据。
当串口接收到数据或发送完数据时,会触发中断请求。
在中断服务程序中,可以通过查询串口的控制寄存器来确定是接收还是发送中断。
51 单片机的各种中断源都是通过硬件信号或计数器溢出等方式触发中断请求,然后在中断服务程序中进行相应的处理。
在编写中断服务程序时,需要注意保护现场和恢复现场,以确保程序的正确性和稳定性。
51单片机中断函数(原创版)目录1.51 单片机中断函数概述2.51 单片机中断函数的分类3.51 单片机中断函数的响应过程4.51 单片机中断函数的应用实例5.总结正文一、51 单片机中断函数概述在 51 单片机中,中断函数是一种在程序运行过程中,响应外部或内部事件的机制。
通过中断函数,单片机可以在执行过程中,暂停当前任务,转去处理其他更重要的任务,待处理完毕后,再回到原任务继续执行。
这种机制可以有效提高程序的实时性和响应速度,使得单片机更加智能化和灵活。
二、51 单片机中断函数的分类51 单片机的中断函数主要分为两大类:外部中断函数和内部中断函数。
1.外部中断函数:外部中断函数是由外部设备产生的中断请求信号触发的,例如按键、传感器等。
当外部设备产生中断请求时,单片机会暂停当前任务,转去处理外部中断,待处理完毕后,再回到原任务继续执行。
2.内部中断函数:内部中断函数是由单片机内部产生的中断请求信号触发的,例如定时器中断、串行通信中断等。
当单片机内部产生中断请求时,单片机会暂停当前任务,转去处理内部中断,待处理完毕后,再回到原任务继续执行。
三、51 单片机中断函数的响应过程当外部或内部事件产生中断请求时,51 单片机会进行如下响应过程:1.中断请求信号被捕获:当外部或内部事件产生中断请求时,单片机会捕获到该信号。
2.中断响应:单片机接收到中断请求信号后,会立即停止当前任务的执行,转去处理中断请求。
3.中断处理:单片机会根据中断类型,调用相应的中断服务函数进行处理。
4.中断返回:中断服务函数处理完毕后,单片机会返回原任务继续执行。
四、51 单片机中断函数的应用实例以定时器中断为例,定时器中断是一种常见的内部中断,当定时器计数值到达设定值时,会产生中断请求。
单片机接收到中断请求后,会调用定时器中断服务函数进行处理,例如更新计时器计数值、执行特定任务等。
处理完毕后,单片机会返回原任务继续执行。
五、总结51 单片机中断函数是一种在程序运行过程中,响应外部或内部事件的机制。
单片机技术与应用
实验报告
实验名称:外部中断(交通灯与急救车)
姓名:
学号:
班级:
指导老师:
完成时间:2012年5月5日
一.实验要求
以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理,并允许急救车优先通过的要求。
有急救车到达时,两向交通信号为全红,以便让急救车通过。
假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。
本实验以按键为中断申请,表示有急救车通过。
二.实验目的
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
三.实验框图
四.实验程序
Green_NB0 BIT P1.0
Green_DX0 BIT P1.1
Green_DX1 BIT P1.2
Green_NB1 BIT P1.3
Red_NB0 BIT P1.4
Red_DX0 BIT P1.5
Red_DX1 BIT P1.6
Red_NB1 BIT P1.7
Scd EQU 30H ;秒
ORG 0000H
JMP START
ORG 0003H
JMP INIT0
ORG 000BH
JMP TIME0
START:
MOV Scd, #00H
MOV 31H, #00H
MOV DPTR, #0F200H ;
MOV P1, #69H ;初始亮灯情况:东西绿灯,南北红灯
MOV A,P1
MOVX @DPTR,A
CLR 00H
CLR F0
MOV TMOD, #01H ;设定定时器1
MOV IE, #83H ;设定中断使能定时器中断0、外部中断0和1
MOV SP, #60H
MOV TH0, #30H
MOV TL0, #0B0H
SETB TR0
LOOP:
JNB F0,N0 ;F0用户标志位,此处用作东西绿灯闪烁标识,1为绿灯闪烁
CPL Green_DX0 ;绿灯闪三秒
CPL Green_DX1
MOV A,P1
MOVX @DPTR,A
CALL DELAY500MS
JMP N1
N0:
JNB 00H,N1 ;00H,值为1时,南北绿灯闪烁
CPL Green_NB0 ;绿灯闪三秒
CPL Green_NB1
MOV A,P1
MOVX @DPTR,A
CALL DELAY500MS
N1:
JMP LOOP
DELLAY10S:
MOV R4,#0BFH
D1:
MOV R6,#0BDH
D0:
MOV R5,#89H
DJNZ R5,$
DJNZ R6,D0
DJNZ R4,D1
NOP
RET
DELAY500MS:
MOV 57H,#17H
DL1:
MOV 56H,#98H
DL0:
MOV 55H,#46H
DJNZ 55H,$
DJNZ 56H,DL0
DJNZ 57H,DL1
RET
TIME0:
MOV TH0,#3CH
MOV TL0,#0B0H
INC 31H
MOV A,31H
N: CJNE A,#20,EXIT ;判断是否到一秒
MOV 31H,#0
INC Scd
MOV A,Scd
CJNE A,#7,NEXT1 ;判断是否到东西绿灯闪烁时间
SETB F0
JMP EXIT
NEXT1: MOV A,Scd
CJNE A,#10,NEXT2 ;闪烁3秒后,停止东西绿灯闪烁,开东西黄灯CLR F0
MOV P1,#09H ;开东西黄灯
MOV A,P1
MOVX @DPTR,A
JMP EXIT
NEXT2:
MOV A,Scd
CJNE A,#13,NEXT3
MOV P1,#96H ;半个周期结束,变为:东西红,南北绿MOV A,P1
MOVX @DPTR,A
NEXT3:
MOV A,Scd
CJNE A,#20,NEXT4 ;判断是否到南北绿灯闪烁时间
SETB 00H
JMP EXIT
NEXT4: M OV A,Scd
CJNE A,#23,NEXT5 ;闪烁3秒后,停止南北绿灯闪烁,开南北黄灯
CLR 00H
MOV P1,#06H ;开南北黄灯
MOV A,P1
MOVX @DPTR,A
JMP EXIT
NEXT5: MOV A,Scd
CJNE A,#26,EXIT
MOV P1,#69H ;一个周期结束,变为:东西绿,南北红
MOV A,P1
MOVX @DPTR,A
MOV Scd,#0
EXIT: RETI
INIT0:
PUSH PSW
PUSH ACC
CLR EA
MOV R2,P1 ;保存数据
MOV P1,#0FH ;ALL RED
MOV A,P1
MOVX @DPTR,A
CALL DELLAY10S
MOV P1,R2 ;恢复
SETB EA
POP ACC
POP PSW
RETI
END
五.实验总结
通过这次实验,理解了外部中断入口地址的选择及外部中断中断实现的方法。
对中断优先级有了一个比较明确的理解。
通过查找资料,参考网上的程序以及视频,再加上书本上的知识,编出了C语言以及汇编两种程序,通过对比发现C语言要比汇编简单易行。
然而,书本上教的是汇编语言,这对我们学生来说无疑有一定的不利。
在今后使用单片机时还要重新学一遍C语言。
虽然C语言编程有一定的方便之处,但在有些时候个人还是觉得汇编一脚好用些。