1.实验目的:
a.通过实验掌握CC2530芯片GOIP的配置方法
b.掌握Led驱动电路以及开光Led的原理
c.查看cc2530-datasheet.pdf手册查找各个寄存器的意思。
二、实验相关原理图
CC2530核心板:
CC2530有3个端口,分别是P0、P1、P2,我们通过控制IO操作来完成实验。第一个LED灯连接的是P1_0
由于发光二极管是单向导电特性,只有给正向电压才能够导通,也就是P1_0得输出低电平,D1就会发亮,如果P1_0输出3.3V,D1就会灭。
代码中 我们用宏定义来控制P1_0
延迟函数(1ms)中535这个值是通过示波器测量出来的,也可以修改这个值判断波形 得到延时函数延时的时间。
三、配置寄存器
初始化:设置LED灯相应的IO口LED讲P1_0定义为输出口
死循环给LED一个低电平,LED被点亮延时1s后
给LED一个高电平,熄灭LED灯,延时1s
再不断循环。
搜索P1DIR表示的是端口P1的方向寄存器:用来分别控制P1_0~P1_7,这8个IO口是输入还是输出状态。
比如输出0V或3.3V就可以用来开关LED灯的亮和灭,如果是接在继电器上就可以控制继电器的开和关。
操作P1.0还需要掌握相关寄存器的作用和配置方法:
P1SEL:
从芯片手册中查找到P1SEL是P1端口的功能选择也就是P1SEL的第零位到第七位决定着P1端口P1_0到P1_7的功能选择.
当P1SEL相应的位配置为0时,是通用的IO功能;
当P1SEL相应的位配置为1时,是外设功能。
P1SEL &=~0x01;配置P1.0为通用IO口就是P1_0可以输出0V也可以输出3.3V;从而来控制LED灯的亮和灭。
由于CC2530寄存器初始化有默认值:
P1SEL = 0x00;
P1DIR = 0x00;
P1INP = 0x00;
我们可以将命令进行简化,P1DIR I=0x01;就可以把P1_0配置为输出.
四 :相关代码
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;#define LED1 P1_0 //定义P1.0口为LED1控制端
/****************************************************************************
• 名 称: DelayMS()
• 功 能: 以毫秒为单位延时,系统时钟不配置时默认为16M(用示波器测量相当精确)
• 入口参数: msec 延时参数,值越大,延时越久
• 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; i++)
for (j=0; j<535; j++);
}/****************************************************************************
• 名 称: InitLed()
• 功 能: 设置LED灯相应的IO口
• 入口参数: 无
• 出口参数: 无
****************************************************************************/
void InitLed(void)
{
P1DIR |= 0x01; //P1.0定义为输出口
}/****************************************************************************
• 程序入口函数
****************************************************************************/
void main(void)
{
InitLed(); //设置LED灯相应的IO口
while(1) //死循环
{
LED1 = 0; //点亮LED1
DelayMS(1000); //延时1秒
LED1 = 1; //LED1熄灭
DelayMS(1000); //延时1秒
}
}
五、实验现象