關(guān)于我們
18925580829
13926563901
發(fā)布時間:2018-04-04 瀏覽量:
/* 添加包含芯片的頭文件 */
#include
unsigned int ms_count;
/*******************************************************************************
**函數(shù)名稱:void Timer2Init()
**功能描述:定時器2參數(shù)初始化
**入口參數(shù):無
**輸出:無
*******************************************************************************/
void Timer2Init()
{
TIM2_PSCR = 0x00; //定時器2預(yù)分頻數(shù)為 1 分頻,即定時器時鐘 = 系統(tǒng)時鐘 = 16MHz
TIM2_ARRH = 0x3e; //設(shè)置1毫秒時間自動重載 16000 = 0x3e80
TIM2_ARRL = 0x80; //
TIM2_CNTRH = 0; //清除計數(shù)寄存器
TIM2_CNTRL = 0; //
TIM2_IER = 0x01; //使能定時器2允許更新中斷
TIM2_SR1 = 0x00; //清除所有的中斷標(biāo)示
TIM2_CR1 = 0x81; //使能計數(shù)器,并允許自動預(yù)裝
}
/*******************************************************************************
**函數(shù)名稱:void LED2Init()
**功能描述:LED2->功能引腳初始化
**入口參數(shù):無
**輸出:無
*******************************************************************************/
void LED2Init()
{
PC_DDR_bit.DDR7 = 1;
PC_CR1_bit.C17 = 1;
PC_CR2_bit.C27 = 1;
}
/** 主函數(shù) **/
int main(void)
{
asm("sim"); //先關(guān)閉總中斷
CLK_CKDIVR = 0x00; //CPUDIV = 1 HSIDIV = 1 內(nèi)部時鐘 = 16Mhz
LED2Init(); //調(diào)用LED2初始化函數(shù)
Timer2Init(); //調(diào)用定時器2初始化函數(shù)
asm("rim"); //打開總中斷
while(1); //進(jìn)入死循環(huán),等待定時器2周期中斷
}
/*******************************************************************************
**函數(shù)名稱:__interrupt void TIM2_UPDATE_IRQHandler(void)
**功能描述:定時器2重載更新中斷服務(wù)函數(shù)
**入口參數(shù):無
**輸出:無
*******************************************************************************/
#pragma vector = 15 //設(shè)置定時器2重載的中斷向量號 = 15
__interrupt void TIM2_UPDATE_IRQHandler(void)
{
TIM2_SR1 = 0x00; //清除中斷標(biāo)志
ms_count++; //中斷使 ms_count++ 做加法,記錄1毫秒產(chǎn)生的中斷次數(shù)
if(ms_count >= 1000) //記錄達(dá)到1000毫秒,即1秒
{
ms_count = 0; //復(fù)位記錄中斷次數(shù)
PC_ODR ^= 0x80; //對LED2進(jìn)行異或取反,使LED2以1秒的周期亮滅
}
}