#include <hidef.h> //   EnableInterrupts 
#include ".h" //       
//   
 unsigned int Scount; //     
 int Rcounta; //   RPM 
  lowflag; // 1,     15  
  IRQflag; //        
 ; //    
//   
float temp; //      
unsigned int speed; //      PWM 
 tempdata; //    

void main (void) { 
EnableInterrupts; 

//   

ICSC1 = 0b10111000; // Ext Ref; RDIV = 128; IREFS = 0 
ICSC2 = 0b10110100; // BDIV = 1; Hi Range, Hi Gain, Oscillator 

//    
SOPT1_RSTPE = 0; // PTA5 ( 1)    IRQ 
SOPT1_BKGDPE = 1; // PTA4 ( 2)     
// 
SOPT2_T1CH0PS = 0; // TPM Ch0  PTA0 ( 20) 

//  IRQ 
IRQSC_IRQPDD = 1; //    
IRQSC_IRQEDG = 1; //     
IRQSC_IRQPE = 1; //   IRQ 
IRQSC_IRQMOD = 0; //    
//   A 
PTADD_PTADD2 = 0; //   PTA2 

//   B 
PTBDD = 0x10; //   PTB0;  dip- PTB1-3; PTB4 =   
PTBPE = 0x0F; //    PTB0-3 

//   C 
PTCDD = 0x00; // dip- PTC0-3 
PTCPE = 0x0F; // pullups   PTC0-3 

//    2 
PTASC_PTAMOD = 0; //    
PTAPS_PTAPS2 = 1; //  PTA2  
PTAES_PTAES2 = 1; //    

//    B B 0 
PTBSC_PTBMOD = 0; //    
PTBPS_PTBPS0 = 1; //   PTB0 
PTBES_PTBES0 = 1; //    

//  PWM CH0 
TPM1SC_TOIE = 0; //     
TPM1SC_CPWMS = 0; //    
TPM1SC_CLKSA = 1; // clock source = bus clock 
TPM1SC_CLKSB = 0; 
TPM1SC_PS0 = 1; //  2 (  1 ) 
TPM1SC_PS1 = 0; 
TPM1SC_PS2 = 0; 

TPM1C0SC_CH0IE = 0; //    CH0 
TPM1C0SC_MS0A = 1; //    
TPM1C0SC_MS0B = 0; 
TPM1C0SC_ELS0A = 1; //     
TPM1C0SC_ELS0B = 0; 


/ *    -  ,  ,     
  0,5%,   7-     1-7 
 SW8 ,   ,     
 ,      * / 
tempdata = (~ PTCD & 0x07) << 3; // PTC0-2    
tempdata + = (~ PTBD & 0x0F) >> 1; // PTB1-3    
if (PTCD_PTCD3) {//  sw8 OFF 
adjust = 1+ (tempdata * 0,005); //   
} 
else {//  sw8 ON 
adjust = 1- (tempdata * 0,005); //   
} 


Rcounta = 0; //     

PTASC_PTAIE = 1; //      2 
IRQSC_IRQIE = 1; //   IRQ 



/ ************************************************* * ******************************* / 
/ *   -   * / 
/ ************************************************* * ******************************* / 
(;;) { 
__RESET_WATCHDOG (); 

Scount = 0; 
lowflag = 0; 
PTBSC_PTBACK = 1; //   
    (PTBSC_PTBIF!); //    
PTBSC_PTBACK = 1; //   
while (! PTBSC_PTBIF) {//      
Scount ++; 
if (Scount> 8390) {// = 65535 / 7.875 ( 15   ) 
lowflag = 1; 
}// 
}//    
PTBSC_PTBACK = 1; //   
//    
if (lowflag == 0) { 
speed = Scount; 
} 
 { 
 = 8320; 
} 
temp = (float) ; 
temp * = 7.875; 
temp * = ; 
speed = (int) temp; 
TPM1MODH = ( & 0xFF00) >> 8; //   
TPM1MODL = ( & 0X00FF); //   


/ *   6-  
     
512    * / 
if (IRQflag == 1) { 
if (Rcounta <64) { 
PTBD_PTBD4 = 0; //   
}// 
 { 
PTBD_PTBD4 = 1; //   
} //  
IRQflag = 0; //   
Rcounta = 0; //    
IRQSC_IRQIE = 1; //     
PTASC_PTAIE = 1; //    RPM 
}// 


} //   -   
}// 
/ * IRQ_ISR - ISR,     IRQ 
  ,   256  * / 
 2 void IRQ_ISR (void) { 
IRQSC_IRQACK = 1; //   
IRQflag = 1; //   
IRQSC_IRQIE = 0; //    
PTASC_PTAIE = 0; //   RPM 
} 
/ * PTA_ISR - ISR,    2  A  
  RPM * / 
 20 void PTA_ISR (void) { 
PTASC_PTAACK = 1; //   
Rcounta ++; //      
}