标题: 单片机中断嵌套的应用—八只流水灯程序 [打印本页]

作者: Ghost-wow    时间: 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为高优先级。 

电路原理图如下:


单片机源程序如下:
  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)





作者: ydq2015ok    时间: 2024-12-25 21:10
这个值得学习;这才是工程应用!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1