标题: 请教一下关于51单片机的外部中断 [打印本页]

作者: 沟里郭嘉    时间: 2019-6-13 21:11
标题: 请教一下关于51单片机的外部中断
第一个问题:图一中的“INT0”是什么干用的,还有它是哪来的,这个程序并没有“sbit INT0=xxx”。
第二个问题:图二为什么在中断函数中要加上“EX=0  …… EX=1”?如果不加会怎么样?

我想diy个手电,用stc15w408as,不论在什么情况,只要某个开关按下去,即当p3.2(INT0)为低电平时,进入中断程序,使MOS管导通,led点亮。(一键极亮功能)。然后别的档位用switch case。这个思路如何?刚刚开工,程序在图三。
初学,请多指教。

mmexport1560430719497.jpg (395.19 KB, 下载次数: 27)

mmexport1560430719497.jpg

Screenshot_2019-06-13-20-52-39-072_com.android.browser.png (80.8 KB, 下载次数: 31)

Screenshot_2019-06-13-20-52-39-072_com.android.browser.png

mmexport1560431306269.jpg (503.2 KB, 下载次数: 26)

mmexport1560431306269.jpg

作者: devcang    时间: 2019-6-13 22:53
1、INT0  在头文件中定义了

2、就是初始化外部中断。默认并不触发外部中断。

3、实现变档,最好是使用PWM驱动。

作者: yzwzfyz    时间: 2019-6-14 08:39
第一个问题:图一中的“INT0”是什么干用的,还有它是哪来的,这个程序并没有“sbit INT0=xxx”。
答:INT0的问题需要看硬件的设计目的。sbit INT0=xxx 是有的,只是你不知道,楼上的朋友告诉你了。

第二个问题:图二为什么在中断函数中要加上“EX=0  …… EX=1”?如果不加会怎么样?
答:都可以,需要根据整个系统的设计来决定,就目前你的水平,还不能理解这句话。慢慢来,功夫到了,你会应用自如的。这里提两个问题供你思考一下:
1、当你进入中断服务程序后,会发生其它中断?
2、你在执行中断服务程序时,怕不怕被其它中断打扰?
如果怕打扰,可以将可能打扰你的那个中断禁止,待你处理完成后,再开放它,是不是一个方法呢?
“EX=0  …… EX=1” :常用来禁止某个中断,发生于某段程序运行的地方。
作者: aiwenxue999    时间: 2019-6-14 08:39
①、INT0是在<reg51.h>中定义了的,INT0上面的一杠代表:为低电平触发。
②、看此链接:http://www.51hei.com/bbs/dpj-140317-1.html
作者: _4061N_    时间: 2019-6-14 16:10
典型的外部中断0按键处理程序:
EX0=0  
<>延时30毫秒
<>等待按键松开
EX0=1

就是说先关了外部中断0,等按键稳定后,再等按键松开
以防止按键按下时震动余波引起的误触发
你的程序没有考虑到按键震动的余波,所以会多次触发外部中断0。
但是这个半成品程序的外部中断0内容仅仅是不断将LED设置为点亮的状态,即使多次触发也不会影响,所以目前看不出来什么;如果想要在中断函数里面准确记录按键按下次数的话就会出问题的。
作者: lwh999995    时间: 2019-6-14 17:54
可以在中断里面执行PWM调光等功能

释.JPG (269.74 KB, 下载次数: 23)

如图

如图

作者: suncat0504    时间: 2019-6-14 21:15
楼主对C语言和51单片机的理解还不够啊。INT0的概念纯粹是C语言的知识,是为了在程序中操纵P3.2管脚时,使用的别称。除了能控制管脚输出信号,还可以配合控制寄存器和控制位,做单片机的设置工作,就像楼上给的资料那样。比如控制这个管脚是在收到下降沿信号的时候产生中断,还是遇到低电平的时候产生中断。
EX0是替代51单片机中的中断控制器(寄存器地址:0xA8)中的控制外部中断0使能的一个控制位(位地址:0xA8),用来控制当外部中断信号产生的时候,系统是否还响应这个中断。EX=0,意味着即使外部已经产生了中断信号,但系统不响应,不会进到中断处理程序中去处理。
建议楼主有时间的话,多看看单片机原理的书。
作者: 沟里郭嘉    时间: 2019-6-14 22:53
aiwenxue999 发表于 2019-6-14 08:39
①、INT0是在中定义了的,INT0上面的一杠代表:为低电平触发。
②、看此链接:http://www.51hei.com/bbs/d ...

求教一下,我发现reg51.h里面,写的是sbit INT0=0xB2,reg52.h里面,写的是sbit INT0=P3^2,这是什么意思?
作者: reiquet    时间: 2019-6-15 20:29
1 INT0头文件里定义了,也就是库里有了;
作者: reiquet    时间: 2019-6-15 20:34
1 INT0头文件里有了,也就是库里已经给你写好了;
2 中断的开关,开的时候进中断(满足条件),关的时候不进中断(满足条件);中断里写了是因为不让程序在中断里的时候就再一次进中断;


用占空比会比较好一点;控制亮度比较得心应手。

作者: 周涛1331    时间: 2019-7-24 16:56
沟里郭嘉 发表于 2019-6-14 22:53
求教一下,我发现reg51.h里面,写的是sbit INT0=0xB2,reg52.h里面,写的是sbit INT0=P3^2,这是什么意思 ...

第一个是INT0的地址,很多里面用的是sfr,第二个是INT0所作用的引脚




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1