CC1110基础实验说明书.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XWWK-CC1110基础实验
目录
实验1、CC1110-指示灯自动闪烁试验 (1)
一、试验目的 (1)
二、试验设备 (1)
三、试验现象 (4)
四、代码分析 (5)
实验2、CC1110-按键控制指示灯试验 (5)
一、试验目的 (5)
二、试验设备 (6)
三、试验现象 (6)
四、代码分析 (6)
实验3、CC1110-按键控制指示灯闪烁试验 (7)
一、试验目的 (7)
二、试验设备 (7)
三、试验现象 (7)
四、代码分析 (7)
实验4、CC1110-按键中断试验 (8)
一、试验目的 (8)
二、试验设备 (8)
三、试验现象 (9)
四、代码分析 (9)
实验5、CC1110-Timer1试验 (9)
一、试验目的 (9)
二、试验设备 (10)
三、试验现象 (10)
四、代码分析 (10)
实验6、CC1110-Timer2试验 (11)
一、试验目的 (11)
二、试验设备 (11)
三、试验现象 (11)
四、代码分析 (11)
实验6、CC1110-Timer3试验 (13)
一、试验目的 (13)
二、试验设备 (13)
三、试验现象 (13)
四、代码分析 (13)
实验8、CC1110-Timer4试验 (14)
实验9、CC1110-串口发送试验 (14)
一、试验目的 (14)
二、试验设备 (14)
三、试验现象 (15)
四、代码分析 (15)
实验10、CC1110-串口接收试验 (17)
实验11、CC1110-定时器中断试验 (17)
一、试验目的 (17)
二、试验设备 (17)
三、试验现象 (17)
四、代码分析 (18)
实验12、CC1110-睡眠定时器试验 (19)
一、试验目的 (19)
二、试验设备 (19)
三、试验现象 (19)
四、代码分析 (19)
实验13、CC1110-系统唤醒试验 (20)
一、试验目的 (20)
二、试验设备 (20)
三、试验现象 (20)
四、代码分析 (21)
实验14、CC1110-系统睡眠试验 (22)
一、试验目的 (22)
二、试验设备 (22)
三、试验现象 (22)
四、代码分析 (22)
实验15、CC1110-AD采集VDD%3试验 (24)
一、试验目的 (24)
二、试验设备 (25)
三、试验现象 (25)
四、代码分析 (25)
实验16、CC1110-AD采集片内温度传感器试验 (26)
一、试验目的 (26)
二、试验设备 (27)
三、试验现象 (27)
四、代码分析 (27)
实验17、CC1110-看门狗试验 (28)
一、试验目的 (28)
二、试验设备 (28)
三、试验现象 (28)
四、代码分析 (28)
实验18、CC1110-看门狗试验-喂狗 (29)
一、试验目的 (29)
二、试验设备 (29)
三、试验现象 (29)
四、代码分析 (29)
实验1、CC1110-指示灯自动闪烁试验
一、试验目的
通过本试验实现指示灯的自动闪烁,学习单片机IO口编程,实现驱动指示灯。

由上图可知,高电平1时,指示灯熄灭,低电平0时,指示灯亮起。

二、试验设备
1个CC1110模块,1个底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

将模块插入底板上,连接仿真器和模块,将一条MiniUSB线也连接计算机和仿真器。

如果你还没安装仿真器驱动,请参考以下步骤安装(如果您已安装驱动,则该步骤可以省略)。

1、连接仿真器后,系统提示安装驱动,选择C:\Program Files\IAR Systems\Embedded Workbench 5.4\8051\drivers\Texas Instruments,进行默认安装。

2、打开我的电脑-〉设备管理器-〉Cebal controlled devices 就可以看到已经安装了设备
3、如果系统没有提示您安装任何驱动,很可能已经安装了SmartRF04EB,这时,您需要更新驱动程序。

步骤如下:
(1)右键点击SmartRF04EB,更新驱动程序
(2)选择“浏览计算机以查找驱动程序软件”
(3)首先选择浏览C:\Program Files\IAR Systems\Embedded Workbench 5.4\8051\drivers\Texas Instruments,安装驱动,若更新失败,则参考下图进行。

选择“从计算机的设备程序驱动列表中选择”
三、试验现象
打开工程文件,选择XWWK-CC1110Test.eww ,打开工程,然后进行重新编译,如下图:
然后,点击Run,下载并运行程序(后面试验照此法,后略)。

蓝色指示灯快速闪烁。

四、代码分析
//定义控制灯的端口
#define YLED P1_0 //定义LED1为P10口控制,本模块中YLED为蓝灯
#define RLED P1_1 //定义LED2为P11口控制,本模块中RLED为红灯
/***************************
//主函数
***************************/
void main(void)
{
Initial(); //调用初始化函数
YLED = 0; //开LED1,参考上图
RLED = 0; //开LED2,参考上图
while(1)
{
YLED = !YLED; //LED取反
Delay(10000);
}
}
实验2、CC1110-按键控制指示灯试验一、试验目的
通过本试验实现按键控制指示灯,学习单片机IO口编程,实现检测按键、控制指示灯。

由图可知,端口被上拉,按键按下为低电平,抬起为高电平。

二、试验设备
1个CC1110模块,1个底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

三、试验现象
S1控制红灯,S2 控制蓝灯,按键按下,指示灯改变状态。

四、代码分析
#define K1 P0_1 //按键s1为P01口
#define K2 P0_5 //按键s2P05口
/***************************
//主函数
***************************/
void main(void)
{
Initial(); //调用初始化函数
InitKey(); //按键初始化
RLED = 0; //LED1
YLED = 1; //LED2
while(1)
{
Keyvalue = KeyScan();
if(Keyvalue == 1)
{
RLED = !RLED; //S1控制红灯
Keyvalue = 0;
}
if(Keyvalue == 2)
{
YLED = !YLED; //S2控制蓝灯
Keyvalue = 0;
}
}
}
/*****************************************
//读键值
*****************************************/
uchar KeyScan(void) //采用查询方式检测按键是否被按下,后面的实验还可以通过中断检测按键。

实验3、CC1110-按键控制指示灯闪烁试验一、试验目的
通过本试验实现按键控制指示灯连续闪烁,学习单片机IO口的控制与编程,实现通过按键、控制指示灯状态。

按键原理可以参考实验2。

二、试验设备
1个CC1110模块,1个底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

三、试验现象
S1控制红灯闪烁,S2 控制蓝灯闪烁,按键按下,指示灯连续闪烁,否则关闭。

四、代码分析
/***************************
//主函数
***************************/
void main(void)
{
uchar i;
Initial(); //调用初始化函数
InitKey();
RLED = 0; //LED开
YLED = 1; //LED关
while(1)
{
Keyvalue = KeyScan();//键值扫描
if(Keyvalue>0) //按键按下
{
i = Keyvalue-1;
Keyvalue = 0;
if(GlintFlag[i] == 1) //判断闪烁标志
GlintFlag[i]=0;
else
GlintFlag[i] = 1;
};
if(GlintFlag[0]==1)
{
RLED = !RLED;
Delay(4000);
}
else
RLED = 1;
if(GlintFlag[1]==1)
{
YLED = !YLED;
if(GlintFlag[0] == 0)
Delay(4000);
}
else
YLED = 1;
}
}
实验4、CC1110-按键中断试验
一、试验目的
通过本试验实现按键中断,初步理解单片机外部中断的逻辑;学习单片机IO口的中断服务程序编写,实现通过按键、控制指示灯状态。

按键原理可以参考实验2。

二、试验设备
1个CC1110模块,1个底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

S1或者S2 控制红灯、蓝灯的状态闪烁。

任意一个按键按下,两个指示灯均改变当前状态,有时候可能改变两次,是因为按键抖动造成的,实际应用中,需要进行软件去抖处理。

四、代码分析
//首先分析一下按键初始化函数,进行了中断的配置
void InitKey()
{
P0SEL &= ~0X22; //P0.1 and P0.5 用作一般的IO口
P0DIR &= ~0X22; //P0.1 and P0.5 用作输入
P0INP &= ~0X22;//P0的中断,有上拉、下拉
P2INP &= ~0X20; //选择p0口上拉
PICTL |= 0X19; //P0.5 和P0.1中断使能,并选择下降沿有效,即按键抬起
P0IFG &= ~0x22; //清除中断标志
IEN1 |= 0X20; //使能P0口中断
}
#pragma vector = P0INT_VECTOR //中断服务程序
__interrupt void P0_ISR(void)
{
if(P0IFG>0) //检测到按键中断,则置标志位
{
P0IFG = 0; //软件清除
RLED = !RLED;
YLED = !YLED;
}
P0IF = 0;
}
实验5、CC1110-Timer1试验
一、试验目的
通过本试验实现通过Timer1来控制LED的状态,初步理解单片机计数器的工作原理。

1个CC1110模块,1个底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

三、试验现象
上电运行后,每10次中断两个LED闪烁一轮。

四、代码分析
/****************************
//初始化程序
***************************/
void Initial(void)
{
//初始化P1
P1DIR = 0x03; //P10 P11为输出
YLED = 1;
RLED = 1; //灭LED
//用Timer1来做实验,具体寄存器设置,可参考CC1110 Datasheet
T1CTL = 0x3d; //通道0,中断有效,128分频;自动重装模式(0x0000->0xffff);
}
/***************************
//主函数
***************************/
void main()
{
Initial(); //调用初始化函数
YLED = 0; //亮起LED
RLED = 0;
while(1) //等待中断
{
if(IRCON > 0) //检测到Timer1中断
{
IRCON = 0x00; //可不清中断标志,硬件自动完成
if(counter<10)counter++; //10次中断LED闪烁一轮
else
{
counter = 0;
}
if(TempFlag)
TempFlag = 0;
else
TempFlag = 1;
}
if(TempFlag)
{
RLED = !RLED;
YLED = !YLED;
Delay(6000);
}
}
}
实验6、CC1110-Timer2试验
一、试验目的
通过本试验实现通过Timer2的中断函数来控制LED的状态,学习单片机计数器中断的工作原理。

二、试验设备
1个CC1110模块,1个底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

三、试验现象
上电运行后,每3次中断,蓝色LED状态改变一次。

四、代码分析
/****************************
//初始化程序
***************************/
void Initial(void)
{
//初始化P1
P1DIR = 0x03; //P10 P11为输出
YLED = 1;
RLED = 1; //灭LED
//用T2来做实验
TIMER2_INIT();
EA = 1; //开总中断
IEN1 |= 0X04; //开T2中断
TIMER2_ENABLE_INTERRUPT(); //Timer2 中断使能
TIMER2_SET_COUNTER(0x50); // t = T2PR*V AL(T2CTL.TIP)/Timer2的周期.
TIMER2_SET_TICK_PERIOD(0); //设置Timer2的周期
TIMER2_SET_MODE(1); //设置Timer2的工作模式
}
//以上设置,可以参考CC1110 Datasheet 的寄存器设置。

/***************************
//主函数
***************************/
void main()
{
Initial(); //调用初始化函数
YLED = 0; //点这红色LED
RLED = 1;
while(1) //等待中断
{
if(TempFlag) //该标志由中断服务程序设置
{
RLED = RLED;
YLED = !YLED;
TempFlag = 0;
Delay(6000);
}
}
}
//Timer2 中断服务程序
#pragma vector = T2_VECTOR
__interrupt void T2_ISR(void)
{
TIMER2_CLEAR_EXPIRED(); //清T2CTL寄存器标志位
IRCON = 0x00; //可不清中断标志,硬件自动完成
if(counter<3)counter++; //3次中断LED闪烁一轮
else
{
counter = 0; //计数清零
TempFlag = !TempFlag; //改变闪烁标志
}
}
实验6、CC1110-Timer3试验
一、试验目的
通过本试验实现通过Timer3的中断函数来控制LED的状态,每中断200次,更新指示灯的控制标志,学习单片机计数器3中断的工作原理。

二、试验设备
1个CC1110模块,1个底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

三、试验现象
上电运行后,每200次中断,蓝色LED状态改变一次,实现较快速度闪烁。

四、代码分析
/*****************************************
//T3及LED初始化
*****************************************/
void Init_T3_AND_LED(void)
{
P1DIR = 0X03;
YLED = 1;
RLED = 1;
TIMER34_INIT(3); //初始化T3
TIMER34_ENABLE_OVERFLOW_INT(3,1); //开T3中断
EA = 1; //使能总的中断
T3IE = 1;//使能Timer3中断
//T3CTL |= 0XA0; //时钟32分频101
TIMER3_SET_CLOCK_DIVIDE(32); //时钟选择
TIMER3_SET_MODE(0); //自动重装00->0xff
T3CC0 = 0Xf0; //
TIMER3_START(1); //启动
};
/*****************************************
//主函数
*****************************************/
void main(void)
{
Init_T3_AND_LED();
YLED = 1;
while(1); //永远循环,等待中断执行
}
//Timer3中断服务程序
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
{
IRCON = 0x00; //可不清中断标志,硬件自动完成
//RLED = 0; //for test
if(counter<200)counter++; //10次中断LED闪烁一轮
else
{
counter = 0; //计数清零
YLED = !YLED; //改变小灯的状态
}
}
实验8、CC1110-Timer4试验Timer4 与Timer3的操作完全相同,可参考实验6 、Timer3实验进行。

实验9、CC1110-串口发送试验
一、试验目的
通过本试验实现单片机串口发送数据到上位机,学习单片机串口发送的设置和工作原理。

二、试验设备
1个CC1110模块,1个CC1110BB底板,1台仿真器、2条MiniUSB线,1根天线(可不用)。

将模块插入底板上,连接仿真器和模块,并将另一条MiniUSB线也连接计算机。

如果你还没安装虚拟USB串口驱动,请参考以下步骤安装。

1、运行PL2303_Prolific_DriverInstaller_v10518.exe (根据您的操作系统,选择合适的驱动程序,这个文件Win7系统安装);
2、一路默认安装;
3、打开我的电脑-〉设备管理器-〉端口,就可以看到已经安装了串口设备
4、串口配置:串口号COM?,波特率57600,8位数据,无校验,1位停止位。

三、试验现象
上电运行后,每间隔一段时间,发送"XWWK Test Data "到上位机,同时,红色LED状态改变一次。

四、代码分析
/****************************************************************
*函数功能:初始化串口1
*入口参数:无
*返回值:无
*说明:57600-8-n-1
****************************************************************/ void initUARTtest(void)
{
CLKCON &= ~0x40; //晶振
while(!(SLEEP & 0x40)); //等待晶振稳定
CLKCON &= ~0x47; //TICHSPD128分频,CLKSPD不分频SLEEP |= 0x04; //关闭不用的RC振荡器
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
U0CSR |= 0x80; //UART方式
U0GCR |= 11; //baud_e = 11;
U0BAUD |= 34; //波特率设为57600
UTX0IF = 1; 发送标志
}
/**************************************************************** *函数功能:串口发送字符串函数
*入口参数: data:数据
* len :数据长度
*返回值:无
*说明:
****************************************************************/ void UartTX_Send_String(uchar *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0); //发送完毕
UTX0IF = 0;
}
}
/**************************************************************** *函数功能:主函数
*入口参数:无
*返回值:无
*说明:无
****************************************************************/ void main(void)
{
uchar tempstr[]="XWWK Test Data "; //填充数据
//P1 out
P1DIR = 0x03; //P1控制LED
YLED = 1;
RLED = 1; //关LED
initUARTtest();
while(1)
{
RLED = 1;
UartTX_Send_String(tempstr,16); //发送;
Delay(50000);
RLED = 0;
Delay(50000);
Delay(50000);
}
}
实验10、CC1110-串口接收试验Timer4 与Timer3的操作完全相同,可参考实验6 、Timer3实验进行。

实验11、CC1110-定时器中断试验
一、试验目的
通过本试验实现通过定时器4进入中断服务程序,在中断函数中设置标志位,符合条件后,在主程序中执行相应的任务。

二、试验设备
1个CC1110模块,1个CC1110BB底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

将模块插入底板上,连接仿真器和模块。

三、试验现象
上电运行后,每间隔一定时间,两个指示灯快速闪烁。

四、代码分析
/*****************************************
//T4及LED初始化
*****************************************/
void Init_T4_AND_LED(void)
{
P1DIR = 0X03;
YLED = 1;
RLED = 1;
TIMER34_INIT(4); //初始化T4
TIMER34_ENABLE_OVERFLOW_INT(4,1); //开T4中断
EA = 1;
T4IE = 1;
//T4CTL |= 0XA0; //时钟128分频101
TIMER34_SET_CLOCK_DIVIDE(4,128);
TIMER34_SET_MODE(4,0); //自动重装00->0xff T4CC0 = 0Xf0;
TIMER34_START(4,1); //启动
};
/*****************************************
//主函数
*****************************************/
void main(void)
{
Init_T4_AND_LED();
while(1)
{
if(GlintFlag == 1)
{
YLED = !YLED; //改变指示灯的状态
RLED =!RLED;
Delay(2000);
}
};
}
//Timer4 中断服务函数
#pragma vector = T4_VECTOR
__interrupt void T4_ISR(void)
{
IRCON = 0x00; //可不清中断标志,硬件自动完成
//led2 = 0; //for test
if(counter<200)counter++; //200次中断LED闪烁一轮
else
{
counter = 0; //计数清零
GlintFlag = !GlintFlag;
}
}
实验12、CC1110-睡眠定时器试验
一、试验目的
通过本试验了解CC1110单片机睡眠定时器的工作原理,该定时器在低功耗设计中非常有用。

本实验通过睡眠定时器中断唤醒单片机,重新开始工作。

二、试验设备
1个CC1110模块,1个CC1110BB底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

将模块插入底板上,连接仿真器和模块。

三、试验现象
上电运行后,每间隔一定时间,蓝色指示灯快速闪烁,表示系统已经被唤醒。

四、代码分析
/*****************************************
//初始化SleepTimer
*****************************************/
void Init_SLEEP_TIMER(void)
{
WORCTL |= 0x00; //2^15 period
EA = 1;
IEN0 |= 0X20; //开中断
WORIRQ |= 0X10; //
}
void main(void)
{
SET_MAIN_CLOCK_SOURCE(0);
LED_ENABLE(1);
YLED = 1; //保持熄灭
RLED = 0; //打开红灯
while(1)
{
Init_SLEEP_TIMER();
SET_POWER_MODE(2);//唤醒后,执行闪灯程序
LedGlint();
}
}
#pragma vector = ST_VECTOR
__interrupt void ST_ISR(void)
{
IRCON &= ~0x80; //清标志
WORIRQ &= ~0X01; //唤醒
}
实验13、CC1110-系统唤醒试验
一、试验目的
通过本试验了解CC1110单片机低功耗模式的工作原理,共有四种低功耗模式,分别为PM0,PM1 PM2 PM3 。

本实验通过按键外部中断实现唤醒低功耗模式,使得CPU进入正常工作状态。

二、试验设备
1个CC1110模块,1个CC1110BB底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

将模块插入底板上,连接仿真器和模块。

三、试验现象
上电运行后,红色指示灯连续闪烁10几次后熄灭,每按下按键(S1 或者S2 ),蓝色指示灯状态改变,表明中断服务程序被执行,同时,红灯连续闪烁十几次,表示系统已经被唤醒。

闪烁结束,系统重新进入低功耗模式。

四、代码分析
/**************************************************************** *函数功能:初始化低功耗模式
*入口参数:para1,para2,para3,para4
*返回值:无
*说明:para1,模式选择
* * * para1 0 1 2 3 * * mode PM0 P M1 P M2 P M3 * * * ****************************************************************/ void PowerMode(uchar sel)
{
uchar i,j;
i = sel;
if(sel<4)
{
SLEEP &= 0xfc;//mode 模式位清0
SLEEP |= i;
for(j=0;j<4;j++);
PCON = 0x01;
}
Else //如果不存在该模式,则默认活动状态
{
PCON = 0x00;
}
}
/*****************************************
//主函数
*****************************************/
void main(void)
{
Init_IO_AND_LED();
InitKey();
YLED = 0;
RLED = 0;
Delay(2000);
Delay(2000);
YLED =1;
RLED =1;
while(1)
{
LedGlint(); //连续闪烁,表明模块处于活动状态
PowerMode(2);//进入低功耗状态
};
}
//中断服务程序,当有按键按下时候,进入该程序
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
if(P0IFG>0) //检测中断标志
{
P0IFG = 0;
YLED = !YLED; //改变蓝灯,代表中断执行一次
}
P0IF = 0;
}
实验14、CC1110-系统睡眠试验
一、试验目的
通过本试验了解CC1110单片机低功耗模式的工作原理,共有四种低功耗模式,分别为PM0,PM1 PM2 PM3 。

本实验使得CPU进入睡眠工作状态。

二、试验设备
1个CC1110模块,1个CC1110BB底板,1台仿真器、1条MiniUSB线,1根天线(可不用)。

将模块插入底板上,连接仿真器和模块。

三、试验现象
上电运行后,蓝色指示灯亮起,红色指示灯连续闪烁20次后熄灭,进入低功耗模式。

四、代码分析
/****************************************************************
*函数功能:初始化低功耗模式
*入口参数:para1,para2,para3,para4
*返回值:无
*说明:para1,模式选择
* *
* para1 0 1 2 3 *
* mode PM0 P M1 P M2 P M3 *
* * ****************************************************************/ void PowerMode(uchar sel)
{
uchar i,j;
i = sel;
if(sel<4)
{
SLEEP &= 0xfc;
SLEEP |= i;
for(j=0;j<4;j++);
PCON = 0x01;
}
else
{
PCON = 0x00;
}
}
/**************************************************************** *函数功能:初始化时钟
*入口参数:para1 选择使用RC、晶振(高速)1-0
* :para2 选择使用RC、晶振(低速)1-0
* :para3 选择时计数钟分频000-111
* :para4 选择时系统钟分频000-111
*返回值:无
*说明:para3<=para4 ,para1(2)=1使用RC,反之使用晶振
****************************************************************/ void Init_clocks(uchar para1,uchar para2,uchar para3,uchar para4)
{
uchar i;
i = para1<<7;
CLKCON |= 0X80;
CLKCON &= i;
i = para2<<6;
CLKCON |= 0X40;
CLKCON &= i;
i = para3<<3;
CLKCON &= 0X37;
CLKCON |= i;
i = para4;
CLKCON &= 0XF8;
CLKCON |= i;
}
/****************************************************************
* 函数功能:主函数
* 入口参数:
* 返回值:无
* 说明:10次绿色LED闪烁后进入睡眠状态
****************************************************************/
void main()
{
uchar count = 0;
Initial();
Init_clocks(0,0,0,4);
//高低速时钟均选用晶振,最后一位形参选择系统时钟分频数
//改变该值会影响CPU运行速度
YLED = 0; //开红色LED,系统工作指示
Delay(); //延时
Delay();
Delay();
Delay();
while(1)
{
RLED = !RLED;
count++;
if(count == 20)PowerMode(3);
//10次闪烁后进入睡眠状态
//Delay();
Delay();
//延时函数无形参,只能通过改变系统时钟频率
//来改变小灯的闪烁频率
};
}
实验15、CC1110-AD采集VDD%3试验一、试验目的
通过本试验了解CC1110单片机AD的工作原理,分辨率可以达到10或者12位,可采集多达10几个通道。

通过本实验可以实现采集电源电压,用于电池等供电电量指示。

二、试验设备
1个CC1110模块,1台仿真器、1条MiniUSB线,1根天线(可不用),连接仿真器和模块。

三、试验现象
上电运行后,蓝色指示灯闪烁,每闪烁一次,采集数据一次。

四、代码分析
/****************************************************************
*函数功能:初始化*
*入口参数:无*
*返回值:无*
*说明:参考电压1.25V,转换对象是1/3A VDD *
****************************************************************/
void InitialAD(void)
{
//P1 out
P1DIR = 0x03; //P1控制LED
led1 = 1;
led2 = 1; //关LED
}
static uchar readVoltage(void)
{
uint value;
//清除标志
ADCIF = 0;
//参考电压1.25V,10位分辨率,采集通道VDD/3
ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_256 | HAL_ADC_CHN_VDD3);
//等待转换完成
while ( !ADCIF );
//获得转换结果
value = ADCL;
value |= ((uint) ADCH) << 8;
//测量的值为VDD/2
//因此0 代表0V,32767 代表1.25V
// voltage = (value*3*1.25)/32767 volts
// 为了去掉小数点,乘以10,比如3.4V就是value=34
value = value >> 6; // divide first by 2^6
value = (uint)(value * 37.5);
value = value >> 9;
return value;
}
/****************************************************************
*函数功能:主函数*
*入口参数:无*
*返回值:无*
*说明:无*
****************************************************************/
void main(void)
{
CLKCON &= ~0x40; //晶振
while(!(SLEEP & 0x40)); //等待晶振稳定
CLKCON &= ~0x47; //TICHSPD128分频,CLKSPD不分频
SLEEP |= 0x04; //关闭不用的RC振荡器
InitialAD(); //初始化ADC
while(1)
{
led1 = 1;
temp[0] = readV oltage();
Delay(30000);
Delay(30000);
led1 = 0;
temp[1] = readV oltage();
Delay(30000);
Delay(30000);
}
}
实验16、CC1110-AD采集片内温度传感器试验一、试验目的
通过本试验了解CC1110单片机AD的工作原理,分辨率可以达到10或者12位,可采集多达10几个通道。

通过本实验可以实现采集片内温度传感器。

二、试验设备
1个CC1110模块,1台仿真器、1条MiniUSB线,1根天线(可不用),连接仿真器和模块。

三、试验现象
上电运行后,蓝色指示灯闪烁,每闪烁一次,采集数据一次。

四、代码分析
void initTempSensor(void){
DISABLE_ALL_INTERRUPTS();
SET_MAIN_CLOCK_SOURCE(0);
*((BYTE __xdata*) 0xDF26) = 0x80;
// initLcd();
}
INT8 getTemperature(void){
UINT8 i;
UINT16 accV alue;
UINT16 value;
accV alue = 0;
for( i = 0; i < 4; i++ )
{
//参考电压1.25 ,14位,温度通道
ADC_SINGLE_CONVERSION(ADC_REF_1_25_V | ADC_14_BIT | ADC_TEMP_SENS);
ADC_SAMPLE_SINGLE();
while(!ADC_SAMPLE_READY());
value = ADCL >> 2;
value |= (((UINT16)ADCH) << 6);
accValue += value;
}
value = accValue >> 2; // devide by 4
return ADC14_TO_CELSIUS(value);
}
实验17、CC1110-看门狗试验
一、试验目的
通过本试验了解CC1110单片机看门狗的工作原理,保证单片机可靠工作。

二、试验设备
1个CC1110模块,1台仿真器、1条MiniUSB线,1根天线(可不用),连接仿真器和模块。

三、试验现象
上电运行后,蓝色指示灯亮起(等不到该指示灯熄灭,程序已经复位,因此,该灯一直亮起)红灯闪烁一次,系统复位一次。

四、代码分析
void Init_Watchdog(void)
{
WDCTL = 0x00;
//时间间隔一秒,看门狗模式
WDCTL |= 0x08;
//启动看门狗
}
void Init_Clock(void)
{
CLKCON = 0X00;
}
void Delay(void)
{
uint n;
for(n=50000;n>0;n--);
for(n=50000;n>0;n--);
for(n=50000;n>0;n--);
for(n=50000;n>0;n--);
for(n=50000;n>0;n--);
for(n=50000;n>0;n--);
for(n=50000;n>0;n--);
void main(void)
{
Init_Clock();
Init_IO();
Init_Watchdog();
led1=0;
Delay();
led2=0; //等不到该指示灯熄灭,程序已经复位,因此,该灯一直亮起
while(1)
{
}
};
实验18、CC1110-看门狗试验-喂狗
一、试验目的
通过本试验了解CC1110单片机看门狗的工作原理,并实现喂狗,保证单片机可靠工作。

二、试验设备
1个CC1110模块,1台仿真器、1条MiniUSB线,1根天线(可不用),连接仿真器和模块。

三、试验现象
上电运行后,蓝色指示灯亮起、红灯亮起,系统不复位。

四、代码分析
void main(void)
{
Init_Clock();
Init_IO();
Init_Watchdog();
led1=0;
Delay();
led2=0; //等不到该指示灯熄灭,程序已经复位,因此,该灯一直亮起while(1)
{
FeetDog(); //喂狗指令(加入后系统不复位,小灯不闪烁)
}
};。

相关文档
最新文档