测试的时候采用了,此程序
但是发现只有在选择12M内部RC为振荡器1时,关闭振荡器2,或者是选择128K内部RC
为震荡器1.12MRC为振荡器2.且要在软件中打开振荡器2才能输出PWM波形,请问这是为什么?
出于低功耗考虑我想仅采用内部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);
}
}
|