时钟发生器用于发生时钟,并供给应CPU和外部硬件设备。
UPD78F0527有如下三种体系时钟。
(1)主体系时钟
①经过衔接一个振动器到X1和X2,该振动电路发生fx=1到20MHZ的时钟;
②运用内部高速振动器发生fRH=8MHZ的时钟。
(2)副体系时钟
①经过在XT1和XT2之间衔接一个fXT=32.768KHZ的振动器;
②经过XT2引脚供给一个外部副体系时钟fexclks=32.768KHZ。
(3)内部低速振动时钟(看门狗定时器时钟)
①内部低速振动器,以fRL=240KHZ的时钟振动。该时钟不能作为CPU时钟。
在电表掉电时CPU挑选运用副体系时钟。
假如一个变量只要几种或许的值。则可以界说为枚举类型。所谓“枚举”是指将变量的值一一罗列出来,变量的值只限于罗列出来的值得规模。
如下CPU_CLK的值只能是CPU_8M或CPU_32K;
typedef enum
{ CPU_8M,
CPU_32K
}enum_CPU_CLK;
extern volaTIle enum_CPU_CLK CPU_CLK;
void Clock_use_8M(void)
{
OSCCTL=0b00110000; //X1&X2 pin used as IO,1Mhz
PCC = 0b00000000; //Set internal high-speed oscillator fck=8MHz,(default value fck=4MHz),XT1 used as IO,XT2 used as CLK input
RCM = 0x00; //Internal low&high speed oscillator run,wait internal high-speed stable
CPU_CLK = CPU_8M;
while(CLS) //wait CPU clock used main system clk
{
NOP();
}
}
void Clock_use_32k(void)
{
BitSet(PCC, 0x10); //uses subclk 32k/2 as the program clk
CPU_CLK = CPU_32K;
while(!CLS)
{
NOP();
}
BitSet(RCM,0x01); //STOP INTERNAL CLK
}