FUJISEKKを作る。
 PWM.c
#include "ClockCounter.h"
#include "PWM.h"

#define TM1MOD 0x3E4      //2.3khzTM1Freq/1MHZCpuFreq
void PWM_Init(void)
{
unsigned int freq;
  /* TPM1SC: TOF=0,TOIE=0,CPWMS=0,CLKSB=0,CLKSA=0,PS2=0,PS1=0,PS0=0 */
  setReg8(TPM1SC, 0x00);               /* Disable device */
  /* TPM1C0SC: CH0F=0,CH0IE=0,MS0B=1,MS0A=1,ELS0B=1,ELS0A=1,??=0,??=0 */
  setReg8(TPM1C0SC, 0x3C);             /* Set up PWM mode with output signal level low */
  RatioStore = 0xFFFFU;                /* Store initial value of the ratio */
  /* TPM1MOD: BIT15=0,BIT14=0,BIT13=0,BIT12=1,BIT11=1,BIT10=1,BIT9=1,BIT8=1,BIT7=0,BIT6=0,BIT5=1,BIT4=0,BIT3=0,BIT2=0,BIT1=0,BIT0=0 */
//  setReg16(TPM1MOD, 0x1F20U);          /* Set modulo register */
  freq=TM1MOD*cpu_speed; //  ??

  setReg16(TPM1MOD, freq);          /* Set modulo register */
  SetRatio();                          /* Calculate and set up new values of the compare according to the selected speed CPU mode */
  /* TPM1SC: TOF=0,TOIE=1,CPWMS=0,CLKSB=0,CLKSA=1,PS2=0,PS1=0,PS0=0 */
  setReg8(TPM1SC, 0x48);               /* Run the counter (set CLKSB:CLKSA) */
 
//  TPM1C0V = 0xF20U;
  TPM1C0V =freq>>1;  // duty 1/2
  PWMDuty=0x80;
}

/*   Duty 0% to 100% */
void PWM_Duty(unsigned char multi){
unsigned int work;
  work=TM1MOD*cpu_speed;;
  work=work>>8;
  work=work+1;
  work =work*multi;
  TPM1C0V =work;
  PWMDuty= multi;
}
/* PWMDuty Change */
/* INC 1 */
unsigned char PWM_DutyUP(void){

  if( PWMDuty<0xff){
       PWMDuty=PWMDuty+1;
       PWM_Duty(PWMDuty);
  }
  return (PWMDuty) ;
}
/* DOWN 1*/
unsigned char PWM_DutyDN(void){
  if( PWMDuty>0){
       PWMDuty=PWMDuty-1;
       PWM_Duty(PWMDuty);
  }
  return (PWMDuty) ;
}

void PWM_OnEnd(void)
{
  /* Write your code here ... */
  // Clear CH0F flag
  TPM1C0SC &=0x7F;

  //Clear the 16-bit timer1 counter
  TPM1CNTH = 0x00;
 
 setReg8(TPM1SC, 0x00);         /* Stop the counter (set CLKSB:CLKSA) */
}

PWM.h
void PWM_Duty(char multi);//multi=0 duty 0% 255 duty 100%
unsigned char PWM_DutyUP(void);
unsigned char PWM_DutyDN(void);
void PWM_OnEnd(void);
ISR(TPM1_isr);