出于低功耗考虑我想仅采用内部128K振荡器。 
/****************************************************** 
                MCU:                SH79F166A 
                CRYSTEL:        4MHz 
                FUNCTION:        PWM0 
******************************************************/ 
#include<SH79F166A.h> 
 
#define uchar unsigned char 
#define uint unsigned int 
 
/****************************************************** 
                延时程序 
******************************************************/ 
void Delay(uint ms)                            
{                                                                                                                                                                                                                                                                            
    uint a,b,c; 
    for(c=ms;c>0;c--) 
        for(b=142;b>0;b--) 
            for(a=2;a>0;a--); 
} 
 
/****************************************************** 
                PWM0 Init 
******************************************************/ 
void PWM0_30Duty() 
{ 
        PWMLO        =        0X55;                //保护寄存器,允许配置 
         
        PWM0C        =        0X01;                // PWM CLK=SYS CLK/4 
        PWM0PL        =        0XE8; 
        PWM0PH        =        0X03;                //约 1KHz 
        PWM0DL        =        0X2C; 
        PWM0DH        =        0X01;                //占空比 30% 
        PWMEN        =        0X01;                //0000 0001 ,PWM0 OPEN 
 
        PWMLO        =~        0X55;                //保护寄存器,不允许配置 
} 
//-------------------------------- 
void PWM0_40Duty() 
{ 
        PWMLO        =        0X55;                //保护寄存器,允许配置 
         
        PWM0C        =        0X01;                // PWM CLK=SYS CLK/4 
        PWM0PL        =        0XE8; 
        PWM0PH        =        0X03;                //约 1KHz 
        PWM0DL        =        0X90; 
        PWM0DH        =        0X01;                //占空比 40% 
        PWMEN        =        0X01;                //0000 0001 ,PWM0 OPEN 
 
        PWMLO        =~        0X55;                //保护寄存器,不允许配置 
} 
//-------------------------------- 
void PWM0_50Duty() 
{ 
        PWMLO        =        0X55;                //保护寄存器,允许配置 
         
        PWM0C        =        0X01;                // PWM CLK=SYS CLK/4 
        PWM0PL        =        0XE8; 
        PWM0PH        =        0X03;                //约 1KHz 
        PWM0DL        =        0XF4; 
        PWM0DH        =        0X01;                //占空比 50% 
        PWMEN        =        0X01;                //0000 0001 ,PWM0 OPEN 
 
        PWMLO        =~        0X55;                //保护寄存器,不允许配置 
} 
 
/****************************************************** 
                main 
******************************************************/ 
void main() 
{ 
        CLKCON=0X00; 
        Delay(100); 
         
        while(1) 
        { 
                PWM0_30Duty(); 
                Delay(800); 
                PWM0_40Duty(); 
                Delay(800); 
                PWM0_50Duty(); 
                Delay(800); 
        }         
}
 |