LED灯闪烁实验总结.doc

上传人:scccc 文档编号:13489415 上传时间:2022-01-07 格式:DOC 页数:10 大小:173.50KB
返回 下载 相关 举报
LED灯闪烁实验总结.doc_第1页
第1页 / 共10页
LED灯闪烁实验总结.doc_第2页
第2页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《LED灯闪烁实验总结.doc》由会员分享,可在线阅读,更多相关《LED灯闪烁实验总结.doc(10页珍藏版)》请在三一文库上搜索。

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

2、P1_1 和 P1_0 管脚上。当 P1_1 为低电平时,LED1 上有电流流过,LED1 被点亮,反之 熄灭。 33V LED1 T 片 _ _ _ gS P11 LED3 - - 4T0R 图 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 可知,电路供电电压

3、为 U=3.3V,LED1 选择为黄色发光二极管(压降是 1.4V),带入(1-1) 式可得 R 的取值范围是 95-633Q,电阻只要在此范围内即可,一般选择了 470Q的常用电阻。 从图 1-1 可以看出,如果要让 LED1 发光,需要设置 CC253C 对应的 I/O 口将 LED 电平拉低。本实验 我们只点亮 LED1 指示灯,所以只要设置 LED1 为低电平即可,所以只要我们知道 LED1 与 CC2530 哪个 管脚相连就可以进行编程。随着这个思路我们在原理图中找到 LED1 与 CC2530 芯片的 P1_1 管脚连接, 将 P1_1 管脚拉低 LED1 即被点亮。 3.2 程序

4、设计原理 ( 1 )主程序分析 本实验的程序流程如图 1-2 所示,其重点 IO 口的配置。如果以 1Hz 的频率点亮 LED1 闪烁,贝嚅要 配置P1_1 为输出,然后在 P1_1 输出 1Hz 的脉冲信号。开始 图 1-2 程序逻辑流程图 (2) 10 端口配置 P1 口通过特殊功能寄存器 P1SEL ( P1 口功能选择寄存器)和 P1DIR ( P1 口方向寄存器)进行配 置,其定义如下 P1SEL( P1 功能选择寄存器,P0SEL 同理): 位号码 名称 复位 R/W 描述 7:0 SELP1_7:0 0 x00 R/W P1.7 到 P0.0 功能选择 0: 通用 1 / 0 1

5、:外设功能 P1DIR( P1 方向寄存器,P0DIR 同理): 位号码 名称 复位 R/W 描述 7:0 SELP1_7:0 0 x00 R/W P1.7 到 P1.0 的 I/O 方向 0:输入 1:输出 特殊功能寄存器的配置方法:通过位操作实现对特殊功能寄存器的配置。【例如,如果需要对 P1SEL 的第 3 位设置为 1,则可用 P1SEL |= 0 x08 (二进制表示为:0000 1000 来实现;如果需要对 P1SEL 的第 3 位设置为 0,则可用 P1SEL &= 0 xF7 来实现。】 (3)延时子程序设计 延时函数原型如下,在 16M Hz 主时钟频率下,参数 time 的

6、值表示延时了多少 ms。(本例使用的 cc253(单片机上电默认使用内部 RC 振荡器产生系统主时钟,内部主时钟 RC 振荡器频率为 16M Hz) void Delay_m$ un sig nedint time) unsigned int i, j; for(i=0; itime; i+) for(j= 0; j50Q j+); 以上 C 语言代码由 IAR 编译生成的汇编代码如图 1-3 所示。 结合 C 语言的延时函数和从汇编指令我们可以看到寄存器 R0/R1 保存变量 j 的值,R2/R3 保存参数 time 的值,R4/R5 保存变量啲值。 根据 cc253(数据手册和用户指南上对

7、 8051 内核的介绍,cc253(内核为兼容标准 8051 的单周期内核, 大多数单字节指令在一个机器周期内都能执行完成。 下面我们结合图 1-3 中的汇编指令详细分析一下延时时间的具体计算方法。此处我们忽略入栈代码 段的时间消耗。 地址 00006B-00006F 将参与比较计算的寄存器 R4/R5 清零,然后跳转至 00008A 执行。 地址 00008A-00008F R4/R5(变量 i)与 R2/R3(参数 time)进行减法运算,如果两次都没没有产生借位, 即 CY=0。则说明 R4/R5 累加到了 time 指定的次数,程序执行到“ JNC 0 x0097 PC 指针将调转到地

8、址 00009 拠出延时循环,否则循序向下执行。 地址 000091-000095 对 R0/R1 清零,将 PC 指针跳转到地址 000079 执行 地址 00079-000080 清除借位寄存器值后将 R0/R1 与字面量 500 进行减法运算,然后判断借位寄存 器CY 的值,如果 CY=0 则循序执行地址 000082 处指令,否则 PC 指针跳转到地址 00007 处执行 地址 000071-000078 将 R0/R1 中保存的变量做自加 1 操作。 地址 000082-000089 将 R4/R5 中保存的变量做自加 1 操作。 图 1-3 延时函数汇编代码 由以上分析可知, 地址

9、 000091-000095 000071-00008 段是 C 语言代码 for(j=0; j50Q j+)的汇编 指令。每次循环,地址 00091-00009 段指令执行 1 次,地址 000071-00008 段指令执行 500 次。查询 80C51 汇编指令集得到一次 for(j=0; j50Q j+)循环 CC253C 需要执行(6+13*500)个指令周期。 在上文中我们查询 CC253C 数据手册和用户手册得知 CC2530 处理大多数单字节指令只需要一个机Disasserrnly X Register 农to -ocoCodc 节 f OT(i = 0- it time; i+

10、) I) )ela7_n5 UJUUbP 7D OU OD006 80 19 ftT( (7 - 0 ; 000071 ES 0D0C7 24 01 000074 F0 000075 E9 0JQQ734 i or(j- 0; OOOC79F4 DD007B E U0U07叭 01 000090 40 EF 11017 Rb.JFUxOU SJMP 3xOOSA 3&oa:卄+); MOV A PO 3A - OxUC -(J U -1 - 0 2 - D 3 - 0 4 & -5 D 0 1- 7 0 3B - 0 x00 -BR0 0 -BRI D BR2 = U -ER3 = 0 -ER

11、4 = 0 CRC - 0 - 0 1- ER7 = 0 二IPSE = nxnr 003082 EC ODOO 20Q?0C3F 000036 E 000037 34 a000063 FD :i or (i = 0 C 03008B E 0D0C3 9 0D0D8 E 030083 0300050 O MOV ADD AOxOl MOV R4 , A MOV 葺茁 ADDji,fasoo MOV RS, A time; UM- for(j=Q; 03Q091 78 00 QUO。咒 79 00 030095 80 E2 CLR M07 3U3B MOT SUBB JH匚 j500; j*):

12、 MOV MOV R0 0 x00 Sl.tfOxOQ 030C97 L=dl_ 2 .丄ac 39 LJMP ?BKET_FF na in 000091 12 00 54 LCALledl_Imt . :?rel*v F =0 U =0 L OV =0 l RS0 =0 -RSI =o k FO =u k AC =0 L CY -0 RO -QicOQ R1 =OsrQl R2 =0KF4 R3 =OKOI E4 =0 x00 =OzOO =OKOO R7 =OKOO SF =UxCS GFP = SPX = DPTH -OOOED 7CDAN=OKOO PC =OKOOGE Disasse

13、mUy R4.#OxOO 0JO07S F? omn?q D007A E0 f or(i = 0; i c 器周期。 假设所有指令都在一个机器周期内执行完成。 CC253C 执行一次 for(j = 0; j50Q j+)循环最少需 要(6+13*500)个机器周期。单片机一个机器周期等于一个时钟周期,CC253C 一个时钟周期为 1/16M, 所以该次循环最少用时约 400us 假设双字节指令需要的机器周期与标准 8051 相同。CC2530 执行一次 for(j=0; j50Q j+)循环最 多需要 6*12+9*500+3*12*500 个机器周期。同理该次循环最多用时约 1400us

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

15、示灯闪烁,贝 U 成功;否则返回步骤一,直至调试成功。 5. 实验部分参考代码 main 函数文件: t* * fn mai n * brief The main fun cti on. * param None * return None * void mai n(void) /* LED1 初始化 */ Led1n it (); while(1) /* 开 LED1 */ LED1_ON (); /*延时约 500ms */ Delay_ms (500); /* 关 LED1 */ LED1_OFF (); /*延时约 500ms */ Delay_ms (500); lec 头文件: #

16、ifndef _LED_H #defi ne _LED_H #i nclude #defi ne LED1 P1_1 /*宏定义开 LED1 */ #defi ne LED1_ON() LED1 = 0 /*宏定义关 LED1 */ #defi ne LED1_OFF() LED1 = 1 /*函数声明部分 */ extern void Led1_ In it (void); exter n void Delay(u nsig ned int time); #en dif / _LED_H Led 灯控制文件:#i nclude #i nclude led.h /* * fn Led1nit

17、* brief LED1 in itializati on. * param None * return None */ void Led1ni t (void) /* 配置寄存器将 P1_1 配置成普通 I/O 口 */ P1SEL &=0 x02; /* 配置寄存器将 P1_1 配置成输出模式 */ P1DIR |= 0 x02; LED1 = 1; /* * fn Delay_ms * brief This is a delay fun cti on. * param (in )time - Delay time * return None */ void Delay_ms(u nsig

18、 ned int time) un sig ned int i, j; for (i = 0; itime; i+) for(j= 0; j500; j+); 6. 实验结果 LED1 指示灯闪烁一次,频率是 1Hz 7. 附录: 时钟周期知识扩展 8051 CPU 简介 增强型 8051 内核使用标准的 8051 指令集。因为以下原因指令执行比标准的 每个指令周期是一个时钟,而标准的 8051 每个指令周期是 12 个时钟 8051 更快: 消除了总线状态的浪费 因为一个指令周期与可能的内存存取是一致的,大多数单字节指令在一个时钟周期内执行。除了 速度提高之外,增强型 8051 内核还包括结

19、构上的改善: 第二个数据指针 一个扩展的 18 源中断单元 8051 内核的对象代码兼容业界标准的 8051 微控制器。 即对象代码使用 8051 内核上执行的业 界标准的 8051 编译器或汇编器编译,在功能上是等同的。但是,因为 8051 内核使用了不同于许多 其他 8051 类型的一个指令时序,带有时序循环的已有代码可能需要修改。而且,因为诸如定时器和 串行端口的外设单元不同于其他 8051 内核,包含使用外设单元 SFR 的指令的代码不能正确运行。 闪存预取默认不是使能的, 但是提高了 CPU 高达 33%的性能。 这一设置的代价是功率消耗略有 增加,但是因为这样更快,大多数情况下提高了能源消耗。闪存预取可以在 FCTL 寄存器中使能。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1