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

標題: 搞不懂單片機外部中斷 也查了資料 感覺還是找不到錯誤 [打印本頁]

作者: 雪峰1259    時間: 2020-5-28 20:40
標題: 搞不懂單片機外部中斷 也查了資料 感覺還是找不到錯誤
#include<reg52.h>
#include<intrins.h>
#define uchar  unsigned char
#define uint unsigned int
sbit flag=P3^2;//外部中斷信號產生腳
sbit key=P3^0;//控制flag產生下降沿
sbit led=P2^0;

void delay(int a){
int x,y;
for(x=0;x<=a;x++)
for(y=110;y>=0.;y--);
}
/*  void le(void)
{          int a        ;
          while(1){
         P1=0x01;
for(a=0;a<8;a++){
   P1=_cror_(P1,1);
   delay(20);}} //led循環
} */



//外部中斷0初始化
void intlInit(void)
{


IT0=1; //  外部中斷0下降沿觸發
IE=0;  //清除標志位
EX0=1; // 開外部中斷
EA=1;  //開總中斷
}


//主函數
void main(){
        void  intlInit(void);         
           
        if(key==0)
        {                delay(1);
                 if(key==0)//P3^0腳         
             {
                  flag=1;           //P3^2腳
                   flag=0;//外部產生下降沿
                }
           } else flag=1;
                        
}
        // 外部中斷0中服務程序
void int1(void) interrupt 0
{
         led=~led;
        P1=0x00;
                  delay(20);
}

51hei圖片20200528203854.png (41.64 KB, 下載次數: 41)

51hei圖片20200528203854.png

51hei圖片20200528203858.png (41.09 KB, 下載次數: 31)

51hei圖片20200528203858.png

作者: 273431377    時間: 2020-5-29 00:33
在main()函數結尾加個while(1);
把中斷函數名改成void exint0() interrupt 0  
試一下。
作者: csmyldl    時間: 2020-5-29 00:43
問題未描述清楚,flag與KEY在程序中定義引腳P32和P30,不知為何要這么定義
作者: wulin    時間: 2020-5-29 06:05
樓主犯了兩個錯誤。1.程序結構錯誤:main函數初始化后必須限制在主循環while(1)中運行,哪怕沒有如何任務也得在while(1)中死循環。2.外部中斷理解錯誤:所謂外部中斷必須是單片機外部信號作用于IN0(IN1),由軟件置flag=1; flag=0;不會觸發IN0中斷。
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar  unsigned char
  4. #define uint unsigned int
  5. sbit flag=P3^2;//外部中斷信號產生腳
  6. sbit key=P3^0;//控制flag產生下降沿
  7. sbit led=P2^0;

  8. //外部中斷0初始化
  9. void intlInit(void)
  10. {
  11.         IT0=1; //  外部中斷0下降沿觸發
  12.         IE=0;  //清除標志位
  13.         EX0=1; // 開外部中斷
  14.         EA=1;  //開總中斷
  15. }
  16. //主函數
  17. void main()
  18. {
  19.         intlInit();         
  20.         while(1)
  21.         {

  22.         }
  23. }
  24. // 外部中斷0中服務程序
  25. void int1(void) interrupt 0
  26. {
  27.         led=~led;
  28. }
復制代碼

作者: ^-^    時間: 2020-5-29 12:44
wulin 發表于 2020-5-29 06:05
樓主犯了兩個錯誤。1.程序結構錯誤:main函數初始化后必須限制在主循環while(1)中運行,哪怕沒有如何任務也 ...

贊同樓上
作者: 雪峰1259    時間: 2020-5-29 13:12
csmyldl 發表于 2020-5-29 00:43
問題未描述清楚,flag與KEY在程序中定義引腳P32和P30,不知為何要這么定義

想通過按鍵來控制中斷
作者: 雪峰1259    時間: 2020-5-29 13:16
wulin 發表于 2020-5-29 06:05
樓主犯了兩個錯誤。1.程序結構錯誤:main函數初始化后必須限制在主循環while(1)中運行,哪怕沒有如何任務也 ...

加過while后 還是不行 我先通過按P3^0按鍵發現沒用 然后我又直接按P3^2想產生跳變沿 還是沒反應 懵逼了
作者: 雪峰1259    時間: 2020-5-29 13:17
273431377 發表于 2020-5-29 00:33
在main()函數結尾加個while(1);
把中斷函數名改成void exint0() interrupt 0  
試一下。

應該加個while 不過這和名字沒啥關系吧
作者: wulin    時間: 2020-5-29 16:11
雪峰1259 發表于 2020-5-29 13:16
加過while后 還是不行 我先通過按P3^0按鍵發現沒用 然后我又直接按P3^2想產生跳變沿 還是沒反應 懵逼了[e ...

程序都給你改好了你還玩不轉,無語了。
作者: 雪峰1259    時間: 2020-5-29 21:43
wulin 發表于 2020-5-29 16:11
程序都給你改好了你還玩不轉,無語了。

額 我是想通過P3^0按鍵來產生這個中斷
作者: lyxing    時間: 2020-5-29 22:55
雪峰1259 發表于 2020-5-29 21:43
額 我是想通過P3^0按鍵來產生這個中斷

外部中斷INT0與INT1,在 P3.2 P3.3口上,按P3.0不能產生外中斷。
作者: 雪峰1259    時間: 2020-5-30 17:29
lyxing 發表于 2020-5-29 22:55
外部中斷INT0與INT1,在 P3.2 P3.3口上,按P3.0不能產生外中斷。

我知道那兩個腳 我網上查的也可以通過別的i/o口來控制P3^2 P3^3的高低電位 觸發不就是有下降沿么 別的可以控制他的高低電位  咋就不可以等效那兩個腳呢





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1