设为首页收藏labplus社区产品资料库
0
积分值+2
0
掌控币+1
0  关注
20  粉丝
30  帖子
桑老师
2019年06月26日

#基础使用#Micropython之外部中断

       外部中断是微控制器的另一个重要的硬件资源。

       微控制器在程序运行过程中,一般是在一个主循环(死循环)中进行,主要的程序,都在这个大循环中定义,包括函数的调用等。在没有外界干预的情况下,程序运行基本处于一个封闭状态。上次课我们讲到定时器,这是微控制器内部打断主循环的一个机制,但是从微控制外部来看的话,微控制器还是一个封闭的运行环境。但是往往这种情况是不能满足更多的任务操作需求的,所以就有了微控制器的外部中断,我们可以通过外部的一些操作,来打断微控制器的主循环程序,转向执行中断程序。就像是人一样,一个人自嗨,不和外界交流,那么这个人只能服务于自己,而不能服务于别人。所以,外部中断这个资源就显得至关重要了。

     具体实现方式,外部中断就是在微控制器的一个引脚上,由于外部原因导致了电平发生了变化,比如电平由高到低(我们称之为下降沿),或者由低到高(我们称之为上升沿),或者高电平、低电平等。微控制器通过硬件感受到这个变化,微控制器自打断主循环的程序,转而去执行相应的中断处理程序,执行完后又回到原来主循环程序打断的地方继续执行原来的程序。而这个过程是很短暂的,在外界看来,基本上感觉不到程序的跳转。所以在这里,就需要注意一点了,在中断服务程序中,程序不能太多,比如在中断程序中延时了200ms,这是不允许的。一般我们在中断服务程序中,只对一些变量进行改变,或者对一些标志位置位。然后在主循环中通过查询标志位,去执行代码量更多的操作。

        本次课,我们使用到了一个编码电机,参考购买链接:

        https://item.taobao.com/item.htm?spm=a1z09.2.0.0.3b672e8dz3IGed&id=530563413849&_u=nan4vl56cfc


        该编码电机的码盘使用3.3V供电,非常适合接在掌控板的拓展板上。

视频地址1

视频地址2

视频地址3

学习笔记:

1、外部中断的使用

a、首先将该引脚实例化,模式为PinMode.IN

如p5=MPythonPin(5,PinMode.IN)

b、使用irq()函数设置外部中断的触发方式(上升沿或下降沿),和回调函数(即中断服务函数)

如p5.irq(trigger=Pin.IRQ_FALLING,handler=BuzzOn)

trigger方式包括

Pin.IRQ_FALLING 下降沿触发

Pin.IRQ_RISING  上升沿触发

Pin.IRQ_LOW_LEVEL 低电平触发

Pin.IRQ_HIGH_LEVEL 高电平触发

handler表示指向的回调函数,这里指向BuzzOn函数

c、定义的回调函数必须包含一个参数,表示这个中断的实体对象

如def BuzzOn(q):

0

点赞

1758 次阅读