基于ZigBee的智能家居设计与实现—CC2530开发
⽬录
背景
硬件选择:安联德ZigBee开发板。
下载器:SmartRF04EBR
环境搭建
IAR安装破解
双击打开。然后不断的next,next,I accept …… 然后停⼀下
管理员⾝份打开IAR 。
点击Generate复制License和 Licensekey到IAR安装窗⼝中。
SmartRF04EBR驱动安装
CC2530 I/O⼝操作
I/O⼝简介
CC2530具有21个数字I/O⼝引脚,可以配置为通⽤I/O⼝或者外部设备I/O。21个引脚都可以作为外部中断源的输⼊⼝。I/O⼝分为3组 P0 0-7 P1 0-7 P2 0-5
寄存器介绍
寄存器功能
PERCFG外设控制:0、1:设置两个串⼝的位置,0:备⽤位置1(P0)1:备⽤位置2(P1)
APCFG模拟I/O配置:每⼀位对应⼀路AD,0:禁⽤;1:使能
P0SEL功能选择:每⼀位对应P0的⼀个I/O⼝,0:⽤作I/O⼝;1:⽤作外设功能
P0DIR I/O⼝⽅向:0:输⼊;1:输出
P0INP端⼝输⼊模式:0:上下拉;1:三态
P0IFG中断状态标志:发⽣中断:1
P0IEN端⼝中断屏蔽:0:中断禁⽤;1:中断使能
流⽔灯
实现⼀个流⽔灯。
#include<ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_3
void DelayMS(uint msec)
{
uint i,j;
for(i=0;i<msec;i++)
for(j=0;j<535;j++);
}
void InitLed(void)
{
P1DIR |=0x08;
}
void main(void)
{
InitLed();
while(1)
{
LED1 =0;
DelayMS(1000);
LED1 =1;
DelayMS(1000);
}
}
CC2530 ADC操作
ADC简介
CC2530⽀持14位模拟数字转换,12位有效数字位,8个各⾃可配置的通道。⽀持分辨率设置7-12位,8个通道,可接受单端信号或差分信号,参考电压选择:内部单端,外部单端,外部差分和AVDD5。测量结束产⽣中断请求,转换结束触发DMA。
寄存器介绍
ADCL ADC转换结果数据低位 2:7数据转换结果的低6位。
ADCH ADC转换结果数据⾼位
ADCCON17:转换结束标志:0:转换未完成;1:转换完成。其余详见技术⼿册
ADCCON37:6:参考电压选择:10:AVDD5引脚电压;5:4:抽取率,00:7位有效数字;3:0:单个通道选择
ADC实验
uint16 ReadGasData(void)
{
uint16 reading =0;
/* Enable channel */
ADCCFG |=0x20;
/* writing to this register starts the extra conversion */
ADCCON3 =0x85;// AVDD5 引脚  00: 64 抽取率(7 位ENOB)  0110: AIN6
/* Wait for the conversion to be done */
while(!(ADCCON1 &0x80));
/* Disable channel after done conversion */
ADCCFG &=(0x40^0xFF);//按位异或。如1010^1111=0101(⼆进制)
/* Read the result */
reading = ADCL;
reading |=(int16)(ADCH <<8);
reading >>=8;
return(reading);
}
CC2530 USART操作
CC2530 USART简介
CC2530⽀持异步串⼝通信。具有两个串⾏通信接⼝。
寄存器介绍
U0CSR USART0控制和状态:7:USART0模式选择:0:SPI;1:USART;6:USART接收器使能:0禁⽤;1:使能。
U0GCR USART0 通⽤控制:4:0:波特率指数值(BAUD_E)
U0BUF USART0接收/传送数据缓存
U0BAUD USART0 波特率控制,波特率⼩数部分的值(BAUD_M)
常⽤波特率设置
波特率BAUD_M BAUD_E
9600598
11520021611 USART实验
void InitUart(void)
{
PERCFG =0x00;//外设控制寄存器 USART 0的IO位置:0为P0⼝位置1
P0SEL =0x0c;//P0_2,P0_3⽤作串⼝(外设功能)
P2DIR &=~0xC0;//P0优先作为UART0
U0CSR |=0x80;//设置为UART⽅式
U0GCR |=11;
U0BAUD |=216;//波特率设为115200
UTX0IF =0;//UART0 TX中断标志初始置位0
U0CSR |=0x40;//允许接收
IEN0 |=0x84;//开总中断允许接收中断
}
void UartSendString(char*Data,int len)
{
uint i;
for(i=0; i<len; i++)
{
U0DBUF =*Data++;
while(UTX0IF ==0);
UTX0IF =0;
}
}
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF =0;// 清中断标志
RxBuf = U0DBUF;
}
void main(void)
{
CLKCONCMD &=~0x40;//设置系统时钟源为32MHZ晶振while(CLKCONSTA &0x40);//等待晶振稳定为32M
CLKCONCMD &=~0x47;//设置系统主时钟频率为32MHZ  InitUart();//调⽤串⼝初始化函数
UartState = UART0_RX;//串⼝0默认处于接收模式
memset(RxData,0, SIZE);
while(1)
{
if(UartState == UART0_RX)//接收状态
{
if(RxBuf !=0)
{
if((RxBuf !='#')&&(count <50))//以'#'为结束符,⼀次最多接收50个字符                    RxData[count++]= RxBuf;
else
{
if(count >=50)//判断数据合法性,防⽌溢出
{
count =0;//计数清0
memset(RxData,0, SIZE);//清空接收缓冲区
}
else
UartState = UART0_TX;//进⼊发送状态
}
RxBuf  =0;
}
}
if(UartState == UART0_TX)//发送状态
{
U0CSR &=~0x40;//禁⽌接收
UartSendString(RxData, count);//发送已记录的字符串。
U0CSR |=0x40;//允许接收
UartState = UART0_RX;//恢复到接收状态
count =0;//计数清0
memset(RxData,0, SIZE);//清空接收缓冲区
}
}
}
ZigBee基本概念
ZigBee⽹络中存在3种⾓⾊。
1.协调器:协调器负责启动⽹络,选择⼀个信道和⼀个⽹络ID,启动(构建)整个⽹络。⽆上层节点。
2.路由器:允许其它设备加⼊⽹络,实现⽹络间的路由,有上层节点,有下层节点。
3.终端设备:实现⾃⾝⼯作,可以加⼊构建好的⽹络。
地址定义:64 MAC 地址 + 16位⽹络地址。
ZStack-2.5.1a协议栈简介
⼯程简介
协议栈⼯作流程
初始化代码
主函数:
int main(void)
{
// Turn off interrupts
osal_int_disable( INTS_ALL );
// Initialization for board related stuff such as LEDs
register for
HAL_BOARD_INIT();
// Make sure supply voltage is high enough to run
zmain_vdd_check();
// Initialize board I/O
InitBoard( OB_COLD );
// Initialze HAL drivers
HalDriverInit();
// Initialize NV System
osal_nv_init(NULL);
// Initialize the MAC
ZMacInit();
/
/ Determine the extended address
zmain_ext_addr();
#if defined ZCL_KEY_ESTABLISH
// Initialize the Certicom certificate information.
zmain_cert_init();
#endif
// Initialize basic NV items
zgInit();
#ifndef NONWK
// Since the AF isn't a task, call it's initialization routine
afInit();
#endif
// Initialize the operating system
osal_init_system();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。