前言:单片机的中断系统(一)
80C51单片机提供两个外部中断口: INT0(P3.2)和INT1(P3.3)引脚输入。这两个引脚是功能复用引脚,既可以作为普通V0口,也可作为外部中断输入引脚。下面以部中断0来讲述。80C51单片机在每个机器周期的S5P2期间扫描外部中断输入引脚的电平状态。当外部中断设置为下降沿触发时,若处理器在连续两个机器周期扫描到INT0引脚的电平先后为高电平和低电平时,就会设置中断标志位IE0为1,表示外部有中断申请,该中断申请信号会一直保持,直到该中断被响应,该标志由内部硬件自动清除。当外部中断设置为电平触发方式时,在外部中断引脚INTo变为低电平时,IE0变为1,并一直保持为1,直到引脚INTo的输入变为高电平时,IE0位才清0。因此,选择低电平触发方式时,对INT0的电平持续时间有严格要求,必须保持INTo引脚为低电平,直到中断被响应才 能变高,而且在中断返回前必须变成高电平,以撤销中断请求。若低电平时问太短,则可能导致中断不会被响应;若太长,在中断子程序执行完后仍为低电平,则IE0会一直保持为1,这时会导致一次中断请求,得到多次响应。 ——————http://www.51dzw.com/embed/embed_110007.html
外部中断0实验
按键作为外部中断的产生源,按下按键,led状态反转。
图一:单片机引脚图
图二:独立按键接线图
图三:LED引脚图
程序:
#include sbit key3=P3^2;//外部中断0的引脚接口 sbit led=P2^0; void delay(int dat) { while(dat--); } void Int0Init() { IT0=1;//下降沿触发 //IE0=0;请求标志位,无触发,或响应中断后,硬件自动置0 EX0=1;//外部中断0允许标志 EA=1;//打开总终端 } void main(void) { Int0Init(); while(1);//如果不写while(1),单片机在主程序中会不断循环执行,导致不断初始化 } void LedRever() interrupt 0 //0是外部中断的中断号 { delay(1000); if(key3==0) { led=~led; } } 比较有意思的是,中断函数中增加了消抖部分。 如果不加消抖,可能想程序可能想多次执行这个中断。如果消抖在外面,可能已经进入中断了,还没进行消抖。 外部中断1实验: 接线引脚图如图一、二、三。 普中教程代码: /************************************************************************************** * 外部中断1实验 * 实现现象:下载程序后按下K4按键可以对D1小灯状态取反。 注意事项:无。 ***************************************************************************************/ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit k4=P3^3; //定义按键K4 sbit led=P2^0; //定义P20口是led /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : Int1Init() * 函数功能 : 设置外部中断1 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Int1Init() { //设置INT1 IT1=1;//跳变沿出发方式(下降沿) EX1=1;//打开INT1的中断允许。 EA=1;//打开总中断 } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { Int1Init(); // 设置外部中断1 while(1); } /******************************************************************************* * 函 数 名 : Int1() interrupt 2 * 函数功能 : 外部中断0的中断函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Int1() interrupt 2 //外部中断1的中断函数 { delay(1000); //延时消抖 if(k4==0) { led=~led; } }
上一篇:【自学51单片机】1 -- 初步认识单片机和单片机基础知识介绍
下一篇:单片机的中断系统(一)
推荐阅读
史海拾趣
Compound Photonics公司成立于2007年,其初期发展并不顺利。然而,一个关键的转折点出现在公司收购Syntax-Brillian的专利之后。Syntax-Brillian是一家在微显示领域有着深厚技术积累的公司,其核心在于早年间收购的Colorado Microdisplays/Zight专利。这次收购使得Compound Photonics获得了进入微显示领域的重要技术基础,为后续的发展奠定了坚实的基础。
为了进一步提升产品竞争力,CMOSIS公司积极寻求与业内领先企业的合作。通过与芯片制造商、相机生产商等合作伙伴的紧密合作,CMOSIS成功将最新的图像处理技术集成到其CMOS图像传感器中,提升了产品的整体性能。同时,公司还积极参与行业内的技术交流活动,不断吸收新的创新思路和技术成果,为公司的持续发展注入新的活力。
ENSIGN不仅关注传统电子行业的发展,还积极探索新的业务领域。最近,ENSIGN集团宣布收购位于亚利桑那州的医疗保健园区River Park Post Acute和Elmwood Senior Living,以及其他七家公司。这一收购标志着ENSIGN正逐步向医疗保健领域进军,寻求多元化的发展机会。
然而,好景不长。1997年亚洲金融危机的爆发给Daewoo公司带来了前所未有的挑战。由于过度扩张和错误的投资决策,公司背负了巨额债务,资不抵债。面对这一困境,Daewoo公司不得不进行资产重组和裁员等措施,以减轻财务压力。虽然这些措施在短期内带来了痛苦,但也为公司的未来发展奠定了基础。
FTDI的历史可以追溯到1992年3月13日,由弗雷德·达特(Fred Dart)创立。公司初期专注于个人电脑市场,推出了针对主板芯片组的解决方案。其中,早期的主要客户之一是IBM,这些芯片被应用于AMBRA和PS/2系列的个人电脑中,为当时的计算机技术发展做出了重要贡献。这一时期的成功不仅奠定了FTDI的技术基础,也为其后续的市场拓展奠定了坚实的客户基础。
Assume I attempt to cook a steak in a microwave oven at 3.0GHz. The permittivity of round steak at this frequency is ε = ε0*40(1 - j 0.3) . How deep does the power penetrate the steak? What happens if you place your McD ...… 查看全部问答∨ |
软件大小:99.14M 下载地址:http://www.realview.com.cn/down-list.asp?id=584 注意:MDK中国版例程服务包请前往http://www.realview.com.cn/down-list.asp?id=585下载 RealView MDK 3.24更新说明 ================== 1. ...… 查看全部问答∨ |
两块板子,一块单片机板子,一块ARM9板子。单片机板子上没有操作系统,ARM9板子上加载了Linux操作系统。 一方面,在ARM9板子上,需要把单片机板子通过无线传送过来的IPv6包解析,并最终把包中应用层的数据传给PC机服务器;另一方面,ARM9板子要接 ...… 查看全部问答∨ |
用pb自定义了一个Microsoft DeviceEmulator_ARMV4系统,生成SDK,编译都通过,就是在烧写到ARM9板的时候出现错误,以下是串口消息 Now,Downloading [ADDRESS:400000H,TOTAL:0X01C711DF(29823455) bytes] RECEIVED FILE SIZE: 0x00100000Date CRC0 ...… 查看全部问答∨ |
书上说左边的电路Io=Vin/R2,我能理解到根据负反馈,运放工作于虚短的状态,R2上的电压为Vin,根据KCL定理,Vin/R2=Io+Ir1(FET 源漏极电流),书里没有说为什么可以忽略这个源漏极电流,想请教一下大家。 另外右边的电路,是引入了正反馈,不能用虚 ...… 查看全部问答∨ |
|
由于 SAR ADC 的功耗随着每一代新器件的推出而不断降低,放大器成了功耗敏感型应用的制约因素。那么我们如何才能进一步降低功耗?在寻找可能的解决方案之前,让我们先考虑一下 ADC 功耗降低的原因。下图 1 直接显示了我们 12 位、4MS ...… 查看全部问答∨ |
|
SensorTile物联网开发套件(6)——DIY高温报警器 本帖最后由 lb8820265 于 2016-10-29 10:40 编辑 先上效果图: 图中让SensorTile靠近盛着热水杯子,如果温度高于30摄氏度,那么APP界面就显示为红色,低于等于30就显示透明。 这个DIY主要是展 ...… 查看全部问答∨ |