外部中断原理
外部中断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
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单片机 外部中断
引用地址:
51单片机学习——8.1外部中断0和1
推荐阅读最新更新时间:2024-11-12 21:43
基于51单片机多功能太阳能路灯的设计与实现
随着社会发展的步伐日益加快,人们对新型能源地开发利用程度不断加大,太阳能作为一种新型能源,越来越受到人们的重视,合理有效的利用好太阳能,已逐步成为节能环保的一种趋势。西藏太阳能资源居中国首位,也是世界上最丰富的地区之一,全年平均日照时数在3 000小时左右。因此为了更环保、更加节能,合理有效地利用太阳能,我们设计出一款多功能太阳能路灯。文中采用C8051F020作为主控芯片,通过51单片机控制片内高速AD对紫外线传感器、温度传感器、光照度传感器等进行采样,对拉萨环境进行监测(特别是紫外线强度的监测),相关数据参数经过LCD显示,用户可通过需要显示广告信息,如进行公益广告,商业广告相关信息的宣传;同时利用具有高效节能的LED灯作为
[单片机]
一起学mini2440裸机开发(十)mini2440外部中断实验
我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向量表,直接像利用51单片机那样的中断一样使用它,但是也没成功。考虑到程序跑飞的可能性,将程序利用MDK中的Download功能下载到了Nor Flash中去,竟然行了,想了想原因,明白是怎么回事了。我原来是利用jlink调试的方法,这种调试方式是直接将程序放到了SDRAM的0x3000 0000处,如果发生中断后,比如发生了普通中断IRQ,那么PC指针被强制设为0x0000 0018,而我的程序是放在了0x3000 0000处,在地址0x
[单片机]
51单片机定时/计数器使用方法
定时/计数器的使用方法: 1、根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。 2、根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器TH0/TH1和TL0/TL1。 3、根据需要开放定时/计数器中断(后面需要编写中断服务程序)。 4、设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。 5、等待定时/计数器时间到,到则执行中断服务程序;如用查询处理则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。 /**************************************************************************************
[单片机]
89C51单片机中文简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称 单片机 。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器 的单片机。单片机的 可 擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多 功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机 为很多嵌入式控制系统提供了一种灵活性
[单片机]
基于51单片机的直流电机驱动(L298)
L298是SGS公司的产品,L298N为15个管角的单块集成电路,高电压,高电流,四通道驱动,设计用L298N来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达)和开关电源晶体管。内部包含4通道逻辑驱动电路,其额定工作电流为 1 A,最大可达 1.5 A,Vss 电压最小 4.5 V,最大可达 36 V;Vs 电压最大值也是 36 V。L298N可直接对电机进行控制,无须隔离电路,可以驱动双电机。 1,L298内部的原理图 2,L298 引脚符号及功能 3,L298的逻辑功能 当使能端为高电平时,输入端IN1为PWM信号,IN2为低电平信号时,电机正转;输入端IN1为低电平信号,I
[单片机]
51外部中断测试
#include #include #define GPIO_LED P2 //外部中断的IO sbit K3=P3^2; sbit K4=P3^3; void IntConfiguration(); void Delay(unsigned int n); unsigned char KeyValue=0; void main(void) { GPIO_LED=0Xfe; IntConfiguration(); while(1) { if(KeyValue) GPIO_LED=_crol_(GPIO_LED,1); else GPIO_LED=_cror_(GPIO_LED,1); Delay(2000); } } voi
[单片机]
51单片机DHT11温湿度检测手机蓝牙APP显示设计
今天给大家介绍的是一个温湿度检测设计,基于51单片机、蓝牙模块、温湿度传感器、Android APP完成。首先先展示一下设计好的实物,接下来将从系统方案、硬件设计、软件设计这三个方面来阐述。 1.系统方案 先来看一下整体的架构图:硬件部分由STC89C52单片机、DHT11温湿度传感器、BT08蓝牙串口模块和Android手机组成。传感器将采集到的温湿度数据传送给单片机,然后单片机通过蓝牙串口模块将数据发送到手机APP,从而将温湿度在APP显示出来。在APP上可以设置温湿度告警的阈值,超过阈值将显示“偏高”或者“偏低”的相关信息。 2.硬件设计 整个设计的原理图如下所示,由单片机最小系统、蓝牙串口模块、温湿度传感器组
[单片机]
基于51单片机的天气温度报警系统
基于AT89C51的天气温度报警系统,采用Protues仿真。 元件: DS1302时钟芯片 DS18B20温度传感器 LM016L(1602)液晶 AT89C51 单片机 LED灯若干 蜂鸣器一只 用于 报警 本人不写这个报警程序了 其实挺简单的 我只贴出部分主要的代码 完整源代码请到: http://blog.sina.com.cn/u/2311964960 (内附图片) 或直接下载: LSD.c (7.4 KB, 下载次数: 72) /*初始化DS18B20*/ void Init_DS18B20() { //初始化DS18B20必须先给DS18B20一个复位脉冲,接收到复位脉冲后
[单片机]