CC2530系统时钟

CC2530系统时钟:
16MHz(内部RC振荡器)、32MHz(外部晶振)
上电模式16MHz 精度:内部<外部晶振 无线必须使用32MHz!!!
上电模式16MHz——>等待 稳定后——>切换到32MHz

CLKCONCMD     :时钟控制命令寄存器(设置是16MHz还是32MHz)
CLKCONSTA       :时钟控制状态寄存器<只读 >(通过读取寄存器判断外部晶振稳定)

16MHz————>32MHz:
CLKCONCMD &= ~0x40;       //OSC位清0,选择系统时钟源为32MHz晶振
while(CLKCONSTA & 0x40); //等待外部晶振稳定
CLKCONCMD &= ~0x07;      //设置当前系统时钟的速度为32MHz
32MHz————>16MHz:
CLKCONCMD |= 0x40;         //OSC位清0,选择系统时钟源为16MHz晶振
while(!(CLKCONSTA & 0x40));//等待外部晶振稳定
CLKCONCMD |= 0x01;//设置当前系统时钟的速度为16MHz

 

#include "ioCC2530.h"

#define D6 P1_4
 
#define sw2 P0_1

unsigned char F_clk = 16;

void Delay(unsigned int t)
{
  while(t--);
}

void Init_prot()
{
  P1SEL &= ~0x1b;
  P1DIR |= 0x1b;
  P1 &= ~0x1b;
}

void Set_Clock(unsigned char clk)
{
  switch(clk)
  {
  case 16:
    CLKCONCMD |= 0x40;
    while(!(CLKCONSTA & 0x40));
    CLKCONCMD |= 0x01;
    break;
    
  case 32:
    CLKCONCMD &= ~0x40;
    while(CLKCONSTA & 0x40);
    CLKCONCMD &= 0x70;
    break;
  }
}

void Scan_keys()
{
  if(sw2 == 0)
  {
    Delay(200);
    if(sw2 == 0)
    {
      while(sw2 == 0)
        
        if(F_clk == 16)
        {
          Set_Clock(32);
          F_clk = 32;
        }
        else if(F_clk == 32)
        {
          Set_Clock(16);
          F_clk = 16;
        }
      
    }
  }
}

void main()
{
  Init_prot();
  while(1)
  {
    D6 = 1;
    Delay(60000);
    Scan_keys();
    Delay(60000);
    Scan_keys();
    D6 = 0;
    Delay(60000);
    Scan_keys();
    Delay(60000);
    Scan_keys();
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值