找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2893|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

為什么這個單片機(jī)程序中兩個中斷同時發(fā)生?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:905299 發(fā)表于 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 ;
                }
}

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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:584814 發(fā)表于 2021-4-13 23:56 | 只看該作者
單片機(jī)有幾個定時器,可以火力全開的
回復(fù)

使用道具 舉報

板凳
ID:68800 發(fā)表于 2021-4-14 00:59 | 只看該作者
兩個中斷同時運行參數(shù)一樣那你為什么不放到一個定時器里面?如果需要分別運行有兩個方案,第一個啟動定時器一到時間中斷內(nèi)關(guān)閉定時器一,運行程序然后打開定時器二,定時器二中斷后關(guān)閉定時器二運行程序二打開定時器一。如此循環(huán)。還可以就一個定時器,第一次進(jìn)入運行程序1,第二次進(jìn)入運行程序二。如此循環(huán)也可以
回復(fù)

使用道具 舉報

地板
ID:905299 發(fā)表于 2021-4-14 07:12 | 只看該作者
liugao888 發(fā)表于 2021-4-14 00:59
兩個中斷同時運行參數(shù)一樣那你為什么不放到一個定時器里面?如果需要分別運行有兩個方案,第一個啟動定時器 ...

我的本意是讓定時器一運行完才運行定時器二,并且兩個定時器定時時間不一樣,但是上面的程序不知道為什么會同時運行  麻煩問一下定時器啟動到一段時間后怎么關(guān)閉  是把中斷標(biāo)志位置零嗎   試了一下也不行  
回復(fù)

使用道具 舉報

5#
ID:905299 發(fā)表于 2021-4-14 07:14 | 只看該作者
man1234567 發(fā)表于 2021-4-13 23:56
單片機(jī)有幾個定時器,可以火力全開的

不知道怎么配置定時器  具體參數(shù)有什么涵義了解的也不深入  還在學(xué)習(xí)中  小白一枚
回復(fù)

使用道具 舉報

6#
ID:743654 發(fā)表于 2021-4-15 08:55 | 只看該作者
因為你總中斷打開了,而且兩個定時器的定時時間又一樣,所以會同時觸發(fā)定時器0 和定時器1,你要不同時就像二樓說的兩種方法。至于如何配置,就是配置初值,樓主要好好看看定時器章節(jié),有詳細(xì)介紹,還可以用軟件配置。
回復(fù)

使用道具 舉報

7#
ID:905299 發(fā)表于 2021-4-16 10:42 | 只看該作者
cheney03 發(fā)表于 2021-4-15 08:55
因為你總中斷打開了,而且兩個定時器的定時時間又一樣,所以會同時觸發(fā)定時器0 和定時器1,你要不同時就像 ...

好的好的   謝謝啦
回復(fù)

使用道具 舉報

8#
ID:207421 發(fā)表于 2021-4-16 11:17 | 只看該作者
兩個定時器本來就是各干各的事情,什么叫同時。
你要控制定時器中斷,可以用ETX=0; TRX=0;  相互關(guān)閉都可以。
回復(fù)

使用道具 舉報

9#
ID:883031 發(fā)表于 2021-4-16 15:47 | 只看該作者
中斷是有優(yōu)先級的,同時觸發(fā)中斷,但是處理的時候也是按順序處理的。t0比t1的優(yōu)先級高,先處理,處理完再處理t1
回復(fù)

使用道具 舉報

10#
ID:905299 發(fā)表于 2021-4-16 20:37 | 只看該作者
lwh999995 發(fā)表于 2021-4-16 11:17
兩個定時器本來就是各干各的事情,什么叫同時。
你要控制定時器中斷,可以用ETX=0; TRX=0;  相互關(guān)閉都可 ...

謝謝啦這樣設(shè)置也可以嗎  我設(shè)置了一次但是發(fā)現(xiàn)沒什么反應(yīng)  再去試一下
回復(fù)

使用道具 舉報

11#
ID:905299 發(fā)表于 2021-4-16 20:39 | 只看該作者
cn_zhx 發(fā)表于 2021-4-16 15:47
中斷是有優(yōu)先級的,同時觸發(fā)中斷,但是處理的時候也是按順序處理的。t0比t1的優(yōu)先級高,先處理,處理完再處 ...

我用ip設(shè)置了一次   怎么看不出來差別
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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