网站大量收购独家精品文档,联系QQ:2885784924

LED灯闪烁实验讲述.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LED灯闪烁实验讲述

课程名称:Zigbee技术及应用 实验项目: LED灯闪烁实验 指导教师: 专业班级: 姓名: 学号: 成绩: 实验目的 学习单片机IO口配置与驱动,实现指示灯LED1闪烁,频率为1Hz; 通过模块化编程,养成良好编程习惯。 实验设备 CC2530核心板一块; 传感器底板一个; 仿真器一个; 方口USB线一根; 实验原理 硬件设计原理 本实验的原理如图1-1所示。其中,LED1和LED3都串联一个R273和R275限流电阻,然后连接到CC2530的P1口的P1_1和P1_0管脚上。当P1_1为低电平时,LED1上有电流流过,LED1被点亮,反之熄灭。 图 1-1 LED灯原理图 限流电阻R的计算:图中R273和R275限流电阻,其计算公式如下: R=(U-UF)/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可以看出,如果要让LED1发光,需要设置CC2530对应的I/O口将LED电平拉低。本实验我们只点亮LED1指示灯,所以只要设置LED1为低电平即可,所以只要我们知道LED1与CC2530哪个管脚相连就可以进行编程。随着这个思路我们在原理图中找到LED1与CC2530芯片的P1_1管脚连接,将P1_1管脚拉低LED1即被点亮。 程序设计原理 (1)主程序分析 本实验的程序流程如图1-2所示,其重点IO口的配置。如果以1Hz的频率点亮LED1闪烁,则需要配置P1_1为输出,然后在P1_1输出1Hz的脉冲信号。 图1-2 程序逻辑流程图 (2)IO端口配置 P1口通过特殊功能寄存器P1SEL(P1口功能选择寄存器)和P1DIR(P1口方向寄存器)进行配置,其定义如下。 P1SEL(P1功能选择寄存器,P0SEL同理): 位号码名称复位R/W描述7:0SELP1_[7:0]0x00R/WP1.7 到P0.0功能选择 0: 通用I / O 1: 外设功能P1DIR(P1方向寄存器,P0DIR同理): 位号码名称复位R/W描述7:0SELP1_[7:0]0x00R/WP1.7到P1.0的I/O方向 0: 输入 1: 输出特殊功能寄存器的配置方法:通过位操作实现对特殊功能寄存器的配置。【例如,如果需要对P1SEL的第3位设置为1,则可用P1SEL |= 0x08 (二进制表示为:0000 1000 )来实现;如果需要对P1SEL的第3位设置为0,则可用P1SEL = 0xF7来实现。】 (3)延时子程序设计 延时函数原型如下,在16M Hz主时钟频率下,参数time 的值表示延时了多少ms。(本例使用的cc2530单片机上电默认使用内部RC振荡器产生系统主时钟,内部主时钟RC振荡器频率为16M Hz) void Delay_ms(unsigned int time) { unsigned int i, j; for(i=0; itime; i++) for(j=0; j500; 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清零,然后跳转至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:清除

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档