这个取决对系统的理解,好的单片机设计者不是死板教条的,而是在充分的理解基本的功能后灵活的整合应用。
假定系统只有一个按键,该键在系统正常情况下作为系统设置使用,有短按和长按两种方式(需要消抖)。而当系统进入休眠后,该键用于唤醒,长按2秒后唤醒(唤醒只看是否按下2秒,其他操作无效)。
由于按键在不同的工作状态,用途不同,所以可以使用两种不同的按键扫描处理方式。
实现方法:现在的外部中断I/O口同时也可以作为通用I/O使用,那么在正常工作状态下,禁止INT中断,采用timer+状态机方式扫描处理按键。
当系统进入休眠前,禁止T/C中断,允许INT中断,然后进入休眠状态。
按键INT服务:
按键按下->进入INT服务->禁止INT中断->使用一个软件计数延时2秒(此处使用软件延时,不会影响系统的效率,因为此时系统并没有真正进入正常工作状态)->2秒后读按键I/O,确认按键是否继续按下,并设定一个标志位,中断返回。
INT中断返回后,应该执行进入休眠的语句的下句语句(唤醒后续处理部分):
查看标志位,按键是否长按2秒;a/ 如果是,禁止INT中断,系统转入正常工作状态,开启T/C中断,采用timer+状态机方式扫描处理按键;b/ 如果不是,允许INT中断,系统继续进入休眠状态。
假定系统只有一个按键,该键在系统正常情况下作为系统设置使用,有短按和长按两种方式(需要消抖)。而当系统进入休眠后,该键用于唤醒,长按2秒后唤醒(唤醒只看是否按下2秒,其他操作无效)。
由于按键在不同的工作状态,用途不同,所以可以使用两种不同的按键扫描处理方式。
实现方法:现在的外部中断I/O口同时也可以作为通用I/O使用,那么在正常工作状态下,禁止INT中断,采用timer+状态机方式扫描处理按键。
当系统进入休眠前,禁止T/C中断,允许INT中断,然后进入休眠状态。
按键INT服务:
按键按下->进入INT服务->禁止INT中断->使用一个软件计数延时2秒(此处使用软件延时,不会影响系统的效率,因为此时系统并没有真正进入正常工作状态)->2秒后读按键I/O,确认按键是否继续按下,并设定一个标志位,中断返回。
INT中断返回后,应该执行进入休眠的语句的下句语句(唤醒后续处理部分):
查看标志位,按键是否长按2秒;a/ 如果是,禁止INT中断,系统转入正常工作状态,开启T/C中断,采用timer+状态机方式扫描处理按键;b/ 如果不是,允许INT中断,系统继续进入休眠状态。