?? interrupt.c
字號:
/*********interrupt.c****************/
#include "interrrupt.h"
extern xdata uchar state;
extern xdata uchar liangcheng;
extern xdata refreshTime;
extern xdata refreshTemp;
idata Counter periodCounters[COUNTERS_LEN];
Counter periodCounter;
//uint counts[6];
//uint count=0;
idata uchar DownCount=0 ;
bit T2ExDown2=0;
xdata uchar CountFor1s=0;
#define IGNORE 4
void InitInterrupt(); //初始化中斷
void InitInterrupt()
{
// PCA0MD=0x0B;//使用外時鐘8分頻,允許CF中斷
// EIE1 =0x08;//EPCA0置1,允許PCA0中斷
EX0=1;//外部中斷0
IT1=1;//沿觸發方式
//IT1=0;//
CKCON=0xF0; //定時器1,2,4系統時鐘不分頻,定時器0使用12分頻
TMOD=0x21;
TH0=0;TL0=0;
PT0=0;//低優先級
ET0=1;
TR0=1;
EA=1;
//EX1=1;//打開外部中斷1
//IT1=0;//電平觸發方式
//EIE2=0x10;//打開外部中斷6
//P3IF=0x00;//使用默認值,下降沿觸發
}
void INT1() interrupt 2 using 1 //外部中斷1
{
if(++DownCount<=8)//if(++DownCount<=2*IGNORE)
return;//舍棄前IGNORE次結果
if(DownCount%2==1)
{
//periodCounter.Low16=
TR1=1; //開定時器
}
else
{
TR1=0;
periodCounters[DownCount/2-5]=periodCounter;//periodCounters[DownCount/2-(IGNORE+1)]=periodCounter;
periodCounter=0;
}
if(DownCount==20)//if(DownCount==((IGNORE*+COUNTERS_LEN)*2))
{
ET1=0;
EX1=0;//關閉外部中斷0
DownCount=0;
// interrupted=1;
state=CALCU;
}
}
void Timer1() interrupt 3 using 3
{
periodCounter++;
// TEST=!TEST;
}
void Timer0() interrupt 1 using 1
{
++CountFor1s;
if(32==CountFor1s)
refreshTime=1;
if(64==CountFor1s)
{
refreshTime=1;
refreshTemp=1;
CountFor1s=0;
}
}
/*
void PCATimer() interrupt 9 using 3
{
TR1=0;
}*/
//way 1
void Timer2() interrupt 5 using 2 //the number of the input pulse arrived 65536
{
TR1=0;
TR2=0;
EA=0;
periodCounters[DownCount++]=periodCounter;
periodCounter=0;
if(DownCount==3)
{
DownCount=0;
ET2=0;
ET1=0;
state=CALCU;
}
else
{
switch(liangcheng)
{
case 4:break;
case 3:TH2=0xfc;TL2=0x18;break;//1000 periods
case 2:TH2=0xff;TL2=0x9c;break;//100 periods
case 1:TH2=0xff;TL2=0xf6;//10 periods
case 5:TH2=0xff;TL2=0xfb;//2 periods
}
EA=1;
TR1=1;
TR2=1;
}
TF2=0;
}
/*
//way 2
void Timer2() interrupt 5 using 2 //
{
if(EXF2)
{
EXF2 = 0; // Reset Capture Flag
}
else if(TF2)
{
TF2 = 0;
}
if(T2ExDown2==0)
{
T2ExDown2=1;
}
else
{
periodCounter=RCAP2H*256+RCAP2L ;
EXEN2=0;
T2ExDown2=0;
TR2=0;
TH2=0;
TL2=0;
}
EXF2=0;
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -