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

標題: STC8G單片機自動進入外部中斷是怎么回事?附程序 [打印本頁]

作者: ENGLEG    時間: 2021-4-21 18:35
標題: STC8G單片機自動進入外部中斷是怎么回事?附程序
STC8芯片會自動進入外部中斷是怎么回事?P3口外面沒接任何東西,還是能自動進入到中斷中。  下面是我的代碼。哪位大神能幫我解答下呢
void INT0_init()
{
    EA = 0;
    IT1 = 1;
    EX1 = 1;
    EA = 1;
}

void main()
{
    INT0_init();
    P1M0 |=0X1C;
    P1M1 &=0XE3;
//    PCON = 0X02;
    _nop_();
    _nop_();
   
    while(1)
    {
        RED = 0;
        GREEN = BLUE = 1;
//        PCON = 0X02;
        _nop_();
        _nop_();         
    }
}
void Int0_inter() interrupt 2
{
      delay(100);
      RED = GREEN = BLUE = 0;
      delay(3000);
}



作者: 西點鐘靈毓秀    時間: 2023-5-18 11:44
解決了沒有了?我也遇到這個問題
作者: wulin    時間: 2023-5-18 14:25
西點鐘靈毓秀 發表于 2023-5-18 11:44
解決了沒有了?我也遇到這個問題

樓主main函數初始化不當。STC8系列速度太快,端口還沒有穩定就開中斷導致開機外部中斷誤觸發。
啟動順序調整一下,注意要清0中斷標志。
void main()
{
        P0M0 = 0x00;
        P0M1 = 0x00;
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        P3M0 = 0x00;
        P3M1 = 0x00;
        P4M0 = 0x00;
        P4M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;
        P6M0 = 0x00;
        P6M1 = 0x00;
        P7M0 = 0x00;
        P7M1 = 0x00;
        Delay_ms(100);//長延時100ms               
        IT0 = 1;
        EX0 = 1;
        IE0 = 0;//INT0中斷請求標志清0
        EA = 1;
        while(1)
        {
作者: coody_sz    時間: 2023-5-18 17:36
外中斷是硬件在每個時鐘檢測邊沿,需要有邊沿出現才會設置中斷標志,沒有邊沿出現是不會觸發中斷的。
樓主所謂自動進入中斷,則肯定檢測到了邊沿,以下情況要注意:
1、上電時,有上升沿動作,所以會有中斷標志。允許中斷前,先清除標志,至少3個時鐘周期后再允許外中斷。
2、IO設置為高阻,并且懸空,則IO浮動,就會檢測到邊沿,觸發中斷。

作者: 西點鐘靈毓秀    時間: 2023-5-23 09:29
coody_sz 發表于 2023-5-18 17:36
外中斷是硬件在每個時鐘檢測邊沿,需要有邊沿出現才會設置中斷標志,沒有邊沿出現是不會觸發中斷的。
樓主 ...

這算不算STC的一個小BUG了?畢竟,上電延時后,再開啟外部中斷也會產生這個現象。
作者: wufa1986    時間: 2023-5-23 10:34
初始化以后要清除中斷標志位,基本所有單片機都有這個要求
作者: 123456ZXC1    時間: 2023-5-23 10:38
STC8芯片自動進入外部中斷的原因可能是因為存在干擾信號或者噪聲,導致中斷引腳觸發。即使P3口沒有連接任何外部設備,但是由于芯片內部的電路特性,可能會引發一些干擾信號。

你的代碼中使用了INT0外部中斷,但在初始化函數INT0_init()中,只進行了相關的中斷配置,沒有對中斷觸發方式進行設置。根據你的代碼,INT0的中斷觸發方式(IT0)并沒有設置,默認為電平觸發方式。可能會因為外部信號的波動導致中斷觸發。

為了解決這個問題,你可以在INT0_init()函數中添加設置中斷觸發方式的代碼。例如,如果你希望使用下降沿觸發方式,可以修改代碼如下:void INT0_init()
{
    EA = 0;
    IT0 = 1;  // 設置INT0為下降沿觸發方式
    EX0 = 1;  // 允許INT0中斷
    EA = 1;
}
這樣設置后,只有當INT0引腳檢測到下降沿時才會觸發中斷。
作者: coody_sz    時間: 2023-5-23 10:50
西點鐘靈毓秀 發表于 2023-5-23 09:29
這算不算STC的一個小BUG了?畢竟,上電延時后,再開啟外部中斷也會產生這個現象。

不是BUG。不管什么時候開啟哪個中斷,都要先清除中斷標志。
作者: 準八戒    時間: 2023-10-10 13:36
今天測試了下,開啟外部中斷0,使用準雙向口模式下,外部中斷0管腳上接了一個電解質電容,正極接管腳,負極接地,可以解決抗干擾性差的問題呦,你試試呢,我測試了,必須拉低管腳,才能觸發中斷,不過還有個問題,電容大小的選擇,影響外部中斷的采集頻率。




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