这是我以前写的代码,看有没有帮助
/*<br />** ===================================================================<br />** Interrupt handler : CAPtpmch0_isr<br />**<br />** Description :<br />** User interrupt service routine. <br />** Parameters : None<br />** Returns : Nothing<br />** ===================================================================<br />*/<br />__interrupt 5 void CAPtpmch0_isr(void) {<br /> unsigned int temp;<br /> TPMC0SC_CH0F = 0; //清标志<br /> temp = TPMC0V - lastCap; //新值-老值<br /> capFIFO[capPutPtr++] = temp; //保存差值,方便后面取平均<br /> lastCap = TPMC0V; //保存新值,变为下次的老值<br /> if(capPutPtr == 0x08)<br /> SystemFlag.Bits.CaptureEnd = 1;<br /> capPutPtr &= 0x07;<br />}<br />//数据处理<br />void CaptureCheckData(void) {<br />unsigned long DataSum = 0;<br />unsigned char i;<br />if(SystemFlag.Bits.CaptureEnd) {<br /><br />SystemFlag.Bits.CaptureEnd = 0;<br />for(i=0; i<8; i++) {<br />DataSum += capFIFO;<br />}<br />DataSum >>=3; //连续采样8次,取平均<br />capAverageData = (unsigned int)DataSum;<br />_NOP()<br />}<br />}<br />//初始化<br />void init_CAP(void) {<br /> <br /> /* TPMC0SC: CH1F=0,CH0IE=1,MS0B=0,MS0A=0,ELS0B=0,ELS0A=1 */<br /> TPMC0SC = 0x44; <br /><br /> /* TPMSC: TOF=0,TOIE=0,CPWMS=0,CLKSB=0,CLKSA=1,PS2=0,PS1=0,PS0=0 */<br /> TPMSC = 0x08; <br /><br />}
|
|