標(biāo)題: 單片機(jī)定時(shí)器0中斷 控制LED亮滅 有幾個(gè)問題想不清楚!求解答 [打印本頁]
作者: 22854qq 時(shí)間: 2020-7-25 17:47
標(biāo)題: 單片機(jī)定時(shí)器0中斷 控制LED亮滅 有幾個(gè)問題想不清楚!求解答
疑問:
1.模塊一不是給定時(shí)器設(shè)定了初值了嘛?模塊三的重新設(shè)定是在中斷之后將溢出的數(shù)值重新設(shè)定????
2.去除模塊三的定時(shí)器賦初值為什么下載程序后不能達(dá)到LED亮滅??
3.主函數(shù)中的while(1)是讓程序停在那里一直掃描???


#include"reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedefunsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsignedchar u8;
sbitled=P2^0; //定義P20口是led
/*******************************************************************************
模塊一
* 函 數(shù) 名 : Timer0Init
* 函數(shù)功能 :定時(shí)器0初始化
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
voidTimer0Init() //外部中斷0的函數(shù)
{
TMOD|=0X01; //選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動(dòng)。
TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
TL0=0X18;
ET0=1;//打開定時(shí)器0中斷允許
EA=1; //打開總中斷
TR0=1;//打開定時(shí)器 //定時(shí)器0的運(yùn)行開關(guān)
}
/*******************************************************************************
模塊二:主函數(shù)
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
Timer0Init(); //定時(shí)器0初始化
while(1); // 等待中斷發(fā)生????
}
/*******************************************************************************
模塊三:中斷服務(wù)函數(shù)
* 函 數(shù) 名 : void Timer0()interrupt 1
* 函數(shù)功能 : 定時(shí)器0中斷函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer0()interrupt 1
{
staticu16 i;
TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
作者: xianfajushi 時(shí)間: 2020-7-25 23:59
1不要把函數(shù)稱為模塊,2應(yīng)該去學(xué)一下定時(shí)器內(nèi)容,3除去中斷重新賦值會(huì)使計(jì)時(shí)變得很長,4while(1);無限空循環(huán),因?yàn)椴恍枰鋈魏问虑椤?hr noshade size="2" width="100%" color="#808080">
作者: xianfajushi 時(shí)間: 2020-7-26 05:39
補(bǔ)充一下while(1);空循環(huán)不做任何別的事情,只負(fù)責(zé)讓單片機(jī)運(yùn)行起來。
作者: wufeng391 時(shí)間: 2020-7-26 10:17
你可能是從PLC轉(zhuǎn)過來的吧!模塊的概念用于理解程序還行,與大家溝通就不太方便了,定時(shí)器每次溢出進(jìn)入中斷都會(huì)讓定時(shí)器寄存器的值清零,即TL0,TH0=0,如果要保證下次定時(shí)器進(jìn)入中斷的時(shí)間,需要再次給TH0和TH0賦值。你也可以理解為定時(shí)器在工作模式1時(shí)的記性不太好,一進(jìn)入中斷就忘了自己在哪兒了,你需要提醒它一下,也就是通過TH0和TH1的賦值實(shí)現(xiàn)。
作者: wufeng391 時(shí)間: 2020-7-26 10:20
你需要對(duì)中斷的概念加深一下理解。
while(1);你也可以理解為無條件等待,直到發(fā)生中斷并執(zhí)行中斷程序。執(zhí)行完中斷繼續(xù)等待。
作者: fsmith 時(shí)間: 2020-7-26 11:14
你對(duì)中斷的應(yīng)有還有點(diǎn)不熟悉,可以加深學(xué)習(xí)一下。
while(1); 對(duì)于MCU來講,只是在等待,不處理任何事務(wù),直到發(fā)生中斷并執(zhí)行中斷程序。執(zhí)行完中斷繼續(xù)等待。
作者: 壓著我頭發(fā)啦 時(shí)間: 2020-7-26 15:50
http://www.raoushi.com/bbs/dpj-103111-1.html
我覺得還是把這篇文章細(xì)研究下。要不以后遇到定時(shí)中斷還是不會(huì)。要每一句都知道怎么回事
作者: lxbhcy 時(shí)間: 2020-7-28 09:58
while(1),這個(gè)是等待,如果沒有這個(gè),程序很可能只執(zhí)行一次
作者: 22854qq 時(shí)間: 2020-7-28 16:06
謝謝!!!
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |