美文网首页
嵌入式实验

嵌入式实验

作者: 粉色橡皮擦 | 来源:发表于2018-11-21 07:40 被阅读0次

    实验一: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会持续亮一段时间。

    相关文章

      网友评论

          本文标题:嵌入式实验

          本文链接:https://www.haomeiwen.com/subject/nhqqqqtx.html