CC2530睡眠定时器

把代码写成诗歌吧

#include "iocc2530.h"
#define led1 P1_0
#define led2 P1_1
#define uint unsigned int
#define uchar unsigned char
#define uint32 unsigned long
#define CRYSTAL 0
#define RC 1


char LEDBLINK;


void Set_ST_Period(uint sec);
void Init_SLEEP_TIMER(void);
void Delay(uint n);
void LedGlint(void);



void InitLEDIO(){
  //1111 1100
  P1SEL &=0xFC;
  //0000 0011
  P1DIR |=0x03;
  led1=1;
  led2=1;
}

//设置系统主时钟函数
void SET_MAIN_CLOCK(source){
  if(source){
    CLKCONCMD |= 0x40;
    while(!(CLKCONSTA & 0x40));
  }else{
    CLKCONCMD &= ~0x47;
    while((CLKCONSTA & 0x40));
  }
}

//设置系统低速时钟函数
void SET_LOW_CLOCK(source){
  (source==RC)?(CLKCONCMD |= 0X80):(CLKCONCMD &= ~0x80);
}

void main(){
  SET_MAIN_CLOCK(CRYSTAL);
  SET_MAIN_CLOCK(CRYSTAL);
  InitLEDIO();
  LEDBLINK=0;
  led1=0;
  led2=1;
  //初始化睡眠定时器
  Init_SLEEP_TIMER();
  //闪烁LED1
  LedGlint();
  //设置睡眠状态8秒
  Set_ST_Period(8);
  while(1){
    if(LEDBLINK){
      LedGlint();
      Set_ST_Period(8);
      led2=!led2;
      LEDBLINK=0;
    }
    Delay(100);
  }
}

//初始化睡眠定时器
void Init_SLEEP_TIMER(void){
  ST2=0X00;
  ST1=0X0F;
  ST0=0X0F;
  EA=1;
  STIE=1;
  STIF=0;
}
//延时函数
void Delay(uint n){
  uint i;
  for(i=0;i<n;i++);
  for(i=0;i<n;i++);
  for(i=0;i<n;i++);
  for(i=0;i<n;i++);
  for(i=0;i<n;i++);
}
//LED1闪烁函数 闪烁10次
void LedGlint(void){
  uchar j=10;
  while(j--){
    led1=!led1;
    Delay(10000);
  }
}
//设置睡眠时间
void Set_ST_Period(uint sec){
  //读睡眠定时器当前的值到sleepTimer中 先读ST0的值
  long sleepTimer=0;
  sleepTimer |=ST0;
  sleepTimer |=(long)ST1 << 8;
  sleepTimer |=(long)ST2 << 16;
  //睡眠定时器的时钟频率为32.768khz.1s增加32768
  //将睡眠时间加到sleepTimer上
  sleepTimer +=((long)sec * (long)32768);
  //将sleepTimer写入睡眠定时器
  ST2=(char)(sleepTimer>>16);
  ST1=(char)(sleepTimer>>8);
  ST0=(char)sleepTimer;
}

#pragma vector = ST_VECTOR
__interrupt void ST_ISR(void){
  STIF=0;
  LEDBLINK=1;
}


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值