嵌入式实验:

嵌入式实验:

实验一:LED发光二极管实验

1.实验环境
1)硬件:通用节点一个、USB仿真器、PC机;
2)软件:IAR Embedded Workbench for MCS-51;

2.实验内容
1)熟悉Zigbee硬件模块相关接口;
2)使用IAR 开发环境设计程序,利用CC2530 的IO口进行LED发光二极管的亮灭操作;

3.实验原理
1)硬件接口原理
在CC2530中,我们总共有3个可用的GPIO接口:P0、P1和P2。其中P0和P1的全部8位都有对应的引脚,而P2只有0-4几个引脚可用。这里我们主要对P0和P1共16个引脚进行操作,每个引脚都连接到一个发光二极管的驱动端,这样通过控制P0和P1的每一位,我们可以控制所有的16个发光二极管的亮灭。
首先我们需要了解CC2530 的IO口相关寄存器:

在这里插入图片描述
图5-1-1 P0和P1 寄存器

在这里插入图片描述
图5-1-2 P0SEL和P1SEL寄存器

在这里插入图片描述

					 图5-1-3 P0DIR和P1DIR寄存器

以上图表列出了我们需要用到的和P0、P1相关的寄存器,其中P0、P1寄存器为IO数据寄存器,P0SEL、P1SEL为外设功能选择寄存器,P0DIR、P1DIR为IO 输入输出选择寄存器,例程中我们需要对这几个寄存器进行IO配置相关设置和操作。此处如想深入了解请自行参考CC2530 的芯片手册。
在这里插入图片描述

图5-1-4 LED灯部分原理图
在这个例程中,我们需要点亮通用节点上的LED灯,上图给出了P0口控制D1~D8灯的原理图,P1口控制另8个灯原理类似。
在这里插入图片描述
图5-1-5 SN74LVC245原理框图
我们查看芯片SN74LVC245的器件手册,可以看到其工作原理框图如上所示。由图中描述可知,OEn信号控制所有引脚的输出使能,DIR信号控制信号驱动方向。我们的原理图中OEn接地,所以相应引脚是输出使能的。DIR(图中的T/Rn)是接高电平的,所以根据其原理框图,信号方向是由A到B。也就是A端的信号(P0.0-P0.7)经过SN74LVC245芯片后控制着B端输出信号(用来驱动D1~D8)。
R1和R2是330欧姆的排阻,每个LED灯串接一个,用来限制通过LED灯的电流,使LED灯工作在正常大小电流下,防止烧毁。
2)软件设计
#include <ioCC2530.h>
#define D_COUNT 50 //通用延时时间计数
/***************************************
延时函数,n为延时周期计数
/
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 = 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;
}
}
我们主要看main()函数中的代码,程序首先通过配置CC2530相关控制寄存器P0DIR、P1DIR来设置P0、P1工作于普通GPIO的输出模式。然后点亮所有灯,经过一个长延时后再熄灭所有灯,再经过一个长延时后进入程序主循环。在循环中首先依次将P0的某一位置1(从低到高,其他位为0,每次置位后在进行一个标准延时)。然后对P0所有位清0,接着对P1口执行以上类似操作。P1口操作结束后清0,再回到上面循环

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值