一、目的:

1.1 开发环境安装与硬件连接:

在开始项目之前,我们需要先安装开发环境,如选择合适的IDE(集成开发环境)和编译器。同时,还需要连接硬件设备,如使用串口、GPIO(通用输入/输出)等与硬件设备进行通信。对于硬件设备的连接方法,通常需要参考设备的技术手册或参考手册,了解设备的接口和接线方式。

1.2 项目文件构成:

项目文件通常由多个文件组成,包括源代码文件、配置文件、数据文件等。源代码文件包含程序逻辑和算法的实现,配置文件用于配置项目运行所需的参数和设置,数据文件则用于存储项目所需的数据和资源。为了方便管理和维护,通常会将项目文件组织成文件夹结构,并遵循一定的命名规则。

1.3 GPIO寄存器的配置方法:

GPIO寄存器是嵌入式系统中的重要组成部分,用于控制和处理GPIO引脚。在配置GPIO寄存器时,需要根据所选的微控制器或处理器进行相应的设置。通常需要了解寄存器的地址、位地址、位宽等信息,并根据需要进行配置。此外,还需要了解GPIO引脚的工作模式(如输入、输出、复用等)和输出模式(如推挽输出、开漏输出等),并根据需要进行配置。需要注意的是,不同的微控制器或处理器可能具有不同的寄存器配置方法和参数设置,因此需要根据所选的硬件平台进行相应的配置。

二、项目内容:

具体安装步骤如下:
DY-WSN-Kit V1.0 物联网综合开发实训平台的 ZigBee 模块硬件项目部分,使用的软件开发环境为 IAREmbedded Wordbench for MCS-51(版本 8.10)。IAR 开发的最大优势在于可以直接使用 TI 公司提供的协议栈 Z-Stack 进行开发,我们只需要调用 API 接口函数即可。此外,IAR 还支持 CC Debugger 在线调试程序,这大大提高了开发效率。
(1)解压安装包CD-EW8051-8101,打开解压后的文件夹。找到autorun.exe这个程序,右键以管理员身份运行。这是对原描述的润色修改,使其更清晰明了。


(2)打开后如下图所示,点击install 选项。

(3)点击下一步。如下图所示。

(4)接受协议,点击下一步。如下图所示。

(5)此时要填写一个 license,如下图a所示,我们可以使用注册机来获得。 20 打开 ,如图b所示,选择 IAREmbedded Wordbench for MCS-51 V7.6。点击 Get ID,将图 b中 License number 复制到图a的 License 中。点击下一步。

(6)单击注册机 Generate,如图b中标号 4 所示,将b中的 License key (如标号 5 所示)复制到下图中。


(7)选择典型安装,点击下一步。如下图所示。

(8)选择安装位置,点击下一步。如下图所示。

(9)点击下一步。如下图所示。

(10)开始安装,等待安装完成。如下图所示

(11) 安装完后检查软件是否正确安装,可以直接打开准备好的 LED.eww 文 件,然后选择 project-compile,如果不报错则说明安装正确。

安装好 IAR 开发环境,利用 IAR 创建一个新的工程。
(1) 创建工程
单击菜单 Project->Create New Project,选择“Empty project”,单击 OK,然后会询问保存 project,选择一个合适的目录,然后填入合适的工程名,然后单击 OK。建立完后记得保存。如下图所示。


(2) 选择器件
选择 Project-options,选择好合适的 Device。如下图所示。


(3)在选择代码和内存模型时,你需要考虑代码的类型以及所需的内存空间。代码类型有“Near”和“Banked”可供选择。当不需要Bank支持时,可以选择“Near”。例如,如果你使用的是CC2530F32或CC2530F64,并且只需要访问64K flash空间,而不需要更多的空间,那么可以选择“Near”。

选择“Banked”表示你需要更多的空间来仿真CC253xF128或CC253xF256的整个Flash空间。此时,默认的Near code model中的数据模型为Small,而Banked数据模型为Large。

数据模型决定编译器或连接器如何使用8051的内存来存储变量。如果选择small data model,变量通常存储在DATA内存空间;而使用large data model时,变量存储在XDATA空间。

总的来说,选择合适的代码和内存模型取决于你的具体需求,包括所需的代码类型、内存空间大小以及变量存储的需求。

注意:在Banked code model中,有一些额外的选项需要特别注意。在选择代码库(Code Bank)选项卡时,例如对于CC2530,它使用7个代码库。为了访问整个256K的Flash空间,你需要将“Number”设置为0x07。另外,CC2530有一个FMAP寄存器,用于控制当前哪个代码库映射到8051的地址空间。最好将第三个寄存器设置为0xFF,因为它在当前未使用。总的来说,选择合适的代码库和设置适当的寄存器值,可以确保你的代码能够充分利用所选的Flash空间并正确映射到8051的地址空间。

(4)在配置Linker链接器时,下一步需要配置IDE如何使用Linker来链接程序代码。首先,在左侧选项中选择Linker,然后在右侧选项卡中选择Config页面。在Linker Command file中,需要选中Override default复选框。例如,我们可以选择lnk51ew_CC2530F256_banked.xcl文件。这里,”banked”表示使用Banked code model。具体来说,你需要确保所选的链接器命令文件指定了正确的代码库和寄存器设置,以适应所选的CC2530型号和Flash空间大小。这样,IDE就可以正确地链接程序代码,并充分利用所选的Flash空间。

(5) 配置仿真器调试 在 Debugger 选项中,选择 Texas Instrum为 Driver。如图所示。

(6)在完成编译后,下载项目并仿真时,显示没有错误和警告。确保已将CC DEBUGGER与实训平台通过方口USB线连接好,并已安装好相关驱动。然后,点击”Project-Download and Debug”(下载与仿真)选项。具体操作步骤如下图所示。你需要确保按照这些步骤进行操作,以便成功地下载并仿真项目。

(7) 仿真
下载完成,进入仿真调试界面,常用按钮如图所示。

三、项目过程:

根据项目要求选择合适的芯片档位

项目现象为led灯不断闪烁

四、项目结果与分析:

使用CC2530开发板进行LED闪烁控制。你的代码大体上是没有问题的,但可能存在一些问题,需要你在具体环境下调试。

4.1 程序分析与结果

1.程序功能

该程序的功能是让连接到P0.5引脚的LED灯以固定频率闪烁(即亮灭交替)。

2.主要步骤

  1. 包含头文件

    #include "ioCC2530.h"
    

    引入了ioCC2530.h头文件,这是CC2530单片机的寄存器定义文件。

  2. 定义延时函数

    void Delay(unsigned char n)
    { 
        unsigned char i; 
        unsigned int j; 
        for(i = 0; i < n; i++) 
            for(j = 1; j; j++);
    }
    

    该函数用于产生延迟,通过嵌套循环来实现。n参数控制延迟的长度。

  3. 主函数

    void main(void) 
    { 
        P0SEL &= ~0x20; // 配置P0.5为通用IO口
        P0DIR |= 0x20;  // 设置P0.5为输出
        P0INP &= ~0X20; // 禁用P0.5内部上/下拉
    
        while(1) 
        { 
            P0_5 = 0; // 设置P0.5低电平,LED亮
            Delay(10); 
            P0_5 = 1; // 设置P0.5高电平,LED灭
            Delay(10); 
        } 
    }
    
    • P0SEL &= ~0x20:将P0.5配置为通用IO口。
    • P0DIR |= 0x20:将P0.5配置为输出模式。
    • P0INP &= ~0x20:禁用P0.5的内部上拉或下拉电阻。

    在主循环中,通过设置P0.5引脚的电平来控制LED的亮灭,并通过延时函数来产生闪烁效果。

3. 结果

  • LED闪烁:程序实现了LED灯的闪烁效果,每次循环LED亮10个延时单位,然后灭10个延时单位。由于延时函数的具体执行时间取决于编译器和执行环境,此处“10个延时单位”具体时长不确定,但可以通过调整Delay函数参数来控制闪烁频率。

4. 分析

  • 延时函数精度:使用嵌套循环实现延时,精度较低且不稳定,受编译器优化和循环体代码执行时间影响。对于更精确的延时,可以使用定时器中断实现。
  • 代码可读性和维护性:代码中没有注释说明各步骤的具体作用,特别是寄存器配置部分,建议添加详细注释以提高可读性和可维护性。
  • 电平控制:直接操作寄存器位实现LED控制,简洁明了,但要注意在复杂项目中管理好其他功能引脚的配置。

五、源代码:

/*********************
模块:SUN模块
功能:LED闪烁
**********************/
#include "ioCC2530.h" 
void Delay(unsigned char n)
{ 
     unsigned char i; 
     unsigned int j; 
     for(i = 0; i < n; i++) 
     for(j = 1; j; j++);
} 



void main(void) 
{ 
      P0SEL &=~0x20; //作为普通 IO 口
      P0DIR |= 0x20; //P0_5 定义为输出
      P0INP &=~0X20; //打开上拉
     while(1) 
     { 
     P0_5 = 0; 
     Delay(10); 
     P0_5 = 1; 
     Delay(10); 
     } 
}