疑問: 1.模塊一不是給定時器設定了初值了嘛?模塊三的重新設定是在中斷之后將溢出的數值重新設定???? 2.去除模塊三的定時器賦初值為什么下載程序后不能達到LED亮滅?? 3.主函數中的while(1)是讓程序停在那里一直掃描???  
#include"reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
typedefunsigned int u16; //對數據類型進行聲明定義 typedef unsignedchar u8;
sbitled=P2^0; //定義P20口是led
/******************************************************************************* 模塊一 * 函 數 名 : Timer0Init * 函數功能 :定時器0初始化 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/
voidTimer0Init() //外部中斷0的函數 { TMOD|=0X01; //選擇為定時器0模式,工作方式1,僅用TR0打開啟動。 TH0=0XFC; //給定時器賦初值,定時1ms TL0=0X18; ET0=1;//打開定時器0中斷允許 EA=1; //打開總中斷 TR0=1;//打開定時器 //定時器0的運行開關 }
/******************************************************************************* 模塊二:主函數 * 函 數 名 : main * 函數功能 : 主函數 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/
void main() { Timer0Init(); //定時器0初始化 while(1); // 等待中斷發生???? }
/******************************************************************************* 模塊三:中斷服務函數 * 函 數 名 : void Timer0()interrupt 1 * 函數功能 : 定時器0中斷函數 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/
void Timer0()interrupt 1 { staticu16 i; TH0=0XFC; //給定時器賦初值,定時1ms TL0=0X18; i++; if(i==1000) { i=0; led=~led; } }
|