基于51单片机的外部中断

51单片机一般有两个外部中断输入端,并允许外部中断源以低电平或负边沿两种触发方式输入中断请求信号。本例就是利用一只按钮,在按下时产生的负边沿触发外部中断。

 

 

 

硬件设计

 

将一只按钮接在外部中断输入012脚),八支发光二极管分别接在P0.0P0.7,其电路如下图所示。

 

 

 

在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“INT.DSN”。在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。
















51单片机AT89C51    一片


晶体CRYSTAL 12MHz   一只


瓷片电容CAP 22pF    二只


电解电容CAP-ELEC 10uF   一只


电阻RES 10K         一只


电阻RES 300R(即300Ω)八只


发光二极管 LED-YELLOW   八只


按钮 BUTTON  SW        一只

 

若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U131脚,都可以不画,它们都是默认的。要注意CPU属性中晶振频率的选择。

 

在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。

 

 

 

软件设计

 

通过按下按钮SW触发外部中断,从而改变发光二极管D1D8的亮、灭,当第一次按下按钮时,只有D1发光二极管亮;第二次按下按钮时,只有D2发光二极管亮;第三次按下按钮时,只有D3发光二极管亮;……第八次按下按钮时,只有D8发光二极管亮;第九次按下按钮时,D1D8发光二极管全亮;第十次按下按钮时,D1D8发光二极管全都不亮;第十一次按下按钮时,只有D1发光二极管亮;……如此循环。其流程图如下所示。

 

 

 

 

 

按钮SW触发外部中断,从而控制D1D8亮灭的详细C51程序如下。

 

/***************

 

外部中断

 

****************/

 

#include <reg51.h>

 

 

 

unsigned char wzj="0";             //外部中断计数

 

main()

 

{

 

     F0=0;IE=0X81;IT0=1;  //标志位清零,开中断 ,边沿激活

 

     while(1)

 

     {

 

            while(F0==0)

 

            ;

 

            switch(wzj%10)

 

            {

 

                   case(0): P0=0XFF;break;

 

                   case(1): P0=0XFE;break;

 

                   case(2): P0=0XFD;break;

 

                   case(3): P0=0XFB;break;

 

                   case(4): P0=0XF7;break;

 

                   case(5): P0=0XEF;break;

 

                   case(6): P0=0XDF;break;

 

                   case(7): P0=0XBF;break;

 

                   case(8): P0=0X7F;break;

 

                   case(9): P0=0X00;break;

 

             }

 

             F0=0;

 

     }

 

}

 

 

 

void int_int0() interrupt 0                 //外部中断

 

{

 

     wzj++;F0=1;

 

}

 

 

 

打开Keil的μVision3程序(本人使用的是Keil8.05中文版),执行菜单命令“工程”→“新建工程”创建“INT”项目,并选择单片机型号为AT89C51(也可以使用原有项目)。执行菜单命令“文件”→“新建”创建文件,输入C语言源程序,保存为“INT.C”。在Project Workspace窗口中右击源代码组1,选择“添加文件到组‘源代码组 l’”将源程序“INT.C”添加到项目中。

 

Keil的μVision3中执行执行菜单命令“工程”→“创建目标”(或点击“创建目标”快捷按钮),编译源程序(注意设置.HEX的文件名及其路径)。如果编译成功,则在“Output Window”的“创建”窗口中显示没有错误,并创建了“INT.HEX”文件。

 

 

 

  仿真与调试

 

关于ProteusKeil的联合仿真调试,可参见我以前所写的博文或其它参考资料。需注意ProteusISISKeil的μVision3中“INT.HEX”的路径要一致(或ProteusISISCPU属性Program File为空)。

 

启动ProteusISIS,并将其放在屏幕的右上角(可将原理图放大到合适大小);再启动Keil的μVision3,并将其放在屏幕的左下角。

 

    在Keil的μVision3中执行菜单命令“调试”→“启动/停止调试”,或直接单击图标,进入Keil的μVision3调试环境。这时,在Proteus ISIS的窗口中可看出Proteus也进入了程序调试状态。

 

    在Keil的μVision3代码编辑窗口中设置相应断点,断点的设置方法:在需要设置断点语句前双击鼠标左键,可设置断点;再次双击,可取消该断点。

 

在Keil的μVision3中按F5键(或点击“运行”快捷按钮)运行程序,或可以点击单步、运行到光标处、全速运行等快捷按钮,以及同时观察工程窗口寄存器页面、存储器窗口等,来进行仿真调试。

 

 


    本人邮箱:txxyc104@163.com,欢迎来信讨论.

posted on 2013-03-15 21:54  AI_JJ  阅读(2037)  评论(0)    收藏  举报

导航