找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)定時器0中斷 控制LED亮滅 有幾個問題想不清楚!求解答

[復(fù)制鏈接]
ID:645415 發(fā)表于 2020-7-25 17:47 | 顯示全部樓層 |閱讀模式
疑問:
1.模塊一不是給定時器設(shè)定了初值了嘛?模塊三的重新設(shè)定是在中斷之后將溢出的數(shù)值重新設(shè)定????
2.去除模塊三的定時器賦初值為什么下載程序后不能達(dá)到LED亮滅??
3.主函數(shù)中的while(1)是讓程序停在那里一直掃描???


#include"reg52.h"                        //此文件中定義了單片機(jī)的一些特殊功能寄存器

typedefunsigned int u16;          //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsignedchar u8;

sbitled=P2^0;         //定義P20口是led



/*******************************************************************************
模塊一
* 函 數(shù) 名         : Timer0Init
* 函數(shù)功能        :定時器0初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/


voidTimer0Init()  //外部中斷0的函數(shù)
{
TMOD|=0X01;  //選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XFC;        //給定時器賦初值,定時1ms
TL0=0X18;     
ET0=1;//打開定時器0中斷允許
EA=1; //打開總中斷
        TR0=1;//打開定時器        //定時器0的運行開關(guān)               
}


/*******************************************************************************
模塊二:主函數(shù)
* 函 數(shù) 名       : main
* 函數(shù)功能                : 主函數(shù)
* 輸    入       : 無
* 輸    出            : 無
*******************************************************************************/

void main()
{        
Timer0Init(); //定時器0初始化
while(1);        //  等待中斷發(fā)生????     
}

  
/*******************************************************************************
模塊三:中斷服務(wù)函數(shù)
* 函 數(shù) 名         : void Timer0()interrupt 1
* 函數(shù)功能                   : 定時器0中斷函數(shù)
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/


void Timer0()interrupt 1
{
staticu16 i;
TH0=0XFC;        //給定時器賦初值,定時1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
led=~led;        
}        
}

回復(fù)

使用道具 舉報

ID:332444 發(fā)表于 2020-7-25 23:59 | 顯示全部樓層
1不要把函數(shù)稱為模塊,2應(yīng)該去學(xué)一下定時器內(nèi)容,3除去中斷重新賦值會使計時變得很長,4while(1);無限空循環(huán),因為不需要做任何事情。
回復(fù)

使用道具 舉報

ID:332444 發(fā)表于 2020-7-26 05:39 | 顯示全部樓層
補(bǔ)充一下while(1);空循環(huán)不做任何別的事情,只負(fù)責(zé)讓單片機(jī)運行起來。
回復(fù)

使用道具 舉報

ID:782419 發(fā)表于 2020-7-26 10:17 | 顯示全部樓層
你可能是從PLC轉(zhuǎn)過來的吧!模塊的概念用于理解程序還行,與大家溝通就不太方便了,定時器每次溢出進(jìn)入中斷都會讓定時器寄存器的值清零,即TL0,TH0=0,如果要保證下次定時器進(jìn)入中斷的時間,需要再次給TH0和TH0賦值。你也可以理解為定時器在工作模式1時的記性不太好,一進(jìn)入中斷就忘了自己在哪兒了,你需要提醒它一下,也就是通過TH0和TH1的賦值實現(xiàn)。
回復(fù)

使用道具 舉報

ID:782419 發(fā)表于 2020-7-26 10:20 | 顯示全部樓層
你需要對中斷的概念加深一下理解。
while(1);你也可以理解為無條件等待,直到發(fā)生中斷并執(zhí)行中斷程序。執(zhí)行完中斷繼續(xù)等待。
回復(fù)

使用道具 舉報

ID:395706 發(fā)表于 2020-7-26 11:14 | 顯示全部樓層
你對中斷的應(yīng)有還有點不熟悉,可以加深學(xué)習(xí)一下。
while(1); 對于MCU來講,只是在等待,不處理任何事務(wù),直到發(fā)生中斷并執(zhí)行中斷程序。執(zhí)行完中斷繼續(xù)等待。
回復(fù)

使用道具 舉報

ID:716656 發(fā)表于 2020-7-26 15:50 | 顯示全部樓層
http://www.torrancerestoration.com/bbs/dpj-103111-1.html
我覺得還是把這篇文章細(xì)研究下。要不以后遇到定時中斷還是不會。要每一句都知道怎么回事
回復(fù)

使用道具 舉報

ID:808700 發(fā)表于 2020-7-28 09:58 | 顯示全部樓層
while(1),這個是等待,如果沒有這個,程序很可能只執(zhí)行一次
回復(fù)

使用道具 舉報

ID:645415 發(fā)表于 2020-7-28 16:06 | 顯示全部樓層
壓著我頭發(fā)啦 發(fā)表于 2020-7-26 15:50
http://www.torrancerestoration.com/bbs/dpj-103111-1.html
我覺得還是把這篇文章細(xì)研究下。要不以后遇到定時中斷還是不 ...

謝謝。!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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