找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12766|回复: 0
收起左侧

单片机中断嵌套的应用—八只流水灯程序

[复制链接]
ID:447178 发表于 2018-12-16 12:55 | 显示全部楼层 |阅读模式
设计一中断嵌套程序:要求K1和K2都未按下时,P1口8只LED呈流水灯显示,当按一下K1时,产生一个低优先级外中断0请求(跳沿触发),进入外中断0中断服务程序,上下4只LED交替闪烁。此时按一下K2时,产生一个高优先级的外中断1请求(跳沿触发),进入外中断1中断服务程序,使8只LED全部闪烁。当显示5次后,再从外中断1返回继续执行外中断0中断服务程序,即P1口控制8只LED,上、下4只LED交替闪烁。设置外中断0为低优先级,外中断1为高优先级。 

电路原理图如下:
1111.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. void Delay(unsigned int i)
  4. {
  5.         unsigned int j;
  6.         for(;i > 0;i--)
  7.         for(j=0;j<125;j++)
  8.         {;}
  9.         }
  10. void main()
  11. {
  12.         uchar display [9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  13.         uchar a;
  14.         for(; ;)
  15.         {
  16.                 EA=1;
  17.                 EX0=1;
  18.                 EX1=1;
  19.                 IT0=1;
  20.                 IT1=1;
  21.                 PX0=0;
  22.                 PX1=1;
  23.                 for(a=0;a<9;a++)
  24.                 {
  25.                         Delay(500);
  26.                         P1=display[a];
  27.                 }
  28.         }
  29. }
  30. void int0_isr(void) interrupt 0 using 0
  31. {
  32.         for(; ;)
  33.         {
  34.                 P1=0x0f;
  35.                 Delay(400);
  36.                 P1=0xf0;
  37.                 Delay(400);
  38.         }
  39. }
  40. void int1_isr (void) interrupt 2 using 1
  41. {
  42.         uchar m;
  43.         for(m=0;m<5;m++)
  44.         {
  45.                 P1=0;
  46.                 Delay(500);
  47.                 P1=0xff;
  48.                 Delay(500);
  49.         }
  50. }
复制代码

所有资料51hei提供下载:
中断嵌套的应用.rar (58.31 KB, 下载次数: 48)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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