外部中断1 EX0=0后 怎样在程序在下次运行后致1?

2019-07-15 07:40发布

1在没有外部中断1后  希望EX0=1  外部中断0触发   按键可以动作<div>在重新上电后  希望ex0="1
2 在动作函数drive 下加EX0=1;  按键还是无法触发中断  还是EX0不等于1;
  1. #include<reg52.h>

  2. sbit ANJ=P3^2;    //按键的定义端口
  3. sbit out=P3^4;          //输出控制的端口


  4. sfr AUXR=0X8E;

  5. bit  flag=0;             //外部中断0的标志
  6. bit  ANJflag=0;                         //按键的标志位
  7. bit  CDflag=1;                         //外部充电标志位

  8. bit keysta=1;       //按键的当前状态
  9. unsigned long keydowntime=0;  //按键按下所持续的时间


  10. void drive();     //按键的驱动函数

  11. void configtime0();     //定时1ms

  12. void main()
  13. {
  14.   
  15.    EA=1;        //开启总中断
  16.    EX0=1;        //开中断0
  17.    EX1=1;  //开中断1

  18.    INT0=1;   //中断0下降沿进入中断
  19.    IT0=1;

  20.    
  21.    INT1=1;   //中断1下降沿进入中断
  22.    IT1=1;
  23.    configtime0();    //定时1ms进行按键的扫描判断
  24. //   out=;      //上电时关闭供电
  25.   while(1)
  26.   {
  27.       drive();
  28.   }
  29. }


  30. void configtime0()
  31. {
  32.               
  33.            AUXR |= 0x80;                //定时器时钟1T模式
  34.         TMOD &= 0xF0;                //设置定时器模式
  35.         TL0 = 0xCD;                //设置定时初值
  36.         TH0 = 0xD4;                //设置定时初值
  37.         //TF0 = 0;                //清除TF0标志
  38.         ET0=1;
  39.         TR0 = 1;                //定时器0开始计时
  40. }

  41. //按键驱动函数长按控制P3^4的输出高或低的电平
  42. void drive()
  43. {
  44.               
  45.                     unsigned int   timetir=1000; //快速输入执行的时间阀值
  46.                         bit  backup=1;    //前一次按键的状态
  47.                  if(flag)
  48.                          {
  49.                                          
  50.                                                 if(keydowntime>0)
  51.                                                 {
  52.                                                     if(keydowntime>=timetir)
  53.                                                         {
  54.                                                             
  55.                                                              out=~out;      //输出端口控制P3^4
  56.                                                         }
  57.                                                 }
  58.                                                 else
  59.                                                 {
  60.                                                     timetir=1000;
  61.                                                 }
  62.                          }
  63. }                                                                                                                                                                                         
  64. //按键循环扫描
  65. void keyscan()
  66. {               
  67.       static unsigned char keybuff=0xff;
  68.           keybuff=(keybuff<<1)|ANJ;              //按键的扫描缓冲区
  69.           if(keybuff==0x00)
  70.           {           
  71.                keysta=0;
  72.                    ANJflag=1;                                 //按键的标志位置1
  73.            keydowntime+=8;                      //按键按下的持续时间增加
  74.           }
  75.           else if(keybuff==0xff)
  76.           {
  77.                 keysta=1;
  78. //                        ANJflag=0;
  79.                         keydowntime=0;                   //按键按下的时间清零
  80.           }
  81. }
  82. //外部中断1检测充电信号
  83. void int1()  interrupt  2
  84. {
  85.               if(CDflag)           //充电标志到了
  86.                   {
  87.                     out=1;                          //停止电池给外部供电
  88.                         EX0=0;                          //关闭外部中断0 防止按键动作
  89.                         flag=0;                         //外部中断0的标志位也清零
  90.                         CDflag=0;        
  91.                   }

  92.                                              
  93. }
  94. //外部中断0检测按键的状态
  95. void int0()  interrupt 0
  96. {
  97.         flag=1;                          //外部中断0的标志位置一
  98.                                                 
  99. }
  100. void  interruptime0()  interrupt  1
  101. {
  102. //       static  unsigned int cnt=0;
  103.                 TL0=0Xcd;
  104.         TH0=0Xd4;

  105.             keyscan();
  106. }
复制代码

0条回答

一周热门 更多>