【单片机的中断:MCU如何处理中断?】

在本文中,将讨论定时器中断的概念,事实上中断是有效使用 MCU 的最基本方法之一。现在用一个类比来说明事情如何在没有中断的情况下工作:如果你正在煮鸡蛋,并且想在10分钟内将它们从炉子上取下来,那么一种方法是不时检查时钟以确保看看时间是否到了。在嵌入式系统中也是如此:如果你想在执行某些操作之前等待特定状态发生变化,那么一种方法是定期检查状态。或者,如果你的程序正在等待GPIO输入电平;要在执行某个步骤之前从0更改为1,那么一种方法是定期检查GPIO值。这种定期检查的方法称为轮询。

虽然轮询是一种检查状态变化的简单方法,但它是有代价的。如果检查间隔太长,发生和检测之间可能会有很长的滞后——如果在检查之前状态又变回,你可能会完全错过更改。更短的间隔将获得更快、更可靠的检测,但也会消耗更多的处理时间和功率,因为更多的检查将返回否定。

另一种方法是利用中断。使用这种方法,状态变化会产生一个中断信号,使CPU暂停其当前操作(并保存其当前状态),然后执行与中断相关的处理,然后恢复其先前的状态并从中断处恢复。(见图1)

d0fcf14445184a3eb31bfd70af1328f2.jpg

让我们回到煮鸡蛋的例子。我们不会定期检查,而是将计时器设置为10分钟,然后做其他事情直到计时器响起,将我们的注意力转回到鸡蛋上。在这种情况下,定时器作为中断工作,“把鸡蛋从锅里拿出来”是相关的处理。

MCU如何处理中断?

中断可以来自MCU内部和MCU外部设备。例如,来自外部开关或传感器的中断有时称为“附加中断”,因为它是由附加到MCU上的IRQ(中断请求)引脚的外部设备产生的。当相关状态发生变化时,外部设备向该引脚发送中断请求信号,进而产生通知给MCU的中断控制器(在RX63N上,该控制器称为“ICUb”)。

相比之下,来自片上外设(内部定时器、GPIO线、UART等)的中断称为“外设中断”。这些中断信号直接通知中断控制器,无需引脚连接。

中断控制器的工作就是将这些中断请求以协调的方式传递给CPU。当发生多个中断时,控制器必须根据它们的相对优先级以适当的顺序将它们发送到CPU。并且控制器还必须知道哪些中断当前被屏蔽(禁用),以便它可以完全忽略这些中断。

当CPU收到控制器的中断请求时,它停止执行它正在处理的程序,并自动保存所有相关的工作信息,以便以后可以从中断的地方继续执行。然后加载并执行与接收到的中断请求对应的中断处理程序。完成这个处理后,CPU恢复保存的信息并从它停止的地方恢复。(见图2)注意保存和恢复是由CPU自动处理的;程序员不需要关心这些细节。

cfdee178aa354c24afc711fe4ac63045.jpg

考虑通过UART进行串行通信的情况。定期监视UART以了解新字符的到来是低效的。因此,在大多数情况下,系统设计为当新字符到达时UART本身会产生中断,提醒CPU执行适当的处理。

类似地,内部定时器通常被设置为驱动中断以某个特定间隔重复执行某个特定进程:每次间隔过去时,定时器都会生成一个中断,告诉CPU运行该进程。一般来说,使用这些类型的中断可以大大提高MCU的运行效率。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MCU C51单片机是一种常用的微控制器,用于控制各种电子设备。在小车驱动程序中,我们可以使用C语言编写代码来实现各种功能。 首先,我们需要设置IO口的输入和输出,以便与电机连线。我们可以通过设置端口的高低电平来控制电机的转向和速度。比如,我们可以使用P0口来控制左右电机的转向,P1口来控制左右电机的PWM信号。 接下来,我们可以编写函数来控制小车的运动。例如,我们可以编写一个函数来控制小车前进,将左右电机的引脚设置为正向旋转,并且给予PWM信号来控制速度。另外,我们还可以编写函数来控制小车后退、左转、右转等动作。 除了基本的运动控制外,我们还可以为小车添加传感器和避障功能。例如,我们可以添加红外避障传感器,当检测到障碍物时,自动停止或改变方向。我们还可以添加超声波传感器,用于检测前方距离,避免与前方障碍物碰撞。 在编写小车驱动程序时,我们需要考虑定时器的使用。通过设置定时器,我们可以定时中断程序,以达到控制小车运动的目的。例如,我们可以使用定时器来控制小车的前进时间和速度,达到精确控制的效果。 总之,MCU C51单片机可以用于控制小车驱动程序。通过编写适当的代码,我们可以实现小车的各种运动功能,并且可以根据需要添加传感器和避障功能,提高小车的智能性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值