LED灯闪烁实验模板_第1页
LED灯闪烁实验模板_第2页
LED灯闪烁实验模板_第3页
LED灯闪烁实验模板_第4页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程名称:Zigbee技术及应用实验项目:LED灯闪烁实验指导教师:专业班级:姓名:学号:成绩:1. 实验目的(1) 学习单片机 IO口配置与驱动,实现指示灯LED1闪烁,频率为 1Hz;(2) 通过模块化编程,养成良好编程习惯。2. 实验设备(1) CC2530核心板一块;(2) 传感器底板一个;(3) 仿真器一个;(4) 方口 USB线一根;3. 实验原理3.1 硬件设计原理本实验的原理如图 1-1 所示。其中, LED1和 LED3都串联一个 R273和 R275限流电阻,然后连接到CC2530的 P1口的 P1_1和 P1_0管脚上。当P1_1为低电平时, LED1上有电流流过, LE

2、D1被点亮,反之熄灭。图 1-1 LED 灯原理图限流电阻 R的计算:图中 R273和R275限流电阻,其计算公式如下:R(UUF)ID(1-1)式中, U为电路供电电压, UF为LED正向压降, ID为LED的工作电流。对于普通 LED发光二极管,其正向压降:黄色为 1.4V 、红色为 1.6V、蓝 / 白色为 2.5V;点亮工作电流为 3-20mA。由图 1-1 可知,电路供电电压为 U=3.3V,LED1选择为黄色发光二极管(压降是 1.4V ),带入 (1-1) 式可得 R的取值范围是 95-633 ,电阻只要在此范围内即可,一般选择了 470的常用电阻。从图 1-1 可以看出,如果要

3、让 LED1发光,需要设置 CC2530对应的 I/O 口将 LED电平拉低。本实验我们只点亮 LED1指示灯,所以只要设置 LED1为低电平即可, 所以只要我们知道 LED1与CC2530哪个管脚相连就可以进行编程。随着这个思路我们在原理图中找到LED1与 CC2530芯片的 P1_1管脚连接,将 P1_1管脚拉低 LED1即被点亮。3.2 程序设计原理(1)主程序分析本实验的程序流程如图 1-2 所示,其重点 IO 口的配置。如果以 1Hz 的频率点亮 LED1闪烁,则需要配置 P1_1为输出,然后在 P1_1输出 1Hz的脉冲信号。开始初始化 I/O 口打开 LED1延时 500ms关闭

4、 LED1延时 500ms图 1-2 程序逻辑流程图(2)IO 端口配置P1 口通过特殊功能寄存器P1SEL(P1 口功能选择寄存器) 和 P1DIR(P1 口方向寄存器) 进行配置,其定义如下。P1SEL(P1 功能选择寄存器, P0SEL同理):位号码名称复位R/W描述7:0SELP1_7:00x00R/WP1.7 到 P0.0 功能选择0:通用 I/O1: 外设功能P1DIR(P1 方向寄存器, P0DIR同理):位号码名称复位R/W描述7:0SELP1_7:00x00R/WP1.7 到 P1.0 的 I/O 方向0: 输入1: 输出特殊功能寄存器的配置方法: 通过位操作实现对特殊功能寄

5、存器的配置。 【例如,如果需要对 P1SEL的第 3位设置为 1,则可用 P1SEL |= 0x08 (二进制表示为: 0000 1000 ) 来实现;如果需要对 P1SEL的第 3位设置为 0,则可用 P1SEL &= 0xF7来实现。】(3)延时子程序设计延时函数原型如下,在16M Hz主时钟频率下,参数time的值表示延时了多少ms。(本例使用的cc2530单片机上电默认使用内部void Delay_ms( unsignedRC振荡器产生系统主时钟,内部主时钟 int time )RC振荡器频率为16M Hz)unsignedinti ,j;for ( i =0;i<tim

6、e ;ifor ( j =0;j<500;+)j+);以上 C语言代码由IAR编译生成的汇编代码如图1-3 所示。结合 C语言的延时函数和从汇编指令我们可以看到寄存器R0/R1保存变量j的值, R2/R3保存参数time 的值, R4/R5保存变量 i 的值。根据 cc2530数据手册和用户指南上对 8051内核的介绍, cc2530内核为兼容标准 8051的单周期内核,大多数单字节指令在一个机器周期内都能执行完成。下面我们结合图 1-3 中的汇编指令详细分析一下延时时间的具体计算方法。此处我们忽略入栈代码段的时间消耗。地址 00006B-00006F:将参与比较计算的寄存器R4/R5清

7、零,然后跳转至 00008A执行。地址 00008A-00008F:R4/R5(变量 i) 与R2/R3(参数 time) 进行减法运算,如果两次都没没有产生借位,即 CY=0。则说明 R4/R5累加到了 time 指定的次数,程序执行到“ JNC 0x0097 ”PC指针将调转到地址 000097跳出延时循环,否则循序向下执行。地址 000091-000095:对 R0/R1清零,将 PC指针跳转到地址 000079执行。地址 00079-000080:清除借位寄存器值后将R0/R1与字面量 500进行减法运算,然后判断借位寄存器 CY的值,如果 CY=0则循序执行地址 000082处指令,

8、否则 PC指针跳转到地址 000071处执行。地址 000071-000078:将 R0/R1中保存的变量做自加 1操作。地址 000082-000089:将 R4/R5中保存的变量做自加 1操作。图 1-3延时函数汇编代码由以上分析可知,地址 000091-000095,000071-000080段是 C语言代码 for ( j =0; j <500; j +) 的汇编指令。每次循环,地址 00091-000095段指令执行 1次,地址 000071-000080段指令执行 500次。查询 80C51汇编指令集得到一次 for ( j =0; j <500; j +) 循环 CC

9、2530需要执行( 6+13*500)个指令周期。在上文中我们查询 CC2530数据手册和用户手册得知 CC2530处理大多数单字节指令只需要一个机器周期。假设所有指令都在一个机器周期内执行完成。 CC2530执行一次 for ( j =0; j <500; j +) 循环最少需要(6+13*500)个机器周期。单片机一个机器周期等于一个时钟周期, CC2530一个时钟周期为 1/16M,所以该次循环最少用时约 400us。假设双字节指令需要的机器周期与标准 8051相同。CC2530执行一次 for ( j =0; j <500; j +) 循环最多需要 6*12+9*500+3

10、*12*500 个机器周期。同理该次循环最多用时约 1400us。由于 TI 没有开源 CC2530对汇编的取址和译码操作。 所以这里我们不能明确 CC2530指令每一个汇编指令的用时。 只能粗略估算。 上述代码中循环的 500次是一个经验值, 也可以借助示波器将 1ms的延时次数计算出来。4. 实验步骤步骤一:编写 LED灯闪烁程序,编译无误。步骤二:将 CC2530模块( CC2530核心板与传感器底板,以后简称CC2530模块)与仿真器连接,仿真器用 USB连接线与电脑进行连接。步骤三: 点击 IAR软件中的 Download and Debug按钮进行编译下载。步骤四: 然后单击调试工

11、具栏中的 GO 按钮。步骤五: 此时 LED1指示灯闪烁,则成功;否则返回步骤一,直至调试成功。5. 实验部分参考代码main函数文件:/* fnmain* brief The main function.* param None* return None*/voidmain( void)/* LED1初始化 */Led1_Init();while( 1)/*开 LED1 */LED1_ON();/*延时约 500ms */Delay_ms( 500 );/*关 LED1 */LED1_OFF();/*延时约 500ms */Delay_ms( 500 );led 头文件:#ifndef_LE

12、D_H#define_LED_H#include <ioCC2530.h>#define LED1 P1_1/*宏定义开 LED1 */#define LED1_ON() LED1 = 0/*宏定义关 LED1 */#define LED1_OFF() LED1 = 1/*函数声明部分*/externvoidLed1_Init( void);externvoidDelay ( unsignedint time );#endif/ _LED_HLed灯控制文件:#include <ioCC2530.h>#include "led.h"/* fnLed1

13、_Init* briefLED1 initialization.* param None* return None*/voidLed1_Init( void)/*配置寄存器将P1_1 配置成普通I/O口 */P1SEL&= 0x02 ;/*配置寄存器将P1_1配置成输出模式*/P1DIR|=0x02 ;LED1=1 ;/* fnDelay_ms* briefThis is a delay function.* param(in)time - Delay time* return None*/voidDelay_ms( unsignedinttime)unsignedinti,j;for

14、( i = 0;i<time;i+)for( j = 0 ;j< 500 ;j+);6. 实验结果LED1指示灯闪烁一次,频率是1Hz。7. 附录:时钟周期知识扩展8051 CPU 简介增强型 8051 内核使用标准的8051 指令集。因为以下原因指令执行比标准的8051 更快:每个指令周期是一个时钟,而标准的8051 每个指令周期是12个时钟。消除了总线状态的浪费。因为一个指令周期与可能的内存存取是一致的,大多数单字节指令在一个时钟周期内执行。除了速度提高之外,增强型 8051 内核还包括结构上的改善:第二个数据指针一个扩展的 18 源中断单元8051 内核的对象代码兼容业界标准的 8051 微控制器。 即对象代码使用 8051 内核上执行的业界标准的 8051 编译器或汇

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论