| 
 
| 现在用TIMER0的CAP0.0和CAP0.1做捕获输入计脉冲,单路计数数据正确(脉冲在2K左右),打开CAP0.1的脉冲输入后,其中一路偶尔出现特别大的数据,现贴上程序!<br /><br />void __irq  IRQ_Time0(void)<br />{  <br />  <br /> if((T0IR&0X10)==0X10)<br />  { <br />    if(fCap0==0)       <br />     {<br />         if(Count_cap0++==1)<br />            {<br />          Pulse_cap0_old= T0CR0;  <br />          Count_cap0=0; <br />          fCap0=1;<br />          }<br />      }<br />    if(fCap0==1)       <br />      {<br />         if(Count_cap0++==1)<br />         {<br />         Pulse_cap0_new= T0CR0;  <br />         Count_cap0=0;<br />         flag_cap0=1; <br />         <br />          }                             //通知主程序可以对数值处理了<br />       }   <br />             <br />       T0IR|= 0x10;                            // 清除中断标志       <br />    } <br />    <br />   <br />   if((T0IR&0X20)==0X20)<br />  { <br />    if(fCap1==0)<br />    {<br />   if(Count_cap1++==1)<br />       {<br />        Pulse_cap1_old= T0CR1;  <br />        Count_cap1=0;<br />        fCap1=1;<br />          }<br />       }    <br />    if(fCap1==1)                        <br />      {<br />    if(Count_cap1++==1)<br />         {<br />         Pulse_cap1_new= T0CR1;  <br />         Count_cap1=0;<br />         flag_cap1=1; <br />        <br />          }                             //通知主程序可以对数值处理了<br />       } <br />              <br />       T0IR|= 0x20;                            // 清除中断标志       <br />    }   <br />   <br />                             <br />   VICVectAddr = 0x00;                        // 通知VIC中断处理结束<br />     <br />}<br />中断程序,结果输出是用串口输出的!<br />void   Target_Init(void)<br />{<br /> <br />   PINSEL0=0X00050005;                           //将外部设备连接到UART0UART1<br />   PINSEL1=0X3A854000;                            //将0。27-----0。30配置成CAP0------3输入<br />   PINSEL2=0XFFFFFF34;<br />  <br />   IO1DIR=Beep;<br /> <br />   T0PR    = 0;                                 //PCLK=11.0592*2 不分频<br />   T0CCR   = 0x36;                              // 设置CAP0.0下降沿捕获.可以中断,CAP0.1下降沿捕获,可以中断<br />   T0TC    = 0;                               //记数从0开始记<br />                                            /* 设置定时器0中断IRQ */<br />   VICIntSelect = 0x00;                        // 所有中断通道设置为IRQ中断<br />   VICVectCntl0 = 0x24;                        // 定时器0中断通道分配最高优先级(向量控制器0)<br />   VICVectAddr0 = (uint32)IRQ_Time0;         // 设置中断服务程序地址向量 <br />   VICIntEnable = 0x00000010;                // 使能定时器0中断   <br />   T0TCR=0X01;                              //使能中断TIMER0                            <br />  }<br />定时器的初始化! | 
 |