|
做了一個(gè)定時(shí)中斷,不能正常運(yùn)行,請(qǐng)高人幫助指點(diǎn)!
- #include <STC15F104E.H> //12MHz
- #define uchar unsigned char //宏定義字符型變量
- #define uint unsigned int //宏定義整型變量
- #define MAIN_Fosc 12000000L
- sbit jiance=P3^0;
- sbit in=P3^1;
- sbit out=P3^3;
- uchar oldjiance=0;
- uchar flag=0;
- long jishu=0;
- /************************************/
- /**********延時(shí)函數(shù)******************/
- /************************************/
- void delay(unsigned char ms)
- {
- unsigned int i;
- do{
- i = MAIN_Fosc/13000;
- while(--i) ; //14T per loop
- }while(--ms);
- }
- /************************************/
- /**********定時(shí)器初始化******************/
- /************************************/
- void InitTimer(void)
- { EA = 1;
- AUXR |= 0x40; //定時(shí)器1時(shí)鐘1T模式,30us進(jìn)行一次休眠檢測(cè)
- TMOD &= 0x0F; //設(shè)置定時(shí)器模式
- TL1 = 0x98; //設(shè)置定時(shí)初值
- TH1 = 0xFE; //設(shè)置定時(shí)初值
- TF1 = 0; //清除TF1標(biāo)志
- TR1 = 1; //定時(shí)器1開(kāi)始計(jì)時(shí)
- }
- /************************************/
- /**********定時(shí)器1,休眠檢測(cè)*********/
- /************************************/
- void tm1_isr() interrupt 3 using 1
- {
- TR1=0; //關(guān)閉定時(shí)器T1
- jishu++;
- if(jiance==~oldjiance) {jishu=0;}
-
- if(jishu>=5000000){flag=1;} //2.5分鐘,降溫
- if(jishu>=10000000){flag=2;} //5分鐘,更低降溫
- if(jishu>=20000000){flag=3;jishu=20000000;} //10分鐘,停止加熱
- oldjiance=jiance;
- TR1=1; //啟動(dòng)定時(shí)器T1
- }
- /************************************/
- /************主函數(shù)******************/
- /************************************/
- main()
- {
- InitTimer();
- while(1)
- {
- switch (flag)
- {
- case 0: out=in;break;
- case 1: out=0;delay(100);out=in; break;
- case 2: out=0;delay(500);out=in; break;
- case 3: out=0; break;
- default: break;
- }
-
- }
- }
復(fù)制代碼
|
|