实验 CC2530平台上UART组件的TinyOS编程

实验目的:

  1. 加深和巩固学生对于TinyOS编程方法的理解和掌握
  2. 让学生初步掌握CC2530的UART、及其TinyOS编程方法
  3. 学生通过本实验能够初步的了解和掌握TinyOS编程的整个过程
  4. 提高学生的上机和编程过程中处理具体问题的能力

实验要求:

  1. 实验要求自己独立的完成;
  2. 编写和调试过程中出现的问题要做好记录,并事后总结到报告中
  3. 实验程序调试完成后, 用给定的平台进行测试,由老师检查测试结果,并给予相应的成绩
  4. 实验完成后,要上交实验报告。

实验内容:

  1. 开发一个新的应用,通过串口通信实现从PC机通过串口发送指令,控制LED灯的亮灭。以下述顺序完成这个新应用的开发。
    1. 首先实现CC2530通过串口组件与PC机实现通信的功能;
    2. 然后在上述基础上加入LED控制功能。
  2. 在实验报告中分别给出上述两个阶段的源码。

实验代码:

(1)配置文件TestSerialC.nc

configuration TestSerialC

{

}

implementation

{

components TestSerialM as App;

components MainC;

App.Boot -> MainC.Boot;

//LED组件

components LedsC;

App.Leds ->LedsC.Leds;

//串口组件

components HplCC2530UartC;

HplCC2530UartC.CC2530UartControl[0]<- App.UartControl;

App.UartStream -> HplCC2530UartC.UartStream[0];

}

(2)模块文件TestSerialM.nc

module TestSerialM

{

uses {

interface Boot;

interface Leds;

interface UartStream;

interface CC2530UartControl as UartControl;

}

}

implementation

{

uint8_t m_strRecv;

uint8_t m_sendBuf[120];

void ShowMenu()

{

strcpy(m_sendBuf,"串口测试程序,请选择输入:\r\n" );

strcat(m_sendBuf,"[1] Toggle The No.1 Led.\r\n");

strcat(m_sendBuf,"[2] Toggle The No.2 Led.\r\n");

strcat(m_sendBuf,"[3] Toggle The No.3 Led.\r\n");

call UartStream.send(m_sendBuf,strlen(m_sendBuf));

}

void SendMsg(char *str)

{

call UartStream.send(str,strlen(str));

}

task void TaskLightLed()

{

switch(m_strRecv)

{

case '1':

call Leds.led0Toggle();

SendMsg("You Toggle No.1 Led!!\r\n");

break;

case '2':

call Leds.led1Toggle();

SendMsg("You Toggle No.2 Led!!\r\n");

break;

case '3':

call Leds.led2Toggle();

SendMsg("You Toggle No.3 Led!!\r\n");

break;

default:

call Leds.led0Toggle();

SendMsg("\r\nError Key,Toggle No.4 Led\r\n\r\n");

ShowMenu();

break;

}

}

event void Boot.booted()

{

call UartControl.InitUart(UART_BAUDRATE); //初始化串口

call UartControl.setRxInterrupt(0x01); //使能发送中断

call UartControl.setTxInterrupt(0x01); //使能接收中断

ShowMenu();

}

async event void UartStream.receivedByte( uint8_t byte )

{

m_strRecv=byte;

post TaskLightLed();

}

async event void UartStream.receiveDone ( uint8_t* buf, uint16_t len, error_t error )

{ }

async event void UartStream.sendDone ( uint8_t* buf, uint16_t len, error_t error )

{ }

}

(3)makefile 编译文件

COMPONENT=TestSerialC

include $(MAKERULES)

 

实验环境:

  1. 上位机操作系统为WindowsXP,在Cygwin环境下编译

2. 集成开发环境为Notepad++

 

实验报告人:木舟 报告时间:2018.11.16

 

最新文章

  1. eCharts 数据转换json
  2. 【新手总结】在.Net项目中使用Redis作为缓存服务
  3. Unity3D 搭建优雅的UI框架
  4. redis windows
  5. kvm 克隆虚拟机
  6. cms3.0——收获(1)
  7. SPOJ #10657. LOGIC (riddle)
  8. 前端之JavaScript第一天学习(3)-JavaScript输出
  9. Win10 VMware虚拟机无法打开内核设备“\\.\Global\vmx86“
  10. Android查询:模拟键盘鼠标事件(adb shell 实现)
  11. angular依赖注入的理解(转)
  12. 高难度(1)什么是AR
  13. ios运行某些工程时屏幕上下出现黑边的解决办法
  14. 【转】十款让 Web 前端开发人员更轻松的实用工具
  15. CanVas类(绘图类)
  16. sass 与 less 的区别与学习
  17. 2017-4-25/设计缓存(LFU)
  18. day3 自定义指令详解
  19. python之多线程 queue 实践 筛选有效url
  20. MySQL在线删除多余的binlog文件

热门文章

  1. SD卡两种操作模式在项目中应用的比较
  2. Android使用Jenkins自动化构建测试打包apk
  3. http协议与https协议的前世今生
  4. vue组件的通信
  5. redis应用--位图
  6. 启动ssh服务 XSshell 生成秘钥 并注册公钥在Ubuntu linux
  7. 解决wso2 axis2server 跑不起
  8. ecplise包的层次结构选择
  9. linux-docker下安装禅道全部
  10. javascript 飞机大战完整代码