找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5447|回復(fù): 15
收起左側(cè)

51定時(shí)器中斷進(jìn)入不了的原因?

  [復(fù)制鏈接]
ID:506091 發(fā)表于 2019-4-7 10:07 | 顯示全部樓層 |閱讀模式
#include  "stc12c5a60s2.h"

#define  uchar unsigned char
#define  uint  unsigned int

/*======================
      定時(shí)器初值定義
======================*/
#define TH0_Init  0xff
#define TL0_Init  0x8C
#define TMOD_Init 0x01
#define TCON_Init 0x10
/*======================
       變量定義
======================*/
uchar Cnt2ms;
uchar Cnt10ms;
uint  Cnt1s;

sbit LED1=P2^3;
/*======================
       函數(shù)聲明
======================*/
void T0_Init(void);

/*======================
       主函數(shù)
======================*/
void main()
{
    T0_Init();
        while(1);
}

/*======================
    定時(shí)器初始化函數(shù)
======================*/
void T0_Init(void)
{
        TMOD |=TMOD_Init;
        TL0=TL0_Init;
        TH0=TH0_Init;
        ET0=1;
        EA=1;
}
void T0_Start()
{
        TR0=1;
}
void T0_Stop()
{
        TR0=0;
}


void Timer0() interrupt 1
{
        T0_Stop();
        TL0=TL0_Init;
        TH0=TH0_Init;
        T0_Start();

        Cnt1s++;
        if(Cnt1s>=8000)
        {
                Cnt1s=0;
                LED1=~LED1;
        }
}  

回復(fù)

使用道具 舉報(bào)

ID:506093 發(fā)表于 2019-4-7 10:53 | 顯示全部樓層
你初始化時(shí)TR0沒(méi)有置1,所以進(jìn)入不了T0的中斷!另外你為什么要在中斷里面清零TR0?
回復(fù)

使用道具 舉報(bào)

ID:506093 發(fā)表于 2019-4-7 10:54 | 顯示全部樓層
你初始化時(shí)TR0沒(méi)有置1,所以定時(shí)器沒(méi)有開(kāi)始運(yùn)行!
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-4-7 11:09 | 顯示全部樓層
定時(shí)器TR0=1;在中斷函數(shù)里才能打開(kāi),這個(gè)中斷如何產(chǎn)生???悖論。!void T0_Start(),void T0_Stop()這兩個(gè)函數(shù)純屬蛇足。
void T0_Init(void)
{
        TMOD |=TMOD_Init;
        TL0=TL0_Init;
        TH0=TH0_Init;
        TR0=1;
       ET0=1;
        EA=1;
}
回復(fù)

使用道具 舉報(bào)

ID:229821 發(fā)表于 2019-4-7 12:33 | 顯示全部樓層
stc的燒錄軟件中有源碼例子,封裝管腳等等的資料。很方便的。stc-isp-15xx-v6.86r.exe
回復(fù)

使用道具 舉報(bào)

ID:451718 發(fā)表于 2019-4-7 16:53 | 顯示全部樓層
這個(gè)段代碼湊得還是蠻嚴(yán)謹(jǐn),應(yīng)該只是沒(méi)有搞懂定時(shí)器是什么原理而已。   很多初學(xué)者開(kāi)始都會(huì)把定時(shí)器和中斷混為一堆,用到定時(shí)器就以為一定要發(fā)生中斷。  所以才會(huì)出現(xiàn)在定時(shí)器中斷里面去 操作TR的想法。  不妨從一下4個(gè)步驟去體會(huì)一下定時(shí)器的運(yùn)用。
第一步:設(shè)置特殊功能寄存器TMOD,配置定時(shí)器的工作模式。
第二步:設(shè)置計(jì)數(shù)寄存器TH 和TL 的初值。(溢出后也要重新設(shè)置,不然就要從0x0000開(kāi)始重新計(jì)數(shù)了)
第三步:設(shè)置TCON,通過(guò)TR置1來(lái)讓定時(shí)器開(kāi)始計(jì)數(shù)。
第四步:判斷TCON寄存器的TF位,監(jiān)測(cè)定時(shí)器溢出情況。(可以通過(guò)寄存器中斷機(jī)制,在這里給計(jì)數(shù)器付初值,而不是去開(kāi)關(guān)計(jì)數(shù)器。)
回復(fù)

使用道具 舉報(bào)

ID:46065 發(fā)表于 2019-4-7 20:49 | 顯示全部樓層
你程序里TR0=1;只有在中斷里才執(zhí)行,TR0沒(méi)開(kāi)中斷就不開(kāi),不開(kāi)開(kāi)中斷更執(zhí)行不發(fā)TR0=1,你可以在中斷初始化函數(shù)里開(kāi)下TR0=1
回復(fù)

使用道具 舉報(bào)

ID:430571 發(fā)表于 2019-4-7 20:59 | 顯示全部樓層
設(shè)置
TR0=1;
回復(fù)

使用道具 舉報(bào)

ID:448979 發(fā)表于 2019-4-7 22:58 | 顯示全部樓層
TR0=1;
回復(fù)

使用道具 舉報(bào)

ID:425268 發(fā)表于 2019-4-8 13:02 | 顯示全部樓層
沒(méi)開(kāi)中斷  TR0=1
回復(fù)

使用道具 舉報(bào)

ID:506927 發(fā)表于 2019-4-8 13:39 | 顯示全部樓層
TRO=1; //中斷
回復(fù)

使用道具 舉報(bào)

ID:74585 發(fā)表于 2019-4-8 15:17 | 顯示全部樓層
初始化未啟動(dòng)定時(shí)器。初始化的時(shí)候加上T0_Start()就可以了
回復(fù)

使用道具 舉報(bào)

ID:506091 發(fā)表于 2019-4-8 15:28 | 顯示全部樓層
飛云 發(fā)表于 2019-4-7 10:53
你初始化時(shí)TR0沒(méi)有置1,所以進(jìn)入不了T0的中斷!另外你為什么要在中斷里面清零TR0?

好的,謝謝你的回答
回復(fù)

使用道具 舉報(bào)

ID:506091 發(fā)表于 2019-4-8 15:29 | 顯示全部樓層
wulin 發(fā)表于 2019-4-7 11:09
定時(shí)器TR0=1;在中斷函數(shù)里才能打開(kāi),這個(gè)中斷如何產(chǎn)生???悖論。!void T0_Start(),void T0_Stop()這 ...

謝謝你的回答,我去修改修改
回復(fù)

使用道具 舉報(bào)

ID:506091 發(fā)表于 2019-4-8 15:29 | 顯示全部樓層
saya0769 發(fā)表于 2019-4-7 12:33
stc的燒錄軟件中有源碼例子,封裝管腳等等的資料。很方便的。stc-isp-15xx-v6.86r.exe

好的,謝謝你的回答
回復(fù)

使用道具 舉報(bào)

ID:481497 發(fā)表于 2019-4-9 12:44 | 顯示全部樓層
少了TRO=1
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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