欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3388|回復(fù): 5
收起左側(cè)

STC15w408as單片機(jī)開機(jī)進(jìn)入停機(jī)模式,設(shè)置兩個外部中斷喚醒,為什么外部中斷0可以喚醒

[復(fù)制鏈接]
ID:921325 發(fā)表于 2021-8-1 19:59 | 顯示全部樓層 |閱讀模式
5黑幣
單片機(jī)源程序如下:

#include "reg51.h"   
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;

sbit k1=P3^2;
sbit k2=P3^3;         
sbit led1=P1^4;        
sbit led2=P1^3;
bit ledflag1,ledflag2;
void delay(u16 i)
{
        while (i--);
}
void keyscan()
{
    if(k1==0)
        {
            delay(1000);
                if(k1==0)
                {
                    ledflag1=~ledflag1;
                }
                while(!k1);
        }
        if(k2==0)
        {
            delay(1000);
                if(k2==0)
                {
                        ledflag2=~ledflag2;
                }
                while(!k2);
        }
}
void main()
{
        EA=1;
        while(1)
        {
           if(ledflag1==0&&ledflag2==0)
           {
               IT1=1;                                                         //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
           EX1=1;
               IT0=1;                                                         //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
           EX0=1;                                                                 //外部中斷0中斷允許位                           
           PCON|=0x02;
               _nop_();
               _nop_();
               _nop_();
               _nop_();  
           }
           keyscan();
           if(ledflag1==1)
           {
               led1=0;
           }
           else
           {
               led1=1;
           }
           if(ledflag2==1)
           {
               led2=0;
           }
           else
           {
               led2=1;
           }
        }
}
void Int0()           interrupt 0
{
          IT0=1;                                                         //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
      EX0=0;
          IT1=1;                                                         //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
      EX1=0;
          if(k1 == 0)
          {
                    delay(1000);
                  if(k1==0)
                  {
                            ledflag1=1;
                  }
                  while(!k1);
          }
}
void Int1()           interrupt 2
{
          IT0=1;                                                         //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
      EX0=0;
          IT1=1;                                                         //外部中斷0觸發(fā)控制位,IT0=1下降沿觸發(fā)
      EX1=0;
          if(k2 == 0)
          {
              delay(1000);
                  if(k2==0)
                  {
                            ledflag2=1;
                  }
                  while(!k2);
          }
}

最佳答案

查看完整內(nèi)容

1,不要在中斷函數(shù)里面更改中斷選項,也不要在中斷0的中斷函數(shù)關(guān)閉中斷1,這樣你按一了下中斷0之后,兩個中斷就都關(guān)閉了 2,退出中斷之前,最好先清除中斷標(biāo)志位.就是IE0和IE1
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2021-8-1 19:59 | 顯示全部樓層
1,不要在中斷函數(shù)里面更改中斷選項,也不要在中斷0的中斷函數(shù)關(guān)閉中斷1,這樣你按一了下中斷0之后,兩個中斷就都關(guān)閉了
2,退出中斷之前,最好先清除中斷標(biāo)志位.就是IE0和IE1
回復(fù)

使用道具 舉報

ID:584814 發(fā)表于 2021-8-2 08:45 | 顯示全部樓層
為什么外部中斷0可以喚醒可以向廠家索要底層電路圖或代碼,一般觀眾只依照說明書用。
另外,中斷里面應(yīng)慎用延時
回復(fù)

使用道具 舉報

ID:921325 發(fā)表于 2021-8-2 09:51 | 顯示全部樓層
man1234567 發(fā)表于 2021-8-2 08:45
為什么外部中斷0可以喚醒可以向廠家索要底層電路圖或代碼,一般觀眾只依照說明書用。
另外,中斷里面應(yīng)慎 ...

怪我的問題沒說清楚,我的問題是為什么外部中斷0可以喚醒,而外部中斷1不行
回復(fù)

使用道具 舉報

ID:451718 發(fā)表于 2021-8-2 14:55 | 顯示全部樓層
中斷0的優(yōu)先級應(yīng)該是高于中斷1的。你進(jìn)入中斷0后,不是關(guān)掉中斷了么? 如何再進(jìn)中斷1?
回復(fù)

使用道具 舉報

ID:921325 發(fā)表于 2021-8-2 20:52 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-8-2 14:36
1,不要在中斷函數(shù)里面更改中斷選項,也不要在中斷0的中斷函數(shù)關(guān)閉中斷1,這樣你按一了下中斷0之后,兩個中斷就 ...

按照您的建議改了一下,目前可以了,謝謝!!!!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表