找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10770|回复: 2
打印 上一主题 下一主题
收起左侧

通过两个实验介绍有关单片机中断应用程序的编写

[复制链接]
跳转到指定楼层
楼主
ID:360306 发表于 2018-6-27 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  
课程名称
  
单片机原理及应用
实验课时
2
实验项目
中断系统实验
实验时间


指导老师
胡国华
实验成绩

实验目的(本次上机实验所涉及并要求掌握的知识点)
了解中断处理系统的工作原理,熟悉中断处理特别是外部中断处理的过程,掌握中断处理子程序的书写格式和使用方法。
实验环境
Protues仿真软件  KellC51  集成开发环境   微机1
实验内容
一、通过两个实验介绍有关中断应用程序的编写。
  
1. 单一外中断的应用
  
例题:在单片机P1口上接有8只LED。在外部中断0输入引脚(P3.2)接一只按钮开关K1。
  
要求将外部中断0设置为电平触发。程序启动时,P1口上的8LED全亮。每按一次按钮开关K1,使引脚接地,产生一个低电平触发的外中断请求,在中断服务程序中,让低4位的LED与高4位的LED交替闪烁5次。然后从中断返回,控制8LED再次全亮。
  
利用中断控制8只LED交替闪烁1次的电路如下所示
  
file:///C:/Users/zyt/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png
  
参考程序如下:
  
  #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++)         //晶振为12MHz,j选择与晶振频率有关
  
        {;}                    //空函数
  
  } 
  
void  main( )                      //主函数
  
  {     
  
         EA=1;                                 //总中断允许
  
        EX0=1;                               //允许外部中断0中断
  
        IT0=1;                         //选择外部中断0为跳沿触发方式
  
         while(1)                //循环            
  
{ P1=0;}        // P1口的8只LED全亮
  
  }
  
 void int0( )  interrupt 0   using 0  //外中断0的中断服务函数
  
  {     
  
         uchar   m;
  
         EX0=0;                        //禁止外部中断0中断
  
        for(m=0;m<5;m++)              //交替闪烁5次
  
         {
  
              P1=0x0f;        //低4位LED灭,高4位LED亮
  
Delay(400) ;          //延时
  
        P1=0xf0;        //高4位LED灭,低4位LED亮
  
        Delay(400);          //延时
  
        EX0=1;                 //中断返回前,打开外部中断0中断
  
  }
  
   本例程包含两部分,一部分是主程序段,完成中断系统初始化,并把8个LED全部点亮。另一部分是中断函数部分,控制4个LED交替闪烁1次,然后从中断返回。
  
2、两个外中断的应用
  
当需要多个中断源时,只需增加相应的中断服务函数即可。
  
例题:在单片机P1口上接有8只LED。在外部中断0输入引脚(P3.2)接有一只按钮开关K1。在外部中断1输入引脚(P3.3)接有一只按钮开关K2。要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,仅K1(P3.2)按下再松开时,上下各4只LED交替闪烁10次,然后再回到流水灯显示。如果按下再松开K2(P3.3)时,P1口的8只LED全部闪烁10次,然后再回到流水灯显示。设置两个外中断的优先级相同。
  
  
  
  
  
  
电路图如下:
  
file:///C:/Users/zyt/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png
  
参考程序如下:
  
  #include  <reg51.h>
  
  #define uchar  unsigned char
  
  void  Delay(unsigned int i)//延时函数Delay( ),i为形式参数,不能                              // 赋初值
  
  {     
  
         uchar j;
  
         for(;i>0;i--)           
  
        for(j=0;j<125;j++)        
  
        {;}                        //空函数
  
  }
  
void  main( )                             //主函数
  
{
  
uchar  display[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,
  
                            0x7f};//流水灯显示数据数组            
  
unsigned int a;
  
for(;;)
  
{
  
  EA=1;                   //总中断允许
  
  EX0=1;                  //允许外部中断0中断
  
  EX1=1;                    //允许外部中断1中断
  
  IT0=1;                   //选择外部中断0为跳沿触发方式
  
  IT1=1;                   //选择外部中断1为跳沿触发方式
  
IP=0;                     //两个外部中断均为低优先级
  
       for(a=0;a<9;a++)
  
         {
  
                Delay(500);                  //延时
  
                P1=display[a];       //将已经定义的流水灯显示数据送到P1口
  
         }
  
         }
  
  }
  
void  int0_isr(void)  interrupt 0  using 1//外中断0的中断服务函数
  
  {     
  
         uchar   n;
  
         for(n=0;n<10;n++)        //高、低4位显示10次
  
         {
  
               P1=0x0f;               //低4位LED灭,高4位LED亮
  
               Delay(500);           //延时
  
               P1=0xf0;         //高4位LED灭,低4位LED亮
  
               Delay(500);           //延时
  
         }
  
  }
  
void int1_isr  (void)  interrupt 2  using 2//外中断1中断服务函数
  
  {     
  
         uchar   m;
  
         for(m=0;m<10;m++)                          //闪烁显示10次
  
        {
  
                P1=0xff;                             //全灭
  
               Delay(500);                                //延时
  
               P1=0;                                         //全亮
  
               Delay(500);                               //延时
  
         }
  
  }
总结(对上机实验结果进行分析,上机心得体会及改进意见
此次实验中,我了解了中断处理系统的工作原理,为了熟悉中断处理系统,我做了两个实验,一个为单-外中断,另一个为两外中断。掌握了中断处理子程序的书写格式和使用方法。虽然在实验过程中遇到了很多难题,但借助了网络进行查询,也加上同学的帮助,完成的还比较顺利。
  


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:575890 发表于 2019-7-4 15:41 | 只看该作者
你这个怎么触发中断呢?我没看懂啊
回复

使用道具 举报

板凳
ID:630106 发表于 2019-10-25 16:14 | 只看该作者
moky 发表于 2019-7-4 15:41
你这个怎么触发中断呢?我没看懂啊

外部中断INTO和INT1一般在51单片机上是固定引脚的 P3.2,P3.3 定时器的2个中断是P3.4,P3.5,然后中断触发是由外部按钮导通接地控制端口的高低电平的,所以他控制按钮就直接触发了   不用在程序里指明
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表