zigbee初级教程(七) CC2530 定时器T1-查询方式

                                  定时器T1-查询方式

 

 1.实验目的

1)、通过实验掌握 CC2530 芯片 GPIO 的配置方法

2)、掌握 Led 驱动电路及开关 Led 的原理

3)、掌握定时器 T1 的配置与使用

 

 

2.实验平台

1)cc2530zigbee开发板平台

①协议栈版本:无,初级教程为裸机编程。

②编译软件:IAR Embedded Workbeench for 8051-V8.10.3 

③硬件平台:ACE研发工作室配套开发板

 购买地址:ace-studio.taobao.com

④仿真器:smartRF04eb下载器


  版权声明

1)作者:ACE研发工作室

2)声明:版权所有,转载请注明出处。

3)zigbee开发板套件购买地址:ace-studio.taobao.com

 

3.实验相关电路图

 

 

发光二极管是属于二极管的一种,具有二级管单向导电特性,即只有在正向电压(二极管的正极接正,负极接负)下才能导通发光。P1.0引脚接发光二极管(D1)的负极,所以P1.0引脚输出低电平

D1亮,P1.0引脚输出高电平D1熄灭,D2,D3同理。

 

注:D3灯的控制脚复用到了仿真器,而仿真器用到了锁存器,所以要使得D3亮,必须取下仿真器。

4.实验相关寄存器

CC2530的T1定时器(16位)需要配置三个寄存器T1CTL、T1STAT、IRCON。如下表所示:

寄存器

作用

描述

 

 

T1CTL(0xE4)

 

 

 

 

 

T1CTL (Bit 3:2) 分频器划分值,如下:

00: 标记频率/1

01: 标记频率/8

10: 标记频率/32

 

T1CTL(0xE4)

定时器 1 的控制和状态

 

 

 

 

 

 

 

 

11: 标记频率/128

T1CTL (Bit 1:0) 选择定时器 1 模式

00: 暂停运行。

01: 自由运行,从 0x0000 到 0xFFFF 反复计数。

10: 模,从 0x0000 到 T1CC0 反复计数。

11: 正计数/倒计数,从 0x0000 到 T1CC0 反复计数并

且从 T1CC0 倒计数到 0x0000。

 

 

 

T1STAT(0xAF)

 

 

 

定时器 1 状态

Bit5: 定时器 计数器溢出中断标志

Bit4: 定时器 1 通道 4 中断标志

Bit3: 定时器 1 通道 3 中断标志

Bit2: 定时器 1 通道 2 中断标志

Bit1: 定时器 1 通道 1 中断标志

Bit0: 定时器 1 通道 0 中断标志

IRCON(0xC0)

中断标志 4

Bit1: 定时器 1 中断标志。当定时器 1 中断发生

时设为 1

并且当 CPU 向量指向中断服务例程时清除。

0: 无中断未决

1: 中断未决

按照表格寄存器的内容,对

Led1

和 T1 进行配置。

Led1 配置如下:

P1SEL

&=~0x0 1; //

P1.0 为

通用IO 口

P1DIR

|= 0x01;

//配置

P1.0

为输出

T1  配

置 如下:

T1CTL

= 0x0d;

//128 分 频 , 自动重

装0x0000

-0xFFF F

 

 

5.源码分析

1)、请打开工程,初级教程\6、CC2530 查询方式使用定时器\ace-zigbee

\ace-zigbee.eww,如果打不开,请参考\学习例程以及开发环境安装\2.开发环境搭建.pdf,安装IAR开   发环境。

 

2)、主代码 main.c 如下:

/**************************************/

/*描述:通过定时器 T1 查询方式控制 LED1 周期性闪烁

**************************************/

 

#include <ioCC2530.h>

 

#define uint unsigned int

#define uchar unsigned char

 

//定义控制 LED 灯的端口

#define LED1 P1_0 //定义 LED1 为 P10 口控制

 

//函数声明

void Delayms(uint xms); //延时函数void InitLed(void); //初始化 P1 

void InitT1(); //初始化定时器 T1

 

/****************************

//延时函数

*****************************/

void Delayms(uint xms) //i=xms 即延时 i 毫秒

{

uint i,j; for(i=xms;i>0;i--)

for(j=587;j>0;j--);

}

 

/****************************

//初始化程序

*****************************/

void InitLed(void)

{

P1DIR |= 0x03; //P1_0 定义为输出

LED1 = 1; //LED1 灯初始化熄灭

 

}

//定时器初始化

//定时器的时间为((1/(16000000/128)*65535)=0.52428 秒

void InitT1() //系统不配置工作时钟时默认是 2 分频,即 16MHz

 

{

T1CTL = 0x0d; //128 分频,自动重装 0X0000-0XFFFF

T1STAT= 0x21; //通道 0, 中断有效

}

 

/***************************

//主函数

***************************/

void main(void)

{

uchar count;

InitLed(); //调用初始化函数

InitT1(); while(1)

{

if(IRCON>0)//定时器时间((1/(16000000/128)*65535)=0.52428 秒

{

IRCON=0;

if(++count>=1) //1s 周期性闪烁

{

count=0;

LED1 = !LED1; //LED1 闪烁

}

}

}

}

 

6.实验步骤

1)、打开代码工程,\初级教程\6、CC2530 查询方式使用定时器\ace-zigbee\ace-zigbee.eww,如果 IAR 没有很安装,请按。\开发环境安装\开发环境搭建.pdf 去安装。

2)、通过仿真器把开发板接到电脑上。

3)、编绎下载。

程序已下载完成,可以运行:

 

 

4).现象。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页