【C51单片机】中断系统之单一外中断应用

为了直接使用C51语言编写申断服务程序,C51讲言中定义了中断函数。

由于C51编译器在编译时对声明为中断服务程序的函数自动添加了相应的现场保护、阻断其他中断、返回时自动恢复现场等处理的程序段,因而在编写中断函数时可不必考虑这些问题,减小了用户编写中断函数的烦琐程度。

一般形式

中断服务函数的一般形式为:

函数类型函数名( 形式参数表)interrupt n using n


关键字interrupt 后面的n是中断号,对于AT89S52单片机,n的取值为0-5,编译器从8xn+3处产生中断向量。

单一外中断

下面介绍单一外中断的应用

【例】 在单片机的P1口上接有8只LED。 在外部中断0输人引脚\overline{INTO}(P3.2)接有一只按钮开关K1。要求将外部中断O设置为电平触发。程序启动时,PI口上的8只LED全亮。每按一次按钮开关 K1,使引脚\overline{INTO}接地,产生一个低电平触发的外中断请求,在中断函数中,让低4位的LED与高4位的LED交替闪烁5次。然后从中断返回,控制8只LED再次全亮。原理电路及仿真结果如下。

 

下面我们就一步一步的完成我们的代码。

头文件

实现头文件必不可少。

#include <reg51. h>

#define uchar unsigned char

 延时函数

加入延时函数,主要是可以观察的变化。

void Delay( unsigned int i)    //延时函数Delay( ),i 为形式参数、

                                //不能赋初值

{
    unsigned int j;for(;i> 0;i--)

    for(j=0;j<333;j++)            //晶振为12 MHz,j 的选择与晶振频

                                    //率有关

        {
            1;
        }                            //空函数
}

中断函数

接下来就加入我们的中断函数。可以相比之下,中断函数的区别。

void int0( ) interupt 0 using 0        //外中断0的中断函数

{
    uchar m;

    EX0=0;                            //禁止外部中断0中断



    for(m=0;m<5;m++)                //交替闪烁5次

    {

         P1 =0xOf;                    //低4位LED灭,高4位//LED亮



          Delay(400) ;                //延时



            P1= 0xf0;                //高4位LED灭,低4位//LED亮



            Delay( 400);                //延时



            EX0= 1 ;                    //中断返回前,允许外部//中断0中断
    }
}


主函数


void main( )        //主函数

{

    EA=1:        //总中断允许



    EX0=1:        //允许外部中断0中断


    IT0=l;        //选择外部中断0为跳//沿触发方式



    while(1)        //循环

    {

       P1=0;        //PI口的8只LED全亮
    }

}

本例包含两部分,一部分是主程序段,完成了中断系统的初始化,并把8只LED全部点亮。另一部分是中断函数,控制8只LED分两组交替闪烁5次,然后从中断返回。
 

今天单片机关于中断系统之单一外中断就介绍到这里。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱吃饼干的小白鼠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值