点对点通信

  • 内容简介
    • 代码分析
      • 全部代码
        • 全部头文件

内容简介

申明:下面用到的方法为basicrf封装好的,在网上下载好之后,之间include导入即可
通过ZIGBBE自组网,将俩个ZIGBBE盒进行连接,下面简称A和B
通信:A将采集到的数据通过无线发送给B,B接收后在发送给PC端模拟串口软件

代码分析

采集光照数据,将采集到的模拟量转成数字量,然后在解析数据量,转成可视化光照数据

void hal_adc_Init1(void)
{APCFG  |=1;   P0SEL  |= (1 << (0));    P0DIR  &= ~(1 << (0));   }
uint16 get_adc1(void)
{uint32 value;hal_adc_Init1(); // ADC初始化ADCIF = 0;   //清ADC 中断标志ADCCON3 = (0x80 | 0x10 | 0x00); //采用基准电压AVDD5:3.3V,通道0,启动A/D转化while ( !ADCIF ){;  //等待A/D转化结束}value = ADCH;value = value<< 8;value |= ADCL;// A/D值转化成电压值// 0 表示 0V ,32 768 表示 3.3V// 电压值 = (value*3.3)/32768 (V)value = (value * 330);value = value >> 15;   // 除以32 768// 返回分辨率为0.01V的电压值return (uint16)value;
}
void Get_val()
{uint16 sensor_val;sensor_val=get_adc1();s[0]=sensor_val/100+'0';s[1]=sensor_val/10%10+'0';s[2]=sensor_val%10+'0';s[3]=' ';}

人体红外串口器是一个已经封装好了的,在板子上为一个引脚采集数据,如果检测到有人返回1,无人返回0

#define DATA_PIN P0_4        //定义P0_4口为传感器的输入端
int Judge(){if(DATA_PIN == 1){return 1;}       return 0;}

此方法为发送数据通过无线方法
第一个参数为发送地址
第二个参数为发送数据
第三个为发送数据长度

  basicRfSendPacket(SEND_ADDR,pdata,16);

此方法为判断是否接收到新的数据

basicRfPacketIsReady()

此方法为接收来自A的数据

   basicRfReceive(rxbufdat,128,NULL);

此方法为将数据发送给串口

   halUartWrite(rxbufdat,20);

全部代码

#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h"
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>/*****点对点通讯地址设置******/
#define RF_CHANNEL                17         // 频道 11~26
#define PAN_ID                    0x1826     //网络id //#define MY_ADDR                   0x2222     //本机模块地址
//#define SEND_ADDR                 0x1111     //发送地址
#define MY_ADDR                   0x1111     //本机模块地址
#define SEND_ADDR                 0x2222     //发送地址
#define DHT11_DATA_IN   st(P1DIR &= ~(DHT11_DAT_BV);)
#define DHT11_DATA_OUT  st(P1DIR |= DHT11_DAT_BV;)
#define DHT11_DATA  P1_7
#define DHT11_DAT_BV  BV(7)/**************************************************/
static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{basicRfConfig.panId       =   PAN_ID;basicRfConfig.channel     =   RF_CHANNEL;basicRfConfig.myAddr      =   MY_ADDR;basicRfConfig.ackRequest  =   TRUE;while(basicRfInit(&basicRfConfig) == FAILED);basicRfReceiveOn();
}#define D3 P1_0
#define D4 P1_5
#define D5 P1_3
#define D6 P1_4
#define DATA_PIN P0_4        //定义P0_4口为传感器的输入端
uint8 buff[10],rxbuf[10],rxbufdat[16];
char Txdata[1];
char s[6];//定义一个数组的大小为6
char TipsString[10];
void hal_adc_Init1(void)
{APCFG  |=1;   P0SEL  |= (1 << (0));    P0DIR  &= ~(1 << (0));   }
uint16 get_adc1(void)
{uint32 value;hal_adc_Init1(); // ADC初始化ADCIF = 0;   //清ADC 中断标志ADCCON3 = (0x80 | 0x10 | 0x00); //采用基准电压AVDD5:3.3V,通道0,启动A/D转化while ( !ADCIF ){;  //等待A/D转化结束}value = ADCH;value = value<< 8;value |= ADCL;// A/D值转化成电压值// 0 表示 0V ,32 768 表示 3.3V// 电压值 = (value*3.3)/32768 (V)value = (value * 330);value = value >> 15;   // 除以32 768// 返回分辨率为0.01V的电压值return (uint16)value;
}
void Get_val()
{uint16 sensor_val;sensor_val=get_adc1();s[0]=sensor_val/100+'0';s[1]=sensor_val/10%10+'0';s[2]=sensor_val%10+'0';s[3]=' ';}
int Judge(){if(DATA_PIN == 1){return 1;}      return 0;}
uint8 pdata[16] = {0};
extern uint8 DHTStr[4];
extern  void Read_DHT11(void);
/********************MAIN************************/
void main(void)
{//波特率115200halBoardInit();//选手不得在此函数内添加代码ConfigRf_Init();//选手不得在此函数内添加代码P1SEL&=~0x39;P1DIR|=0x39;D3=D5=D6=0;D4=0;uint16 count = 0;uint16 sensor_val;int FlagStatus = 0;//需要手动更改,以此来改变节点A的状态while(1){  if(FlagStatus == 1){//接收来自串口的数据/************温湿度数据***************/Read_DHT11();pdata[0] = (char)(DHTStr[0]/10)+0x30;pdata[1] = (char)(DHTStr[1]%10)+0x30;pdata[2] = '-';pdata[3] = (char)(DHTStr[2]/10)+0x30;pdata[4] = (char)(DHTStr[3]%10)+0x30;pdata[5] = ' ';/************光照加人体***************/  sensor_val=get_adc1();pdata[6]=sensor_val/100+'0';pdata[7]=sensor_val/10%10+'0';pdata[8]=sensor_val%10+'0';pdata[9]=' ';pdata[10] = '-';pdata[11] = ' ';if(Judge() == 1){pdata[12] = 'y';pdata[13] = 'e';pdata[14] = 's';pdata[15] = '\n';}else{pdata[12] = 'n';pdata[13] = 'o';pdata[14] = 't';pdata[15] = '\n';}basicRfSendPacket(SEND_ADDR,pdata,16); }else if(FlagStatus == 0){if(basicRfPacketIsReady()){halMcuWaitMs(1000);basicRfReceive(rxbufdat,128,NULL);  halUartWrite(rxbufdat,20);}}   }   halMcuWaitMs(1000);}

全部头文件

|---common
|   |---hal_cc8051.h --- MCU 输入输出宏定义
|   |---hal_defs.h --- 通用定义
|   |---hal_mcu.c --- MCU函数库
|   |---hal_mcu.h --- MCU函数库定义
|   |---hal_clock.c --- 函数库
|   |---hal_clock.h --- MCU函数库定义
|   |---hal_digio.c --- 输入输出中断函数库
|   |---hal_digio.h --- 输入输出中断函数库定义
|   |---hal_adc.c --- ADC函数库
|   |---hal_adc.h --- ADC函数库定义
|   |---hal_int.c --- 中断函数库
|   |---hal_int.h --- 中断函数库定义
|   |---hal_rf.c --- 无线函数库
|   |---hal_rf.h --- 无线函数库定义
|   |---hal_rf_security.c --- 无线加密函数库
|   |---hal_rf_security.h --- 无线加密函数库定义
|   |---hal_rf_util.c --- 无线通用函数库
|   |---hal_rf_util.h --- 无线通用函数库定义
|   |---hal_timer_32k.c --- 32K定时器函数库
|   \---hal_timer_32k.h --- 32K定时器函数库定义
|
|---basicrf
|   |---basic_rf.c --- 基本无线函数库
|   |---basic_rf.h --- 基本无线函数库定义
|   |---basic_rf_security.c --- 基本无线加密函数库
|   \---basic_rf_security.h --- 基本无线加密函数库定义
|
\---utils
|   |---util.c --- 工具函数库
|   \---util.h --- 工具函数库定义
|
\---board
|   |---hal_board .c --- ZIGBEE模块上的资源初始化函数
|   |---hal_board .h --- ZIGBEE模块上的资源初始化函数库的定义
|   |---hal_led.c --- ZIGBEE模块上关于LED的函数
|   |---hal_led.h --- ZIGBEE模块上关于LED的函数库的定义
|
\--- module
|   |--- dma_ad590.c --- 模拟温度传感器函数库
|   |--- dma_ad590.h --- 模拟温度传感器函数库的定义
|   |--- dma_bma.c --- 重力传感器函数库
|   |--- dma_bma.h --- 重力传感器函数库的定义
|   |--- dma_dc.c --- 直流电机函数库
|   |--- dma_dc.h --- 直流电机函数库的定义
|   |--- dma_eeprom.c --- eeprom函数库
|   |--- dma_eeprom.h --- eeprom函数库的定义
|   |--- dma_imc.c --- 人体传感器函数库
|   |--- dma_imc.h --- 人体传感器函数库的定义
|   |--- dma_m4.c --- 光敏/光电传感器函数库
|   |--- dma_m4.h --- 光敏/光电传感器函数库的定义
|   |--- dma_tc72.c --- 数字温度传感器函数库
|   |--- dma_tc72.h --- 数字温度传感器函数库的定义
|   |--- dma_tgs.c --- 酒精传感器函数库
|   |--- dma_tgs.h --- 酒精传感器函数库的定义
|   |--- dma_sht.c --- 温湿度传感器函数库
|   |--- dma_sht.h --- 温湿度传感器函数库的定义
|   |--- dma_itg.c --- 陀螺仪传感器函数库
|   |--- dma_itg.h --- 陀螺仪传感器函数库的定义
|   |--- dma_kr.c --- 可燃气体传感器函数库
|   |--- dma_kr.h --- 可燃气体传感器函数库的定义
|   |--- dma_tgs2602.c --- 气体质量传感器函数库
|   |--- dma_tgs2602.h --- 气体质量传感器函数库的定义

CC2530——点对点通信相关推荐

  1. cc2530点对点通信c语言,CC2530 RF部分使用 ——实现点对点收发

    __interrupt void rf_isr(void) { EA =0; // 接收到一个完整的数据包 if(RFIRQF0&(1<<6)) { rf_receive_isr( ...

  2. 纳维斯托克方程_托克如何检验其网络安全性

    纳维斯托克方程 The global commodities trading firm replicated the NotPetya worm, strengthened it and then u ...

  3. 黑客入侵 应用程序无法启动_被黑客入侵如何启动我的网络安全职业

    黑客入侵 应用程序无法启动 I've always been fascinated by how other Cybersecurity professionals ended up in their ...

  4. Instant Contiki 安装笔记——SDCC和CC2530

    1.前言     [更多contiki和物联网笔记请参考--物联网学习笔记--索引博文]     [如果您使用的Instant Contiki版本为2.7 请忽略此文,Instant Coniti2. ...

  5. ZigBee(CC2530)最小系统PCB设计(AD18开发软件)

    CC2530最小系统的PCB图,可以直接打样的,经过测试无障碍点对点通信距离100m+. 效果图如下: PCB下载地址: https://download.csdn.net/download/m0_3 ...

  6. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)

    目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...

  7. ZigBee TI ZStack CC2530 2.4 IAR软件版本

    (配套源码.软件.开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 一.IAR IAR,全称IAR Systems.公司总部位于北欧的瑞典,在美国.日本.英国.德国.比利时.巴西和中 ...

  8. CC2530中常用的控制寄存器

    CC2530中常用的控制寄存器 https://wenku.baidu.com/view/e14376dc5fbfc77da269b1cc

  9. CC2530的串口实验

    CC2530的串口实验主要有编程主要有一下几个步骤: 一.串口初始化函数(设置时钟频率-->选择用来当做串口的IO-->设置波特率-->发送中断设为0) 二.字符串发送函数(U0DB ...

  10. TI CC2530的BasicRF与Zstack的同与异(重点讲了MAC层)

    TI CC2530的BasicRF与Zstack的同与异 博主我研究了BasicRF与Zstack协议栈的底层,现将其相同点与区别总结如下,以方便大家选择BasicRF还是Zstack进行研究与开发. ...

最新文章

  1. Linux netstat查看网络连接信息
  2. 网络安全:HTTP Host 头攻击相关知识介绍
  3. 使用dubbo后尽量不用要@Reference可能引起冲突
  4. 使用ORACLE生成随机数
  5. arraylist扩容是创建新数组吗 java_Java集合干货——ArrayList源码分析
  6. 吴恩达机器学习总结四:Octave语法
  7. MATLAB实现三边定位
  8. 入门神经网络优化算法(五):一文看懂二阶优化算法Natural Gradient Descent(Fisher Information)
  9. simulink 快捷键 运行_高效使用simulink
  10. 【Python入门教程】第45篇 集合的并集
  11. Markdown 全文检索
  12. eclipse IED的优化(gc.log)
  13. mysql对比时间段百分比_如何使用MySQL计算每日最高价格变化百分比?
  14. LDA的python实现之模型参数训练
  15. mathtype免费版下载及序列号获取地址
  16. MongoDB同步到ES
  17. VPC对等连接(VPC Peering)
  18. HashMap和Hashtable中的hash值是怎么计算的
  19. xilinx 账户申请以及vivado 安装
  20. 【云盒子企业网盘】安全又便捷的桌面书签你想拥有吗?

热门文章

  1. spring security中A granted authority textual representation is required
  2. 1.17英文题面翻译
  3. 新浪短连接(t.cn)在线生成工具
  4. AR和VR,有哪些知名的开源平台
  5. android 手机 用短信发pdf文件,iPhone如何将PDF通过短信邮件发给别人【仅限iPhone6/6s】...
  6. java excel 密码,Java 加密、解密Excel文档
  7. Excel VBA为表格设置“打开文件密码”
  8. Python中Oracle的连接、增删改查
  9. python怎么更新sp2_GitHub - Sp2-Hybrid/Python-100-Days: Python - 100天从新手到大师
  10. 程序猿生存指南-63 贪心姑娘