zigbee点灯2(定时器)

1、定时器完成一定时间LED1的亮灭
首先说一下定时器
在这里插入图片描述

定时器1
独立的16位定时器
在这里插入图片描述

在这里插入图片描述
三个要配置的寄存器:T1CTL,T1STAT,IRCON
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于定时的时间一些瞎写的记录
在这里插入图片描述

#include <ioCC2530.h>

#define LED1 P1_0

/******初始化LED灯*******/
void InitLed(void)
{
  P1DIR |= 0x01;
  LED1 = 1;
}

/******初始化定时器******/
void InitT1()
{
  T1CTL = 0x0d; //0000 11(标记频率128)01(自由运行,从0x0000到0xFFFF反复计数)
  T1STAT = 0X21; //0010 0001 定时器1计数器溢出中断 定时器0通道4中断标志
}

void main(void)
{
  char count = 0;
  InitLed();
  InitT1();
  
  while(1)
  {
    if(IRCON > 0){
      IRCON=0;
      if(count++ >= 1)
      {
        count = 0;
        LED1 = !LED1;
      }
    }
  }
}

定时器3和定时器4
两个8位定时器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
中断定时LED闪烁

#include <ioCC2530.h>

#define LED1 P1_0

int count;

//灯初始化
void InitLed(void)
{
  P1DIR |= 0X01;
  LED1 = 1;
}
//定时器3初始化
void InitT3()
{
  T3CTL |= 0X08; //开溢出中断
  T3IE = 1;//开总中断和T3中断
  T3CTL |= 0XE0; //128分频
  T3CTL &= ~0X03; //自动重装
  T3CTL |= 0X10; //启动
  EA = 1;//开总中断
}

#pragma vector = T3_VECTOR
__interrupt void T32(void)
{
  IRCON = 0X00; //清中断
  if(count++ > 244)
  {
    count = 0;
    LED1 = ~LED1;
  }
}

void main(void)
{
  InitLed();
  InitT3();
  while(1)
  {};
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于 CC2530 Zigbee 模块的点灯程序示例,使用 IAR EWARM 编译器: ```c #include "ZComDef.h" #include "OSAL.h" #include "OSAL_Tasks.h" #include "AF.h" #include "ZDApp.h" #include "ZDObject.h" #include "DebugTrace.h" #include "OnBoard.h" #include "hal_led.h" #include "ZDConfig.h" /* 定义应用程序消息类型 */ #define APP_MSG_TOGGLE_LED 0x01 /* 定义应用程序任务 ID */ #define APP_TASK_ID 1 /* 应用程序任务事件处理函数 */ uint16 App_ProcessEvent (uint8 task_id, uint16 events) { if (events & SYS_EVENT_MSG) { afIncomingMSGPacket_t *pkt; while ((pkt = (afIncomingMSGPacket_t *)osal_msg_receive (APP_TASK_ID)) != NULL) { switch (pkt->clusterId) { case 0x0006: /* 点灯命令 */ HalLedSet (HAL_LED_1, HAL_LED_MODE_TOGGLE); break; } osal_msg_deallocate ((uint8 *)pkt); } return (events ^ SYS_EVENT_MSG); } return 0; } /* 应用程序初始化函数 */ void App_Init (uint8 task_id) { HalLedSet (HAL_LED_1, HAL_LED_MODE_OFF); afRegister (APP_TASK_ID); } /* 应用程序入口函数 */ int main (void) { /* 初始化操作系统 */ osal_sys_init (); /* 初始化 Zigbee 协议栈 */ ZMacSetFunc (ZMacRandomSeed, Onboard_rand); ZDOInit (); APS_Init (); ZDApp_Init (); ZDAppRegisterDev (ZDAppTaskID, &GenericApp); ZDAppActive (ZDAppTaskID, 1); /* 初始化应用程序任务 */ osal_set_event (APP_TASK_ID, SYS_EVENT_MSG); osal_start_system (); return 0; } ``` 在上述代码中,点灯命令的 cluster ID 为 0x0006,可以使用其他 Zigbee 设备发送该命令,即可控制 CC2530 模块上的 LED 灯开关。 以上仅为示例程序,具体实现方式可能因芯片型号、开发环境等因素而有所不同,需要根据实际情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值