78K0/KD2中断分析

一.系统组成框图

        78K0/KD2 系统组成框图如下图所示。

        由图可见, 除了通用 I/O 部件和时钟输出部件因自身功能特点而没有使用中断方式与 CPU 通信外,其它功能部件均可使用中断方式向 CPU发送中断请求。可见, CPU 具有对单片机外部或内部随机发生的事件进行实时处理的能力。

二.应用实例分析

        下面以简单的点灯程序分析一个中断标志清除的问题。

2.1 问题

        在中断服务程序中,控制引脚翻转,以实现LED闪烁效果。代码如下:

__interrupt void MD_INTP0(void)
{
/* Start user code. Do not edit comment generated here */
PMK0 = 1; /*屏蔽外部中断 INTP0*/
P7=~P7; /*LED 亮灭交替*/
delay(); /*延时*/
PMK0 = 0; /*开中断 INTP0*/
/* End user code. Do not edit comment generated here */
}

        运行结果:按一次按键, LED 由原来的灭转亮, 过一会儿, 再自动变灭
        为什么会自动熄灭?

2.2 原因分析

        INTP0 的电路如下图所示:

        脉冲沿检测器与 CPU 并行运行。虽然响应中断时, IF 标志被硬件自动清零, 但在 CPU 运行中断服务程序其间,中断请求源(即按键) 因按键抖动而未能及时撤销, IF 再次被置 1。待CPU 返回主程序后会再次响应中断。 

2.3 解决

        CPU 返回主程序前,需将 IF 清零。

        正确程序如下:

__interrupt void MD_INTP0(void)
{
/* Start user code. Do not edit comment generated here */
PMK0 = 1;
P7=~P7;
delay();
PIF0 = 0;
PMK0 = 0;
/* End user code. Do not edit comment generated here */
}

2.4 小结

        以上代码没有实际应用意义,仅为了说明问题而编写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈工程师修炼日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值