1、.1.2第一步:安装第一步:安装IAR 8.10IAR 8.10方法:方法:打开安装文件,选择IAR安装,官方推荐默认安装在系统盘:相关软件安装相关软件安装.3提示要求输入License,由IAR 8.10注册机生成,选项正确后生成License,复制到License#处:.4输入注册码后按提示一步步进行安装,直至完成程序安装。程序安装完成后默认路径为:.5 安装完成软件界面如下:.6第第二二步:步:CC DEBUGGER CC DEBUGGER 驱动安装方法驱动安装方法 我们将网蜂的CC DEBUGGER插进电脑,提示找到新硬件,选择列表安装。.7驱动的路径如下图,前提是已经安装IAR 8.
2、1 0。.8安装完成后,重新拔插仿真器,在设备管理器里找到Chipcon SRF04EB,说明驱动安装完成,如下图所示。.9工程文件的快速建立工程文件的快速建立第一步:第一步:打开IAR软件,新建一个Project-Create New Project,选择默认选项可以了,点击OK。保存在自己希望的路径。.10第二步:第二步:新建文件,输入#include,我们基础实验需要用到的也只有这个头文件。然后保存为.c格式到工程文件路径下。.11第三步:第三步:输入程序然后保存。在左边工程里单击右键-add-刚保存的C文件,添加文件到工程。.12第四步:第四步:在IAR里配置一下几个选项。打开(右点击
3、工程名字)Project-Options,General Options配置如图 General General OptionsOptions参数,参数,单击圆圈所示按钮,先向上返回上一级目录,然后打开Texas Instruments文件夹,选择CC2530F256芯片。.13选择LinkerConfigLinker command file选项。单击LinkerConfigLinkerConfig配置配置所示按钮,导出配置文件,先向上返回上一级目录,然后打开Texas Instruments文件夹,选择lnk51ew_cc2530F256.xcl。.14第五步:第五步:然后在Debugge
4、r选项的Driver里选择Texas Instruments(使用编程器仿真),下面选择io8051.ddf文件,如图所示。至此,基本配置已经完成。.15第六步:第六步:Project-Make 编译后显示0错误和0警告。将网蜂CC DEBUGGER 和开发板连接好,然后点击:Project-Download and Debug(下载与仿真)。快捷键所示:.16程序在下载中:.17下载完成,进入仿真调试界面,常用按钮如所示。点击GO(全速运行),程序执行。使 CC DEBUGGER可以直接在IAR中下载程序并调试。结束后程序仍然保留在芯片flash内,相当于烧写工具。.18实验实验一:一:点亮
5、点亮LED1LED1GEC电池板的LED部分原理图:.19CC2530的IO口配置我们需要配置三个寄存器P1SEL P1SEL、P1DIR P1DIR、P1INPP1INP。IOIO口口功能如下表所示:*P1SEL P1SEL(0:普通IO口 1:第二功能)*P1DIR P1DIR(0:输入 1:输出 )*P1INP P1INP(0:上拉/下拉 1:三态 ).20按照表格寄存器内容,我们对LED1,也就是P1_0口进行配置,当P1_0输出低电平时LED1被点亮。所以配置如下:P1SELP1SEL&=0 x01;/作为普通IO口P1DIRP1DIR|=0 x01;/P1_0定义为输出P1INPP
6、1INP&=0X01;/打开上拉 .21由于CC2530寄存器初始化时默认是:P1SELP1SEL =0 x00;P1DIRP1DIR=0 x00;P1INP P1INP=0X00;所以IO口初始化我们可以简化初始化指令:P1DIR P1DIR|=0 x01;/P1_0定义为输出.22/*程序描述:点亮LED1*/#include#include#define LED1 P1_0 /#define LED1 P1_0 /定义定义P10P10口为口为LED1LED1控制端控制端void IO_Init(void)void IO_Init(void)P1DIR|=0 x01;/P1_0 P1DIR
7、|=0 x01;/P1_0定义为输出定义为输出 void main(void)void main(void)IO_Init();/IO_Init();/调用初始化程序调用初始化程序LED1=1;/LED1=1;/点亮点亮LED1LED1while(1);while(1);.23实验二:按键实验要求要求:依次按下按键:依次按下按键S3S3控制控制LED1LED1的亮和灭的亮和灭GEC电池底板的KEY和LED原理图:.24LED1初始化:P1SEL&=0 x01;/作为普通IO口P1DIR|=0 x01;/P1_0定义为输出P1INP&=0X01;/打开上拉 按键S3初始化:P1SEL&=0X04
8、;/设置P1.2为普通IO口 P1DIR&=0X04;/按键在P1.2口,设置为输入模式 P1INP&=0 x04;/打开P1.2上拉电阻,不影响.25由于CC2530寄存器初始化时默认是:P1SEL=0 x00;P1DIR=0 x00;P1INP=0X00;所以IO口初始化我们可以简化初始化指令:P1DIR|=0 x01;/P1_0定义为输出P1DIR&=0X04;/按键在P1.2 口,设置为输入模式.26/*程序描述:依次按下按键S3控制LED1的亮和灭*/#include#define uint unsigned int#define uchar unsigned char/定义控制定义
9、控制LED灯的端口灯的端口#define LED1 P1_0 /LED1为为P1.0口控制口控制#define KEY3 P1_2 /KEY1为为P1.2口控制口控制/函数声明函数声明void Delayms(uint);/延时函数延时函数void InitLed(void);/初始化初始化LED1void KeyInit();/按键初始化按键初始化uchar KeyScan();/按键扫描程序按键扫描程序.27/*延时函数延时函数*/void Delayms(uint xms)/i=xms 即延时即延时i毫秒毫秒 uint I,j;for(i=xms;i0;i-)for(j=587;j0;j
10、-);/*LED初始化函数初始化函数*/void InitLed(void)P1DIR|=0 x01;/P1_0定义为输出定义为输出 LED1=1;/LED1灯熄灭灯熄灭 .28/*按键初始化函数按键初始化函数*/void InitKey()P1SEL&=0X04;/设置设置P1.2为普通为普通IO口口 P1DIR&=0X04;/按键在按键在P1.2口,设置为输入模式口,设置为输入模式 P1INP&=0 x04;/打开打开P1.2上拉电阻上拉电阻,不影响不影响/*按键检测函数按键检测函数*/uchar KeyScan(void)if(KEY3=0)Delayms(10);if(KEY3=0)w
11、hile(!KEY3);/松手检测松手检测 return 1;/有按键按下有按键按下 return 0;/无按键按下无按键按下.29/*主函数主函数*/void main(void)InitLed();/调用初始化函数调用初始化函数InitKey();while(1)if(KeyScan()/按键改变按键改变LED状态状态 LED1=LED1;.30实验三:外部中断要求要求:依次按下按键:依次按下按键S3S3控制控制LED1LED1的亮和灭的亮和灭,通过中断通过中断方式。方式。GEC的KEY和LED部分原理图,如下图所示:.31CC2530的外部中断我们需要配置三个寄存器P0IEN P0IEN
12、、PICTL PICTL、P0IFGP0IFG、IEN1IEN1。各寄存器功能如下表所示:按照表格寄存器内容,我们对LED1和按键S1,也就是P1.0和P1.2口进行配置,当P1.2输出低电平时LED1被点亮,S3按下时P1.2产生外部中断从而控制LED1的亮灭。所以配置如下:.32LED1简化初始化:P1DIR|=0 x01;/P1_0定义为输出外部中断初始化:P0IEN|=0X10;/P04 设置为中断方式 PICTL|=0X01;/下降沿触发 IEN1|=0X20;/允许P0口中断;P0IFG =0 x00;/初始化中断标志位.33/*程序描述:按键程序描述:按键S3S3外部中断方式改变
13、外部中断方式改变LED1LED1状态状态*/#include#include#define uint unsigned int#define uint unsigned int#define uchar unsigned char#define uchar unsigned char/定义控制定义控制LEDLED灯的端口灯的端口#define LED1 P1_0#define LED1 P1_0/定义定义LED1LED1为为P1.0P1.0口控制口控制#define KEY3 P1_2 /#define KEY3 P1_2 /中断口中断口/函数声明函数声明void Delayms(uint);
14、void Delayms(uint);/延时函数延时函数void InitLed(void);void InitLed(void);/初始化初始化P1P1口口void KeyInit();/void KeyInit();/按键初始化按键初始化uchar KeyValue=0;uchar KeyValue=0;.34/*/延时函数延时函数*/void Delayms(uint xms)/i=xms void Delayms(uint xms)/i=xms 即延时即延时i i毫秒毫秒 uint i,j;uint i,j;for(i=xms;i0;i-)for(i=xms;i0;i-)for(j=5
15、87;j0;j-);for(j=587;j0;j-);/*LEDLED初始化程序初始化程序*/void InitLed(void)void InitLed(void)P1DIR|=0 x01;/P1_0P1DIR|=0 x01;/P1_0、P1_1P1_1定义为输出定义为输出 LED1=1;/LED1 LED1=1;/LED1灯熄灭灯熄灭 .35/*KEYKEY初始化程序初始化程序-外部中断方式外部中断方式*/void InitKey()void InitKey()P1IEN|=0X04;/P1.2 P1IEN|=0X04;/P1.2 设置为中断方式设置为中断方式 PICTL|=0X02;/P
16、ICTL|=0X02;/下降沿触发下降沿触发 IEN2|=0X10;/IEN2|=0X10;/允许允许P1P1口中断口中断;P1IFG&=0 x04;/P1IFG&=0 x04;/初始化中断标志位初始化中断标志位 EA=1;EA=1;.36/*中断处理函数中断处理函数 */#pragma vector=P1INT_VECTOR /#pragma vector=P1INT_VECTOR /格式:格式:#pragma vector=#pragma vector=中中断向断向/量,紧接着是中断处理程序量,紧接着是中断处理程序 _interrupt void P1_ISR(void)_interrup
17、t void P1_ISR(void)Delayms(10);/Delayms(10);/去除抖动去除抖动 if(KEY3=0)if(KEY3=0)LED1=LED1;/LED1=LED1;/改变改变LED1LED1状态状态 P1IFG&=0 x04;/P1IFG&=0 x04;/清中断标志清中断标志 P1IF=0;/P1IF=0;/清中断标志清中断标志 while(KEY3);while(KEY3);.37/*主函数主函数*/void main(void)void main(void)InitLed();InitLed();/调用初始化函数调用初始化函数InitKey();InitKey();while(1)while(1)