?? timer_interrupt.c
字號:
/****************************************************************************************
* 定時器中斷
* 文 件: timer_interrupt.c
* 編 寫 人: Hawking.
* 描 述:將P0口接到并排的led燈上。
該程序幫助理解定時器以及中斷的概念
從實驗現象知道,定時器中斷是從主函數觸發到中斷子程序再回到主函數斷點來回運行的,
一定時間的內部定時器就是多次來回的定時器中斷。
* 編寫時間: 2013.07.27
* 版 本:1.0
*************************************************************************************/
#include<reg52.h>
#include<intrins.h>
void delay(int z); //聲明延時函數
void ledOn(); //聲明跑馬燈函數
void main()
{
TMOD=0x00; //設置為內部定時器、軟件啟動、模式0
TL0=0x00; //設置計數值初值低8位
TH0=0x00; //設置計數值初值高8位
EA=1; //打開總中斷
ET0=1; //打開定時器中斷T0
TR0=1; //啟動定時i去T0
while(1) //無窮循環,等待中斷,
{
P0=0xff; //從中斷服務函數里會跳回這里面的斷點再等待中斷直到3中斷m=600次
delay(200);
P0=0x00;
delay(200);
}
}
/*************************中斷服務函數************************************/
void led() interrupt 1 //計時時間到時就進入中斷服務函數
{ unsigned int m,n;
TL0=0x00; //重裝初值,重新計時。因為要通過中斷m次來延時,重裝初值是必須的,才能再次計時
TH0=0x00; //
m++; //自增,若未達到條件則跳出中斷,回到主函數的斷點
if(m==300) //當m增到300也就是中斷了300次時運行跑馬燈程序,跑馬燈結束后,回到主程序,
{ //由于定時器已經溢出,所以不會計時,不會觸發中斷,后面一直執行主程序
P0=0xfe;
for(n=0;n<50;n++)
{
P0=_crol_(P0,1);
delay(100);
}
}
}
void delay(int z) //延時函數
{
int i,j;
for(i=z;i>0;i--)
for(j=200;j>0;j--);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -