久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3639|回復: 5
收起左側

51單片機開兩個外部中斷怎么有一個失效了?

[復制鏈接]
ID:119355 發表于 2019-5-2 11:53 | 顯示全部樓層 |閱讀模式
#include <reg52.h>
#include <intrins.h>

#define STC_Y1  97560U  // 89C/LEXX、90C/LEXX
#define STC_Y3  14050U  // 10F/Lxx、11F/Lxx 、12C/LExx、15F104E/L104E(A版)、15F204E/L204EA(A版)
#define STC_Y5  13043U  // 15F/L/Wxx(Y3內核個別型號除外)
//#define Fosc 12000000UL
#define Fosc 11059200UL
#define Core STC_Y1

sbit LED1 = P3^0;         //tx
sbit LED2 = P3^1;         //rx
sbit PIN_INT0 = P3^2;
sbit PIN_INT1 = P3^3;
unsigned char Is_Power_Down = 0;

/**
*  功能:延時t毫秒
*  入參:1~65535
*/
void delay_ms(unsigned int t)
{
    unsigned int i;
    do{
        i = Fosc / Core;
        while(--i);
    }while(--t);
}

void INT0_interrupt()  interrupt 0
{
        if(Is_Power_Down==1 && INT0==1)
        {
                 Is_Power_Down=0;
                EA=0;
                LED1 = 0;
                while(PIN_INT0==1); //按鍵A是否一直按著,
                delay_ms(100);
                LED1 = 1;
        }         
}
void INT1_interrupt()  interrupt 2
{
        if(Is_Power_Down==1 && INT1==1)
        {
                 Is_Power_Down=0;
                EA=0;
                LED2 = 0;
                while(PIN_INT1==1); //按鍵C是否一直按著,
                delay_ms(100);
                LED2 = 1;
        }         
}

void main()
{
        LED1=1;
        LED2=1;

        IT0=0;
        EX0=1;

        IT1=0;
        EX1=1;

        while(1)
        {        
                        EA=1;
                        Is_Power_Down=1;
                        PCON=0x2;
                        _nop_();
                        _nop_();
                        _nop_();
                                
        }
}

用的pt2272模塊,芯片stc89c52rc,情況是兩個中斷只有中斷0有效中斷1沒反應, 屏蔽EX0=1;的話中斷1就能用了,這是怎么回事??接線沒問題

回復

使用道具 舉報

ID:119355 發表于 2019-5-2 22:37 | 顯示全部樓層
自己搞定了,改IT0=1  IT1=1就行了。之前的中斷方式導致INT0不停的中斷而優先級又比INT1高,導致INT1失效了!!不過搞不懂按下按鍵時候是上升沿啊,為什么下降沿中斷方式會觸發?
回復

使用道具 舉報

ID:526392 發表于 2019-5-3 14:41 | 顯示全部樓層
你搞反了,不按鍵是高電平,按下是低電平,所以按下按鍵的過程是高電平變為低電平,即下降沿。你可以去看一下獨立按鍵的電路原理圖
回復

使用道具 舉報

ID:119355 發表于 2019-5-4 21:31 | 顯示全部樓層
51go 發表于 2019-5-3 14:41
你搞反了,不按鍵是高電平,按下是低電平,所以按下按鍵的過程是高電平變為低電平,即下降沿。你可以去看一 ...

我不是用的獨立按鍵,用的PT2272四路無線模塊,遙控器不按的時候模塊輸出低電平的,遙控器按下是高電平
回復

使用道具 舉報

ID:472242 發表于 2019-5-5 01:02 | 顯示全部樓層
建議你去看看這個:中斷嵌套編程的應用(Proteus仿真+程序)
http://www.zg4o1577.cn/bbs/dpj-145685-1.html
回復

使用道具 舉報

ID:624769 發表于 2021-8-26 04:29 | 顯示全部樓層
IT0 的設定,不同單片機作用不同,相同的是 IT0 = 1 , 都是下降沿觸發, IT0 = 0,STC15系列,是上升沿下降沿都可以觸發, 而 STC11系列,好像是僅上升沿觸發,而 89C51 則是低電平觸發,根據你的描述,我覺得你用的單片機應該是 89C51, 所以當 IT0 = 0, 那么在低電平狀態,就會反復觸發,而縱觀你的中斷程序,你會判斷是否處于高電平,直到低電平才會退出中斷,那么,其實反過來理解,當產生了高電平,又變成了低電平這個時候觸發中斷,是不是對系統而言更經濟?那么針對你的需求,其實下降沿中斷才是更合理的,畢竟你這個中斷,就算最慢的89c51跑一下也就幾微秒,等電平重新下降了在中斷運行完全沒有影響。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产目拍亚洲精品99久久精品 | 91精品国产日韩91久久久久久 | 成人av网站在线观看 | 男女一区二区三区 | 日本在线一区二区三区 | 97精品超碰一区二区三区 | 九九国产 | 丁香综合| 欧美寡妇偷汉性猛交 | 国产亚洲精品精品国产亚洲综合 | 欧美日韩一区二区三区不卡视频 | 欧美一级毛片久久99精品蜜桃 | 午夜小视频在线播放 | 人人干视频在线 | av毛片| 一区二区在线免费观看 | 在线观看成年人视频 | 国产二区精品视频 | 成人免费区一区二区三区 | 亚洲国产精品久久久久秋霞不卡 | 手机看片在线播放 | 美人の美乳で授乳プレイ | 免费一区二区三区 | 日本精品一区 | 激情毛片 | 999久久久 | 久久久久久久电影 | 伊人久久在线 | 超碰导航 | 在线观看国产视频 | 亚洲欧美一区二区三区在线 | 亚洲国产成人在线 | 国产激情第一页 | 99av成人精品国语自产拍 | 亚洲一区中文字幕 | 国产精品一区二区三级 | 久久综合影院 | 成人欧美一区二区三区在线观看 | av性色| 国产成人99久久亚洲综合精品 | 欧美在线二区 |