找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5455|回復: 15
打印 上一主題 下一主題
收起左側(cè)

51定時器中斷進入不了的原因?

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:506091 發(fā)表于 2019-4-7 10:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include  "stc12c5a60s2.h"

#define  uchar unsigned char
#define  uint  unsigned int

/*======================
      定時器初值定義
======================*/
#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ù)
======================*/
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;
        }
}  

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

使用道具 舉報

沙發(fā)
ID:506093 發(fā)表于 2019-4-7 10:53 | 只看該作者
你初始化時TR0沒有置1,所以進入不了T0的中斷!另外你為什么要在中斷里面清零TR0?
回復

使用道具 舉報

板凳
ID:506093 發(fā)表于 2019-4-7 10:54 | 只看該作者
你初始化時TR0沒有置1,所以定時器沒有開始運行!
回復

使用道具 舉報

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

使用道具 舉報

5#
ID:229821 發(fā)表于 2019-4-7 12:33 | 只看該作者
stc的燒錄軟件中有源碼例子,封裝管腳等等的資料。很方便的。stc-isp-15xx-v6.86r.exe
回復

使用道具 舉報

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

使用道具 舉報

7#
ID:46065 發(fā)表于 2019-4-7 20:49 | 只看該作者
你程序里TR0=1;只有在中斷里才執(zhí)行,TR0沒開中斷就不開,不開開中斷更執(zhí)行不發(fā)TR0=1,你可以在中斷初始化函數(shù)里開下TR0=1
回復

使用道具 舉報

8#
ID:430571 發(fā)表于 2019-4-7 20:59 | 只看該作者
設置
TR0=1;
回復

使用道具 舉報

9#
ID:448979 發(fā)表于 2019-4-7 22:58 | 只看該作者
TR0=1;
回復

使用道具 舉報

10#
ID:425268 發(fā)表于 2019-4-8 13:02 | 只看該作者
沒開中斷  TR0=1
回復

使用道具 舉報

11#
ID:506927 發(fā)表于 2019-4-8 13:39 | 只看該作者
TRO=1; //中斷
回復

使用道具 舉報

12#
ID:74585 發(fā)表于 2019-4-8 15:17 | 只看該作者
初始化未啟動定時器。初始化的時候加上T0_Start()就可以了
回復

使用道具 舉報

13#
ID:506091 發(fā)表于 2019-4-8 15:28 | 只看該作者
飛云 發(fā)表于 2019-4-7 10:53
你初始化時TR0沒有置1,所以進入不了T0的中斷!另外你為什么要在中斷里面清零TR0?

好的,謝謝你的回答
回復

使用道具 舉報

14#
ID:506091 發(fā)表于 2019-4-8 15:29 | 只看該作者
wulin 發(fā)表于 2019-4-7 11:09
定時器TR0=1;在中斷函數(shù)里才能打開,這個中斷如何產(chǎn)生???悖論!。oid T0_Start(),void T0_Stop()這 ...

謝謝你的回答,我去修改修改
回復

使用道具 舉報

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

好的,謝謝你的回答
回復

使用道具 舉報

16#
ID:481497 發(fā)表于 2019-4-9 12:44 | 只看該作者
少了TRO=1
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表