控制/MCU
时钟发生器用于产生时钟,并提供给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
}
全部0条评论
快来发表一下你的评论吧 !