• 实验环境
  1. 硬件:通用节点一个、USB仿真器、PC机;
  2. 软件:IAR Embedded Workbench for MCS-51;
  • cc2530使用方法介绍
  1. 首先我们需要了解CC2530 的IO口相关寄存器:

P0和P1 寄存器

P0SEL和P1SEL寄存器

P0DIR和P1DIR寄存器

以上图表列出了我们需要用到的和P0、P1相关的寄存器,其中P0、P1寄存器为IO数据寄存器,P0SEL、P1SEL为外设功能选择寄存器,P0DIR、P1DIR为IO 输入输出选择寄存器,例程中我们需要对这几个寄存器进行IO配置相关设置和操作。此处如想深入了解请自行参考CC2530 的芯片手册。

  1. Cc2530的工作电压为0.5v到1.8v之间,在本次实验的模块中,有一个调节电压的芯片,目的在于将电压转换成合适目前实验状态的电压。本次实验中,是利用cc2530的串口0进行数据收发通信
  2. 在CC2530中,我们总共有2个可用的串行接口,这些串行接口可被配置为标准串口或者SPI接口。这个例程中我们只使用USART0,并且工作在UART标准串口模式下。由于每种设置都有2套可用的IO映射,这里根据我们的硬件设置,我们应该使用其默认设置,UART0的TX和RX对应于P0_3和P0_2。

三、实验内容

实验一:LED发光二极管实验

此次实验目的为使用代码验证LED发光二极管的发光规律(此次任务:使发光二极管以奇数偶数的规律依次亮起来)。

  1. 实验准备及内容
  1. 熟悉Zigbee硬件模块相关接口;
  2. 使用IAR 开发环境设计程序,利用CC2530 的IO口进行LED发光二极管的亮灭操作;
  1. 实验原理
  1. 硬件接口原理

在CC2530中,我们总共有3个可用的GPIO接口:P0、P1和P2。其中P0和P1的全部8位都有对应的引脚,而P2只有0-4几个引脚可用。

这里我们主要对P0和P1共16个引脚进行操作,每个引脚都连接到一个发光二极管的驱动端,这样通过控制P0和P1的每一位,我们可以控制所有的16个发光二极管的亮灭。

LED灯部分原理图如下:

在这个例程中,我们需要点亮通用节点上的LED灯,上图给出了P0口控制D1~D8灯的原理图,P1口控制另8个灯原理类似。

  1. 软件设计

我们主要看main()函数中的代码,程序首先通过配置CC2530相关控制寄存器P0DIR、P1DIR来设置P0、P1工作于普通GPIO的输出模式。然后点亮所有灯,经过一个长延时后再熄灭所有灯,再经过一个长延时后进入程序主循环。在循环中首先依次将P0的某一位置1(从低到高,其他位为0,每次置位后在进行一个标准延时)。然后对P0所有位清0,接着对P1口执行以上类似操作。P1口操作结束后清0,再回到上面循环对P0口进行操作……

  1. 实验具体步骤
  1. 使用USB 仿真器连接PC 机和通用节点模块,模块电源开关处于中间“OFF”档,使用仿真器给模块供电。
  2. 启动IAR 开发环境,打开实验一 LED发光二极管的实验工程。
  3. 在IAR 开发环境中编译程序、点击下载、调试程序。按“F5”使程序运行。
  4. 观察现象,可以看到发光二极管按照一定规律亮起。
  5. 使用调试界面上的停止按钮使程序停止,观察现象是否停止。
  6. 使用调试界面上的go按钮(等同“F5”),观察现象。
  1. 实验结果及现象

实验二:串口收发数据实验

  1. 实验内容
  1. 熟悉Zigbee硬件模块相关接口;
  2. 使用IAR 开发环境设计程序,利用CC2530 的串口0 进行数据收发通讯;
  1. 实验原理
  1. USB转串口部分原理图

CH340芯片完成了USB转串口的工作,通过USB电缆连接节点和计算机后,CH340芯片会在计算机中虚拟一个串口,这个串口信号对于图中的CH340_TXD和CH340_RXD,通过J2上的跳线帽与CC2530的P0.2和P0.3引脚相连。P0.2和P0.3对应的是USART0在UART模式下的RXT和TXD引脚。

  1. 程序源代码

#include "ioCC2530.h"

#include <string.h>

#define uint unsigned int

#define uchar unsigned char

//定义控制灯的端口

#define led1 P1_0

#define led2 P1_1

void InitIO(void);                          //IO初始化

void InitUart(void);                        //串口初始化

void SendString(char*string,uint legth);    //发送字符串

uchar temp;               // 存放接受的数据

char wch[] = "Welcome to test this program!\n";

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

功能描述: 延时

Count:    延时单位数量

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

void DelayXms(unsigned int Count)

{ unsigned int i;

unsigned int j;

for(i = 0; i < Count; i++)

{for( j=10000; j>0; j--); }

}/*****************************************************************************

功能描述: IO初始化

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

void InitIO(void)

{   SLEEPCMD &= ~0X04;

CLKCONCMD = 0X10;           //32k和32M时钟使用外部晶体,timer分频8M

while(CLKCONSTA!=0X10);     //等待时钟切换

SLEEPCMD = 0X04;

P2DIR = 0x00;              //高两位零   若设则最高优先USART0

P1DIR|= 0X03;              //P1.0 P1.1 LEDs 灯端口配置

P0DIR|= 0X00;              //input

PERCFG = 0x00;              //UART0 默认端口

P1SEL = 0X00;

P0SEL = 0X0c;               //P0<3:2>设置成外围应用

}/*****************************************************************************

功能描述: 串口初始化

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

void InitUart(void)

{   U0CSR |= 0x80;             //UART方式

U0GCR = 11;                //baud_e 波特率设为115200

U0BAUD |= 216;             //baud_m = BaudRate*2^(28-buad_e)/32M-256

//BaudRate=(256+baud_m)/2^(28-buad_e)x32MHz

UTX0IF = 1;                 //接收中断标记

U0CSR |= 0X40;              //允许接收

URX0IE = 1;                 //接收中断使能

EA =1;                     //总中断开关打开

}/*****************************************************************************

功能描述: 串口发送字符串

string:   字符串指针

lenth:   长度

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

void SendString(char*string,uint lenth)

{   uint j;

for (j=0; j<lenth; j++)

{   U0DBUF = *string++;         //将要发送字符送入U0DBUF发送寄存器

while(UTX0IF == 0);         //等待发送完成

UTX0IF = 0;                 //清0标志位

}}/***********************************************************************

功能描述:    主函数

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

void main(void)

{  InitIO();

InitUart();

DelayXms(10);

led1=1;                         //点亮2个LED灯

led2=1;

SendString(wch,sizeof(wch));

while(1)

{ ; //进入无限循环等待中断函数被处触发}

}/**************************************************************************

功能描述: 串口中断函数

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

#pragma vector = URX0_VECTOR

__interrupt void UART0_ISR(void)

{   URX0IF = 0;                 //清中断标志

temp = U0DBUF;

U0DBUF = temp;                         //将收到的字符发送回去

while(UTX0IF == 0);                    //等待发送

UTX0IF = 0;                            //清发送标志

led1 = ~led1;                          //指示中断活动

led2 = ~led2;

}

程序中主要有这几个函数:

DelayXms(unsigned int Count):延时函数。

InitIO():完成IO初始化功作。首先将系统切换到32Hz主晶振下工作并配置芯片内部频率,因为串口工作波特率较高,芯片对串口信息的处理要求其工作频率也较高,所以需要在32M频率下工作。然后配置相关IO寄存器,包括2个LED灯的控制IO口为输出模式,2个串口收发信号引脚为特殊功能应用模式。

InitUart():完成串口的初始化工作。其中对串口寄存器进行设置,最重要的是串口的波特率设置。

  1. 通过配置CC2530 处理器的串口相关控制寄存器来设置串口0 的工作模式为串口模式,波特率为115200,使用中断方式接受串口数据并向串口输出。
  1. 实验过程及其结果

1)打开文件

2)修改调试程序

3)查看结果

实验三:按键控制实验

  1. 实验内容
  1. 熟悉Zigbee硬件模块相关接口;
  2. 使用IAR 开发环境设计程序,利用CC2530 的GPIO读取按键值并相应对进行LED发光二极管的亮灭操作;
  1. 实验原理
  1. 硬件接口原理

如图,UserINT信号连接的是芯片的P2.0引脚,在没有按下按键时,经过电阻R9的上拉作用,UserINT信号是高电平,而当按键按下时,UserINT信号直接与地相连,处于低电平。在芯片内通过检测P2.0口的输出状态观察按键的状态。电容C4在按键松开时起到对输出信号的缓冲作用,这样可以过滤掉部分干扰信号,使得输出信号较为平滑。

按键部分电路原理图

  1. 软件设计

#include <ioCC2530.h>

#define D_COUNT   50        //标准延时周期计数

#define KEY_INPUT P2_0      //定义按键引脚

/******************************************************************  功能描述: 延时

Count:    延时单位数量

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

void Delay(unsigned int n)

{   unsigned int t,tt;

for(tt=0;tt<n;tt++)

for(t=0;t<1000;t++);}

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

功能描述:    主函数

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

void main( void )

{ unsigned int i;

P0DIR  = 0x00;          //P0口全部为输入

P1DIR  = 0x03;          //P1口低2位输出,其他输入

P1 = 0;

Delay(D_COUNT);Delay(D_COUNT);Delay(D_COUNT);

while(1)

{ if(!KEY_INPUT)        //判断按键是否按下

{ i++;

P1 = i&0x03;          //P1低2位赋值为i的低2位

Delay(100);}        //延时,加长2次判断间隔

Delay(10); }}

  1. 程序的流程图如下

  1. 实验步骤
  1. 使用USB 仿真器连接PC 机和cc2530传感器节点模块。
  2. 在IAR 开发环境中编译程序、调试程序。
  3. 观察现象,可以看到2个发光二极管都没有亮起。
  4. 长按或短按模块中间的“KEY”按键,观察2个发光二极管的状态。
  1. 实验结果

四、实验总结

   本次试验,通过使用通用节点、USB仿真器、PC机、软件(IAR Embedded Workbench for MCS-51)等进行程序设计,并且利用CC2530 的串口0 进行数据收发通讯。需要熟悉Zigbee硬件模块的相关接口,以及整个实验的操作流程,以减少实验中不必要的失误,确保实验正常进行。

嵌入式技术及应用基础实验相关推荐

  1. 物联网-物联网智能设备与嵌入式技术

    智能设备的研究与发展 嵌入式系统(Embedded System)也称作"嵌入式计算机系统(Embedded Computer System)" 它是针对特定的应用,剪裁计算机的软 ...

  2. 计算机硬件实验教程pdf,计算机硬件技术基础实验教程答案(重庆大学)

    计算机硬件技术基础实验教程答案(重庆大学) 计算机硬件技术基础实验教程答案 实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 ...

  3. 大数据技术基础实验十三:Kafka实验——订阅推送示例

    大数据技术基础实验十三:Kafka实验--订阅推送示例 文章目录 大数据技术基础实验十三:Kafka实验--订阅推送示例 一.前言 二.实验目的 三.实验要求 四.实验原理 1.Kafka简介 2.K ...

  4. WLGK-51单片机接口技术基础实验 —LED闪烁灯

    WLGK-51单片机接口技术基础实验--LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld", ...

  5. WLGK-51单片机接口技术基础实验 ——LED闪烁灯

    WLGK-51单片机接口技术基础实验-LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld",这 ...

  6. 数字电路技术可能出现的简答题_电子技术应用实验1(数字电路基础实验)答案公众号...

    朝代:作者: 电子技术应用实验1(数字电路基础实验)答案公众号 更多相关[单选,A2型题,A1/A2型题] 颅骨骨折时出现"熊猫眼"征,主要见于(). [单选,A2型题,A1/A2 ...

  7. Web前端技术基础实验报告三之超链接与多媒体文件应用

    目录 Web前端技术基础实验报告 实验题目:超链接与多媒体文件应用 实验目的:熟悉超链接与多媒体文件的插入的相关标签 实验内容 : 实验过程及结果 Web前端技术基础实验报告 实验题目:超链接与多媒体 ...

  8. 计算机硬件技术基础实验教程实验报告,计算机硬件技术基础实验报告精选.doc...

    计算机硬件技术基础实验报告精选 计算机硬件?技术基础实?验 实验报告 学 校:_____?_____?_____?___ 院 系:_____?_____?_____?___ 学 号:_____?___ ...

  9. 《嵌入式系统原理与接口技术》——嵌入式系统接口应用基础

    本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参考,本书为普通高等教育"十二五"规划教材,电子信 ...

最新文章

  1. mysql binlog恢复错误_mysql通过binlog日志来恢复数据
  2. 数码之下 - 一道选择题讨论采样定理
  3. IPhone之AVAudioRecorder
  4. PHPStorm的命令行配置成为Git bash的
  5. 手把手教你求职进入BAT
  6. 好用的Typecho系统后台模板
  7. 「开源·共创·照亮」TDengine开源两周年暨灯塔计划发布会邀你一起闪耀
  8. 深度揭秘垃圾回收底层,这次让你彻底弄懂它
  9. IT忍者神龟之Java动态代理与CGLib代理
  10. Cisco Packet Tracer安装教程
  11. 《自己动手写操作系统》—— 工作环境搭建
  12. 线性调频信号及仿真[python]
  13. Python实现的爬取百度文
  14. ES6语法及vue复习
  15. 干货分享 | 创业公司绝对不会告诉你他们在用的工具们
  16. P2360 地下城主
  17. Unity 移动键Q的三种用法 For Mac,Windows类同
  18. tar.gz和tar.xz文件
  19. 函数f的上确界/下确界(sup/inf)的通俗理解,及其与最大值/最小值(max/min)的区别
  20. SAP MM 进销存报表与标准报表MB5B

热门文章

  1. 找到数据库中最大数据量的表
  2. javascript编写奇迹mu原版(含服务端)(4)来到勇者大陆
  3. 测试人员绩效考核KPI指标
  4. oracle的3g_ap route路由器设置,TP-Link TL-MR12U 3G路由器AP模式上网设置
  5. jQuery UI Datepicker 选择时分秒
  6. Linux搭建Java部署环境
  7. wsl2中安装QGC
  8. 电脑操作精典秘籍60式【实用】
  9. idea创建SpringBoot工程
  10. RabbitMQ 四种类型发送接收数据方式