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

標題: 為什么這個單片機程序中兩個中斷同時發生? [打印本頁]

作者: 673988639    時間: 2021-4-13 21:46
標題: 為什么這個單片機程序中兩個中斷同時發生?
#include <reg52.h>

void timer0(unsigned char ms);
void timer1(unsigned char ms);

sbit LED = P1^1;
sbit FM = P1^3;

unsigned char T0RH,T0RL ;
unsigned char T1RH,T1RL ;


void main ()

{
        /*中斷*/
        EA = 1 ; //總中斷

        timer1(100);
        timer0(100);

        while(1)
        {
        }
}



//T0  1.1
void timer0(unsigned char ms)
{
           unsigned long tmp ;
        
        ET0 = 1 ;

        
        TMOD &= 0xf0 ;
        TMOD |= 0x01 ;

        tmp = 11059200/12;
        tmp = (65536*ms)/1000;
        tmp = 65536-tmp ;
        T0RH = tmp/256 ;
        T0RL = tmp%256 ;

        TH0 = T0RH ;
        TL0 = T0RL ;

        TR0 = 1 ;


}



//T1 1.3
void timer1(unsigned char ms)
{
           unsigned long tmp ;


        ET1 = 1 ;


        TMOD &= 0x0f ;
        TMOD |= 0x10 ;


        tmp = 11059200/12;
        tmp = (65536*ms)/1000;
        tmp = 65536-tmp ;
        T1RH = tmp/256 ;
        T1RL = tmp%256 ;



        TH1 = T1RH ;
        TL1 = T1RL ;

        TR1 = 1 ;

}







/*T0 1.1 */
void InterruptTimer0() interrupt 1
{
        static unsigned char deng ;        
        


        TH0 = T0RH ;
        TL0 = T0RL ;

        deng++;


        if(deng>=200)
        {
                deng = 0 ;
                LED = !LED ;
        }

}





/*T1 1.3*/
void InterruptTimer1() interrupt 3

{
        static unsigned int feng ;        


        TH1 = T1RH ;
        TL1 = T1RL ;

        feng++;

        if(feng>=200)
        {
                feng = 0 ;
                FM = !FM ;
                }
}

為什么這個程序中兩個中斷同時發生  麻煩大神詳解一下   順便問一下怎么設置兩個中斷分別運行   謝謝



作者: man1234567    時間: 2021-4-13 23:56
單片機有幾個定時器,可以火力全開的
作者: liugao888    時間: 2021-4-14 00:59
兩個中斷同時運行參數一樣那你為什么不放到一個定時器里面?如果需要分別運行有兩個方案,第一個啟動定時器一到時間中斷內關閉定時器一,運行程序然后打開定時器二,定時器二中斷后關閉定時器二運行程序二打開定時器一。如此循環。還可以就一個定時器,第一次進入運行程序1,第二次進入運行程序二。如此循環也可以
作者: 673988639    時間: 2021-4-14 07:12
liugao888 發表于 2021-4-14 00:59
兩個中斷同時運行參數一樣那你為什么不放到一個定時器里面?如果需要分別運行有兩個方案,第一個啟動定時器 ...

我的本意是讓定時器一運行完才運行定時器二,并且兩個定時器定時時間不一樣,但是上面的程序不知道為什么會同時運行  麻煩問一下定時器啟動到一段時間后怎么關閉  是把中斷標志位置零嗎   試了一下也不行  
作者: 673988639    時間: 2021-4-14 07:14
man1234567 發表于 2021-4-13 23:56
單片機有幾個定時器,可以火力全開的

不知道怎么配置定時器  具體參數有什么涵義了解的也不深入  還在學習中  小白一枚
作者: cheney03    時間: 2021-4-15 08:55
因為你總中斷打開了,而且兩個定時器的定時時間又一樣,所以會同時觸發定時器0 和定時器1,你要不同時就像二樓說的兩種方法。至于如何配置,就是配置初值,樓主要好好看看定時器章節,有詳細介紹,還可以用軟件配置。
作者: 673988639    時間: 2021-4-16 10:42
cheney03 發表于 2021-4-15 08:55
因為你總中斷打開了,而且兩個定時器的定時時間又一樣,所以會同時觸發定時器0 和定時器1,你要不同時就像 ...

好的好的   謝謝啦
作者: lwh999995    時間: 2021-4-16 11:17
兩個定時器本來就是各干各的事情,什么叫同時。
你要控制定時器中斷,可以用ETX=0; TRX=0;  相互關閉都可以。
作者: cn_zhx    時間: 2021-4-16 15:47
中斷是有優先級的,同時觸發中斷,但是處理的時候也是按順序處理的。t0比t1的優先級高,先處理,處理完再處理t1
作者: 673988639    時間: 2021-4-16 20:37
lwh999995 發表于 2021-4-16 11:17
兩個定時器本來就是各干各的事情,什么叫同時。
你要控制定時器中斷,可以用ETX=0; TRX=0;  相互關閉都可 ...

謝謝啦這樣設置也可以嗎  我設置了一次但是發現沒什么反應  再去試一下
作者: 673988639    時間: 2021-4-16 20:39
cn_zhx 發表于 2021-4-16 15:47
中斷是有優先級的,同時觸發中斷,但是處理的時候也是按順序處理的。t0比t1的優先級高,先處理,處理完再處 ...

我用ip設置了一次   怎么看不出來差別




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