嵌入式实验 (王明欣 杨睿 雷鸣)

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

1.实验环境

1)硬件:通用节点一个、USB仿真器、PC机;

2)软件:IAR Embedded

Workbench for

MCS-51;

2.实验内容

1)熟悉Zigbee硬件模块相关接口;

2)使用IAR开发环境设计程序,利用CC2530

的IO口进行LED发光二极管的亮灭操作;

3.

实验原理

1)硬件接口原理

2) 软件设计

#include

#define

D_COUNT  50     

//通用延时时间计数

void Delay(unsigned int n)

{

  unsigned

int t,tt;

for(tt=0;tt

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

   

;

}

void main( void )

{

  unsigned

int i;

P0DIR  =0xff;       

//设置P0口全部为输出

P1DIR  =0xff;       

//设置P1口全部为输出

  P0 =0xff;           

//点亮所有灯

  P1 =0xff;

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

  P0 =0;               

//熄灭所有灯

  P1 =0;

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

while(1)

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

  {

    P0 =0x01<<i;       

//P0的第i位为1,其它位为0

    //P1_0 ^=1;     

//P1.0取反

    Delay(D_COUNT);     

//设置IO状态后需要一个延时来让我们看到效果

  }

  P0 = 0;

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

{

    P1 =

0x01<<i;     

//P1的第i位为1,其它位为0

    //P0_0 ^=1;     

//P0.0取反

    Delay(D_COUNT);   

//设置IO状态后需要一个延时来让我们看到效果

 

}

 

P1 = 0;

}

}

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

4. 实验步骤

·使用USB 仿真器连接PC 机和通用节点模块,模块电源开关处于中间“OFF”档,使用仿真器给模块供电。

·启动IAR 开发环境,打开“...\基础传感器实验\1-5基础例程\1-LED”目录下的实验工程。

·在IAR 开发环境中编译程序、点击下载、调试程序。按“F5”使程序运行。

·观察现象,可以看到发光二极管轮流亮起。

·使用调试界面上的停止按钮使程序停止,观察现象是否停止。(现象停止)

·使用调试界面上的go按钮(等同“F5”),观察现象。(二极管轮流亮起)

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


1.实验环境

1)硬件:通用节点或任意传感器节点一个、USB仿真器、USB电缆、PC机;

2)软件:IAR Embedded

Workbench for

MCS-51、串口调试工具;

2.实验内容

1)熟悉Zigbee硬件模块相关接口;

2)使用IAR开发环境设计程序,利用CC2530

的串口0 进行数据收发通讯;

3.实验原理

1) 硬件接口原理

2)软件设计

#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";

void DelayXms(unsigned int Count)

{

unsigned int i;

unsigned int j;

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

{

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

}

}

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;

   

   

   

   

   

   

//总中断开关打开

}

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初始化功作。InitUart():完成串口的初始化工作。

SendString(char*string,uint legth):完成从串口发送字符串。

main():主函数。完成各种初始化后进入循环等待串口接收中断被触法。

UART0_ISR():串口接收中断函数。将收到的字符从串口发回。同时改变LED灯的状态,指示串口收到数据。

此实验的是实验现象:

发送文本框“字符串输入框”中的内容,点击发送按钮。可以看到相同的字符串又被返回

实验三:按键控制实验

1.实验环境

硬件:传感器节点一个、USB仿真器、PC机;

软件:IAR Embedded Workbench for MCS-51;

2.实验内容

熟悉Zigbee硬件模块相关接口;

使用IAR 开发环境设计程序,利用CC2530 的GPIO读取按键值并相应对进行LED发光二极管的亮灭操作;

3.实验原理

1)硬件接口原理

2)软件设计

#include <ioCC2530.h>

#define D_COUNT

50 

    //标准延时周期计数

#define KEY_INPUT P2_0 

  //定义按键引脚

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);

  }

}

程序通过读取P2.0的信息来获得按键的状态,同时对P1上的2个发光二极管进行操作。程序中的长延时是为了使得一定时间内的按下只被识别为一次按下,短延时是为了滤掉可能的干扰信号。

4.实验步骤

1)使用USB 仿真器连接PC

机和任意一个传感器节点模块,模块电源开关处于“ON”档,使用电池给模块供电(如电池电量低插上USB电缆,可一边充电一边使用)。

2)启动IAR 开发环境,打开“...\基础传感器实验\1-5基础例程\3-按键控制”目录下的实验工程。

3)在IAR 开发环境中编译程序、点击下载、调试程序。按“F5”使程序运行。

4)观察现象:可以看到2个发光二极管都没有亮起。

当按下模块中间的“KEY”按键,可观察到发光二极管亮起。按住其中一个按键,在短时间内松手,则认为是短按,LED亮起又熄灭;如果一直按住这个按键不松手,那么超过规定的长时间内,则认为是长按,LED会持续亮一段时间。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容