| void Timer1_Init(void) {
 TCCR1A |=(1<<COM1B1)|(1<<WGM11)|(1<<WGM10);     //0B00100011 OC1A作I/O用,OC1B输出PWM
 TCCR1B |=(1<<ICNC1)|(1<<ICES1)|(1<<WGM13)|(1<<WGM12)|(1<<CS10); //0B11011001 噪声抑制,上升沿输入捕捉,快速PWM,1分频
 //TIMSK |=(1<<TICIE1);
 OCR1A = 0xffff;      //TOP=TCNT1值,TM1从0计数到TOP
 OCR1B = Min_PWM_D;     //占空比=0
 }
 
 int main(void)
 {
 Port_Init();    //端口初始化
 Timer0_Init();   //TMR0初始化
 Timer1_Init();   //TMR1初始化
 //
 uSF.S_Flag = 0;              //清状态共用体标志
 uTSF.T_SET_Flag=0;       //清时间设置共用体标志
 //
 Interrupt_Init();   //中断初始化
 
 while (1)
 {
 //
 if(uSF.bit.TC1_End_f==1)
 {
 uDISP.speed=Vx/T_Num;      //转速=转速系数/T_Num  (T_Num:脉冲数)
 uSF.bit.TC1_End_f=0;       //清IC1捕捉完成标志
 PORTB ^=(1<<LED_Fwd);
 }
 if(uSF.bit.T_500mS_f==1)           //500mS时间到
 {
 TIMSK |=(1<<TICIE1);        //开IC1输入捕捉中断
 uSF.bit.T_500mS_f=0;   //清500mS时间到标志
 }
 }
 }
 
 
 
 /***********中断程序************************/
 //外部中断0
 /*ISR(INT0_vect)
 {
 eeprom_CiShu_data_write ();  //掉电时“次数”数据写入(上电时读出)
 }*/
 
 //timer0 溢出中断(设置20mS中断一次,能使LCD更新等操作正常进行)
 ISR(TIMER0_OVF_vect)
 {
 TCNT0 = T0_INIT;          //T0初值
 T0_count++;
 
 if(T0_count>=25)
 {
 mS_count++;               //500mS+1
 uSF.bit.T_500mS_f=1;        //置500mS定时到标志
 T0_count=0;
 if(mS_count>=2)
 {
 second++;        //秒+1
 re_sec++;          //秒记录+1
 mS_count=0;
 uSF.S_Flag ^=0b00000001;       //等秒取反
 
 if(uSF.bit.T_XR_f)      ////////////////////////////////////////
 {
 PORTB |=(1<<LED_Fwd);   //正转LED亮///////////////////////////////////
 }
 else
 {
 PORTB &=(0<<LED_Fwd);   //正转LED亮///////////////////////////////////
 }
 }
 }
 //LCD_Set_Flash();              //设置闪烁
 //LCD_Display_Update();         //LCD上8*16数字更新
 }
 
 
 //timer1 溢出中断(溢出次数记录)
 ISR(TIMER1_OVF_vect)
 {
 T1_count++;      //TM1中断计数+1
 /*if(uSF.bit.T_XR_f)      ////////////////////////////////////////
 PORTB |=(1<<LED_Rev);   //正转LED亮///////////////////////////////////
 else PORTB &=(0<<LED_Rev);*/
 }
 
 
 //IC1 输入捕获中断(测量周期脉冲数)
 ISR(TIMER1_CAPT_vect)
 {
 static uint IC1Temp1 = 0;    //第一个IC1捕捉值
 static uint IC1Temp2 = 0;    //第二个IC1捕捉值
 
 if(uSF.bit.IC1_1st_f == 0)     //IC1首次捕捉?
 {
 IC1Temp1 = ICR1;              //存第1次事件
 T1_count=0;               //清TM1中断计数
 uSF.bit.IC1_1st_f =1;     //置IC1首次捕捉标志
 }
 else
 {                       //第二次事件
 TIMSK &=(0<<TICIE1);      //IC1输入捕捉中断禁止
 IC1Temp2 = ICR1;              //存第2次事件
 T_Num = (IC1Temp2-IC1Temp1) + T1_count*65536;
 uSF.bit.IC1_1st_f =0;     //清IC1首次捕捉标志
 uSF.bit.TC1_End_f=1;       //置IC1捕捉完成标志
 }
 }
 |