10504231114实验五.docx
《10504231114实验五.docx》由会员分享,可在线阅读,更多相关《10504231114实验五.docx(13页珍藏版)》请在冰豆网上搜索。
10504231114实验五
实验五AD实验
小组成员:
别志坚彭志华
报告撰写人:
别志坚
实验题目:
AD实验
实验目的:
学习使用CC2430实现模数转换
实验内容及步骤:
(一)模拟电压转换
(1)启动IAREmbeddedWorkbench,打开工程forj11-1-3avdd.eww;
(2)连好实验设备,打开电源,将程序下载到目标板上。
改变跳线帽的设置,如图所示,在做完该实验后请务必改回到原来的设置。
注:
跳线J3,J4连接为TX-2430连接TX-USB,RX-2430连接RX-USB。
(3)重启传感节点模块,按下仿真器复位键,打开串口调试工具。
配置好相应设置后。
点击“连接
(4)调节RP1-2430,可以观察到显示出的数据值在不停的变化。
(二)片内温度转换
(1)参与“片内温度.doc”文档,修改程序实现片内温度转换的转换输出。
实验完成的程序及实现的效果:
#include"ioCC2430.h"
#include"stdio.h"
#defineuintunsignedint
#defineConversionNum20
//定义控制灯的端口
#defineled1P1_0
#defineled2P1_1
voidDelay(uint);
voidinitUARTtest(void);
voidInitialAD(void);
voidUartTX_Send_String(char*Data,intlen);
charadcdata[]="0.0V";
/****************************************************************
*函数功能:
延时*
*入口参数:
定性延时*
*返回值:
无*
*说明:
*
****************************************************************/
voidDelay(uintn)
{
uinti;
for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*****************************************************************函数功能:初始化串口1**入口参数:无**返回值:无**说明:57600-8-n-1*****************************************************************/voidinitUARTtest(void){CLKCON&=~0x40;//晶振while(!(SLEEP&0x40));//等待晶振稳定CLKCON&=~0x47;//TICHSPD128分频,CLKSPD不分频SLEEP|=0x04;//关闭不用的RC振荡器PERCFG=0x00;//位置1P0口P0SEL=0x3c;//P0用作串口U0CSR|=0x80;//UART方式U0GCR|=11;//baud_e=11;U0BAUD|=216;//波特率设为115200UTX0IF=1;U0CSR|=0X40;//允许接收IEN0|=0x84;//开总中断,接收中断}/*****************************************************************函数功能:初始化ADC**入口参数:无**返回值:无**说明:参考电压AVDD,转换对象是1/3AVDD*****************************************************************/voidInitialAD(void){//P1outP1DIR=0x03;//P1控制LEDled1=1;led2=1;//关LEDADCH&=0X00;//清EOC标志ADCCON3=0xb1;//单次转换,参考电压为AVDD_SOC引脚电压,对P0.1进行A/D转换//14位分辨率ADCCON1=0X30;//停止A/DADCCON1|=0X40;//启动A/D}/*****************************************************************函数功能:串口发送字符串函数**入口参数:data:数据**len:数据长度**返回值:无**说明:*****************************************************************/voidUartTX_Send_String(char*Data,intlen){intj;for(j=0;j{U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}} /*****************************************************************函数功能:主函数**入口参数:无**返回值:无**说明:无*****************************************************************/voidmain(void){chartemp[2];floatnum;initUARTtest();//初始化串口115200InitialAD();//初始化ADCled1=1;while(1){InitialAD();if(ADCCON1>=0x80){led1=1;//转换完毕指示temp[1]=ADCL;temp[0]=ADCH;temp[1]=temp[1]>>2;//temp[1]|=temp[0]<<6;//temp[0]=temp[0]>>2;//数据处理//temp[0]&=0x3f;num=(temp[0]*256+temp[1])*3.3/8192;//有一位符号位,取2^13;num/=4;//定参考电压为3.3V。14位精确度//adcdata[0]=(char)(num)/10+48;adcdata[1]=(char)(num)%10+48;//adcdata[2]='.';adcdata[3]=(char)(num*10)%10+48;UartTX_Send_String(adcdata,6);//串口送数//包括空格Delay(30000);led1=0;//完成数据处理Delay(30000);}}}该实验效果如图:(二)片内温度转换/*实验说明:片内温度采集实验,通过串口0将数据发送到PC机*/#include#defineled1P1_0#defineled2P1_1#defineled3P1_2#defineled4P1_3/*32M晶振初始化-------------------------------------------------------*/voidxtal_init(void){SLEEP&=~0x04;//都上电while(!(SLEEP&0x40));//晶体振荡器开启且稳定CLKCON&=~0x47;//选择32MHz晶体振荡器SLEEP|=0x04;}/*LED灯初始化-------------------------------------------------------*/voidled_init(void){P1SEL=0x00;//P1为普通I/O口P1DIR|=0x0F;//P1.0P1.1P1.2P1.3输出led1=1;led2=1;led3=1;led4=1;}/*UART0初始化-------------------------------------------------------*/voidUart0Init(unsignedcharStopBits,unsignedcharParity){P0SEL|=0x0C;//初始化UART0端口PERCFG&=~0x01;//选择UART0为可选位置一U0CSR=0xC0;//设置为UART模式,而且使能接受器U0GCR=11;U0BAUD=216;//设置UART0波特率为115200bpsU0UCR|=StopBits|Parity;//设置停止位与奇偶校验}/*UART0发送字符-------------------------------------------------------*/voidUart0Send(unsignedchardata){while(U0CSR&0x01);//等待UART空闲时发送数据U0DBUF=data;}/*UART0发送字符串-------------------------------------------------------*/voidUart0SendString(unsignedchar*s){while(*s!=0)Uart0Send(*s++);}/*UART0接收数据-------------------------------------------------------*/unsignedcharUart0Receive(void){unsignedchardata;while(!(U0CSR&0x04));//查询是否收到数据,否则继续等待data=U0DBUF;returndata;}/*延时函数-------------------------------------------------------*/voidDelay(unsignedintn){unsignedinti;for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*****************************************************************函数功能:初始化串口1**入口参数:无**返回值:无**说明:57600-8-n-1*****************************************************************/voidinitUARTtest(void){CLKCON&=~0x40;//晶振while(!(SLEEP&0x40));//等待晶振稳定CLKCON&=~0x47;//TICHSPD128分频,CLKSPD不分频SLEEP|=0x04;//关闭不用的RC振荡器PERCFG=0x00;//位置1P0口P0SEL=0x3c;//P0用作串口U0CSR|=0x80;//UART方式U0GCR|=11;//baud_e=11;U0BAUD|=216;//波特率设为115200UTX0IF=1;U0CSR|=0X40;//允许接收IEN0|=0x84;//开总中断,接收中断}/*****************************************************************函数功能:初始化ADC**入口参数:无**返回值:无**说明:参考电压AVDD,转换对象是1/3AVDD*****************************************************************/voidInitialAD(void){//P1outP1DIR=0x03;//P1控制LEDled1=1;led2=1;//关LEDADCH&=0X00;//清EOC标志ADCCON3=0xb1;//单次转换,参考电压为AVDD_SOC引脚电压,对P0.1进行A/D转换//14位分辨率ADCCON1=0X30;//停止A/DADCCON1|=0X40;//启动A/D}/*****************************************************************函数功能:串口发送字符串函数**入口参数:data:数据**len:数据长度**返回值:无**说明:*****************************************************************/voidUartTX_Send_String(char*Data,intlen){intj;for(j=0;j{U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}} /*****************************************************************函数功能:主函数**入口参数:无**返回值:无**说明:无*****************************************************************/voidmain(void){chartemp[2];floatnum;initUARTtest();//初始化串口115200InitialAD();//初始化ADCled1=1;while(1){InitialAD();if(ADCCON1>=0x80){led1=1;//转换完毕指示temp[1]=ADCL;temp[0]=ADCH;temp[1]=temp[1]>>2;//temp[1]|=temp[0]<<6;//temp[0]=temp[0]>>2;//数据处理//temp[0]&=0x3f;num=(temp[0]*256+temp[1])*3.3/8192;//有一位符号位,取2^13;num/=4;//定参考电压为3.3V。14位精确度//adcdata[0]=(char)(num)/10+48;adcdata[1]=(char)(num)%10+48;//adcdata[2]='.';adcdata[3]=(char)(num*10)%10+48;UartTX_Send_String(adcdata,6);//串口送数//包括空格Delay(30000);led1=0;//完成数据处理Delay(30000);}}}该实验效果如图:(二)片内温度转换/*实验说明:片内温度采集实验,通过串口0将数据发送到PC机*/#include#defineled1P1_0#defineled2P1_1#defineled3P1_2#defineled4P1_3/*32M晶振初始化-------------------------------------------------------*/voidxtal_init(void){SLEEP&=~0x04;//都上电while(!(SLEEP&0x40));//晶体振荡器开启且稳定CLKCON&=~0x47;//选择32MHz晶体振荡器SLEEP|=0x04;}/*LED灯初始化-------------------------------------------------------*/voidled_init(void){P1SEL=0x00;//P1为普通I/O口P1DIR|=0x0F;//P1.0P1.1P1.2P1.3输出led1=1;led2=1;led3=1;led4=1;}/*UART0初始化-------------------------------------------------------*/voidUart0Init(unsignedcharStopBits,unsignedcharParity){P0SEL|=0x0C;//初始化UART0端口PERCFG&=~0x01;//选择UART0为可选位置一U0CSR=0xC0;//设置为UART模式,而且使能接受器U0GCR=11;U0BAUD=216;//设置UART0波特率为115200bpsU0UCR|=StopBits|Parity;//设置停止位与奇偶校验}/*UART0发送字符-------------------------------------------------------*/voidUart0Send(unsignedchardata){while(U0CSR&0x01);//等待UART空闲时发送数据U0DBUF=data;}/*UART0发送字符串-------------------------------------------------------*/voidUart0SendString(unsignedchar*s){while(*s!=0)Uart0Send(*s++);}/*UART0接收数据-------------------------------------------------------*/unsignedcharUart0Receive(void){unsignedchardata;while(!(U0CSR&0x04));//查询是否收到数据,否则继续等待data=U0DBUF;returndata;}/*延时函数-------------------------------------------------------*/voidDelay(unsignedintn){unsignedinti;for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
for(i=0;ifor(i=0;ifor(i=0;i}/*****************************************************************函数功能:初始化串口1**入口参数:无**返回值:无**说明:57600-8-n-1*****************************************************************/voidinitUARTtest(void){CLKCON&=~0x40;//晶振while(!(SLEEP&0x40));//等待晶振稳定CLKCON&=~0x47;//TICHSPD128分频,CLKSPD不分频SLEEP|=0x04;//关闭不用的RC振荡器PERCFG=0x00;//位置1P0口P0SEL=0x3c;//P0用作串口U0CSR|=0x80;//UART方式U0GCR|=11;//baud_e=11;U0BAUD|=216;//波特率设为115200UTX0IF=1;U0CSR|=0X40;//允许接收IEN0|=0x84;//开总中断,接收中断}/*****************************************************************函数功能:初始化ADC**入口参数:无**返回值:无**说明:参考电压AVDD,转换对象是1/3AVDD*****************************************************************/voidInitialAD(void){//P1outP1DIR=0x03;//P1控制LEDled1=1;led2=1;//关LEDADCH&=0X00;//清EOC标志ADCCON3=0xb1;//单次转换,参考电压为AVDD_SOC引脚电压,对P0.1进行A/D转换//14位分辨率ADCCON1=0X30;//停止A/DADCCON1|=0X40;//启动A/D}/*****************************************************************函数功能:串口发送字符串函数**入口参数:data:数据**len:数据长度**返回值:无**说明:*****************************************************************/voidUartTX_Send_String(char*Data,intlen){intj;for(j=0;j{U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}} /*****************************************************************函数功能:主函数**入口参数:无**返回值:无**说明:无*****************************************************************/voidmain(void){chartemp[2];floatnum;initUARTtest();//初始化串口115200InitialAD();//初始化ADCled1=1;while(1){InitialAD();if(ADCCON1>=0x80){led1=1;//转换完毕指示temp[1]=ADCL;temp[0]=ADCH;temp[1]=temp[1]>>2;//temp[1]|=temp[0]<<6;//temp[0]=temp[0]>>2;//数据处理//temp[0]&=0x3f;num=(temp[0]*256+temp[1])*3.3/8192;//有一位符号位,取2^13;num/=4;//定参考电压为3.3V。14位精确度//adcdata[0]=(char)(num)/10+48;adcdata[1]=(char)(num)%10+48;//adcdata[2]='.';adcdata[3]=(char)(num*10)%10+48;UartTX_Send_String(adcdata,6);//串口送数//包括空格Delay(30000);led1=0;//完成数据处理Delay(30000);}}}该实验效果如图:(二)片内温度转换/*实验说明:片内温度采集实验,通过串口0将数据发送到PC机*/#include#defineled1P1_0#defineled2P1_1#defineled3P1_2#defineled4P1_3/*32M晶振初始化-------------------------------------------------------*/voidxtal_init(void){SLEEP&=~0x04;//都上电while(!(SLEEP&0x40));//晶体振荡器开启且稳定CLKCON&=~0x47;//选择32MHz晶体振荡器SLEEP|=0x04;}/*LED灯初始化-------------------------------------------------------*/voidled_init(void){P1SEL=0x00;//P1为普通I/O口P1DIR|=0x0F;//P1.0P1.1P1.2P1.3输出led1=1;led2=1;led3=1;led4=1;}/*UART0初始化-------------------------------------------------------*/voidUart0Init(unsignedcharStopBits,unsignedcharParity){P0SEL|=0x0C;//初始化UART0端口PERCFG&=~0x01;//选择UART0为可选位置一U0CSR=0xC0;//设置为UART模式,而且使能接受器U0GCR=11;U0BAUD=216;//设置UART0波特率为115200bpsU0UCR|=StopBits|Parity;//设置停止位与奇偶校验}/*UART0发送字符-------------------------------------------------------*/voidUart0Send(unsignedchardata){while(U0CSR&0x01);//等待UART空闲时发送数据U0DBUF=data;}/*UART0发送字符串-------------------------------------------------------*/voidUart0SendString(unsignedchar*s){while(*s!=0)Uart0Send(*s++);}/*UART0接收数据-------------------------------------------------------*/unsignedcharUart0Receive(void){unsignedchardata;while(!(U0CSR&0x04));//查询是否收到数据,否则继续等待data=U0DBUF;returndata;}/*延时函数-------------------------------------------------------*/voidDelay(unsignedintn){unsignedinti;for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
for(i=0;ifor(i=0;i}/*****************************************************************函数功能:初始化串口1**入口参数:无**返回值:无**说明:57600-8-n-1*****************************************************************/voidinitUARTtest(void){CLKCON&=~0x40;//晶振while(!(SLEEP&0x40));//等待晶振稳定CLKCON&=~0x47;//TICHSPD128分频,CLKSPD不分频SLEEP|=0x04;//关闭不用的RC振荡器PERCFG=0x00;//位置1P0口P0SEL=0x3c;//P0用作串口U0CSR|=0x80;//UART方式U0GCR|=11;//baud_e=11;U0BAUD|=216;//波特率设为115200UTX0IF=1;U0CSR|=0X40;//允许接收IEN0|=0x84;//开总中断,接收中断}/*****************************************************************函数功能:初始化ADC**入口参数:无**返回值:无**说明:参考电压AVDD,转换对象是1/3AVDD*****************************************************************/voidInitialAD(void){//P1outP1DIR=0x03;//P1控制LEDled1=1;led2=1;//关LEDADCH&=0X00;//清EOC标志ADCCON3=0xb1;//单次转换,参考电压为AVDD_SOC引脚电压,对P0.1进行A/D转换//14位分辨率ADCCON1=0X30;//停止A/DADCCON1|=0X40;//启动A/D}/*****************************************************************函数功能:串口发送字符串函数**入口参数:data:数据**len:数据长度**返回值:无**说明:*****************************************************************/voidUartTX_Send_String(char*Data,intlen){intj;for(j=0;j{U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}} /*****************************************************************函数功能:主函数**入口参数:无**返回值:无**说明:无*****************************************************************/voidmain(void){chartemp[2];floatnum;initUARTtest();//初始化串口115200InitialAD();//初始化ADCled1=1;while(1){InitialAD();if(ADCCON1>=0x80){led1=1;//转换完毕指示temp[1]=ADCL;temp[0]=ADCH;temp[1]=temp[1]>>2;//temp[1]|=temp[0]<<6;//temp[0]=temp[0]>>2;//数据处理//temp[0]&=0x3f;num=(temp[0]*256+temp[1])*3.3/8192;//有一位符号位,取2^13;num/=4;//定参考电压为3.3V。14位精确度//adcdata[0]=(char)(num)/10+48;adcdata[1]=(char)(num)%10+48;//adcdata[2]='.';adcdata[3]=(char)(num*10)%10+48;UartTX_Send_String(adcdata,6);//串口送数//包括空格Delay(30000);led1=0;//完成数据处理Delay(30000);}}}该实验效果如图:(二)片内温度转换/*实验说明:片内温度采集实验,通过串口0将数据发送到PC机*/#include#defineled1P1_0#defineled2P1_1#defineled3P1_2#defineled4P1_3/*32M晶振初始化-------------------------------------------------------*/voidxtal_init(void){SLEEP&=~0x04;//都上电while(!(SLEEP&0x40));//晶体振荡器开启且稳定CLKCON&=~0x47;//选择32MHz晶体振荡器SLEEP|=0x04;}/*LED灯初始化-------------------------------------------------------*/voidled_init(void){P1SEL=0x00;//P1为普通I/O口P1DIR|=0x0F;//P1.0P1.1P1.2P1.3输出led1=1;led2=1;led3=1;led4=1;}/*UART0初始化-------------------------------------------------------*/voidUart0Init(unsignedcharStopBits,unsignedcharParity){P0SEL|=0x0C;//初始化UART0端口PERCFG&=~0x01;//选择UART0为可选位置一U0CSR=0xC0;//设置为UART模式,而且使能接受器U0GCR=11;U0BAUD=216;//设置UART0波特率为115200bpsU0UCR|=StopBits|Parity;//设置停止位与奇偶校验}/*UART0发送字符-------------------------------------------------------*/voidUart0Send(unsignedchardata){while(U0CSR&0x01);//等待UART空闲时发送数据U0DBUF=data;}/*UART0发送字符串-------------------------------------------------------*/voidUart0SendString(unsignedchar*s){while(*s!=0)Uart0Send(*s++);}/*UART0接收数据-------------------------------------------------------*/unsignedcharUart0Receive(void){unsignedchardata;while(!(U0CSR&0x04));//查询是否收到数据,否则继续等待data=U0DBUF;returndata;}/*延时函数-------------------------------------------------------*/voidDelay(unsignedintn){unsignedinti;for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
for(i=0;i}/*****************************************************************函数功能:初始化串口1**入口参数:无**返回值:无**说明:57600-8-n-1*****************************************************************/voidinitUARTtest(void){CLKCON&=~0x40;//晶振while(!(SLEEP&0x40));//等待晶振稳定CLKCON&=~0x47;//TICHSPD128分频,CLKSPD不分频SLEEP|=0x04;//关闭不用的RC振荡器PERCFG=0x00;//位置1P0口P0SEL=0x3c;//P0用作串口U0CSR|=0x80;//UART方式U0GCR|=11;//baud_e=11;U0BAUD|=216;//波特率设为115200UTX0IF=1;U0CSR|=0X40;//允许接收IEN0|=0x84;//开总中断,接收中断}/*****************************************************************函数功能:初始化ADC**入口参数:无**返回值:无**说明:参考电压AVDD,转换对象是1/3AVDD*****************************************************************/voidInitialAD(void){//P1outP1DIR=0x03;//P1控制LEDled1=1;led2=1;//关LEDADCH&=0X00;//清EOC标志ADCCON3=0xb1;//单次转换,参考电压为AVDD_SOC引脚电压,对P0.1进行A/D转换//14位分辨率ADCCON1=0X30;//停止A/DADCCON1|=0X40;//启动A/D}/*****************************************************************函数功能:串口发送字符串函数**入口参数:data:数据**len:数据长度**返回值:无**说明:*****************************************************************/voidUartTX_Send_String(char*Data,intlen){intj;for(j=0;j{U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}} /*****************************************************************函数功能:主函数**入口参数:无**返回值:无**说明:无*****************************************************************/voidmain(void){chartemp[2];floatnum;initUARTtest();//初始化串口115200InitialAD();//初始化ADCled1=1;while(1){InitialAD();if(ADCCON1>=0x80){led1=1;//转换完毕指示temp[1]=ADCL;temp[0]=ADCH;temp[1]=temp[1]>>2;//temp[1]|=temp[0]<<6;//temp[0]=temp[0]>>2;//数据处理//temp[0]&=0x3f;num=(temp[0]*256+temp[1])*3.3/8192;//有一位符号位,取2^13;num/=4;//定参考电压为3.3V。14位精确度//adcdata[0]=(char)(num)/10+48;adcdata[1]=(char)(num)%10+48;//adcdata[2]='.';adcdata[3]=(char)(num*10)%10+48;UartTX_Send_String(adcdata,6);//串口送数//包括空格Delay(30000);led1=0;//完成数据处理Delay(30000);}}}该实验效果如图:(二)片内温度转换/*实验说明:片内温度采集实验,通过串口0将数据发送到PC机*/#include#defineled1P1_0#defineled2P1_1#defineled3P1_2#defineled4P1_3/*32M晶振初始化-------------------------------------------------------*/voidxtal_init(void){SLEEP&=~0x04;//都上电while(!(SLEEP&0x40));//晶体振荡器开启且稳定CLKCON&=~0x47;//选择32MHz晶体振荡器SLEEP|=0x04;}/*LED灯初始化-------------------------------------------------------*/voidled_init(void){P1SEL=0x00;//P1为普通I/O口P1DIR|=0x0F;//P1.0P1.1P1.2P1.3输出led1=1;led2=1;led3=1;led4=1;}/*UART0初始化-------------------------------------------------------*/voidUart0Init(unsignedcharStopBits,unsignedcharParity){P0SEL|=0x0C;//初始化UART0端口PERCFG&=~0x01;//选择UART0为可选位置一U0CSR=0xC0;//设置为UART模式,而且使能接受器U0GCR=11;U0BAUD=216;//设置UART0波特率为115200bpsU0UCR|=StopBits|Parity;//设置停止位与奇偶校验}/*UART0发送字符-------------------------------------------------------*/voidUart0Send(unsignedchardata){while(U0CSR&0x01);//等待UART空闲时发送数据U0DBUF=data;}/*UART0发送字符串-------------------------------------------------------*/voidUart0SendString(unsignedchar*s){while(*s!=0)Uart0Send(*s++);}/*UART0接收数据-------------------------------------------------------*/unsignedcharUart0Receive(void){unsignedchardata;while(!(U0CSR&0x04));//查询是否收到数据,否则继续等待data=U0DBUF;returndata;}/*延时函数-------------------------------------------------------*/voidDelay(unsignedintn){unsignedinti;for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
}
初始化串口1*
57600-8-n-1*
voidinitUARTtest(void)
CLKCON&=~0x40;//晶振
while(!
(SLEEP&0x40));//等待晶振稳定
CLKCON&=~0x47;//TICHSPD128分频,CLKSPD不分频
SLEEP|=0x04;//关闭不用的RC振荡器
PERCFG=0x00;//位置1P0口
P0SEL=0x3c;//P0用作串口
U0CSR|=0x80;//UART方式
U0GCR|=11;//baud_e=11;
U0BAUD|=216;//波特率设为115200
UTX0IF=1;
U0CSR|=0X40;//允许接收
IEN0|=0x84;//开总中断,接收中断
初始化ADC*
参考电压AVDD,转换对象是1/3AVDD*
voidInitialAD(void)
//P1out
P1DIR=0x03;//P1控制LED
led1=1;
led2=1;//关LED
ADCH&=0X00;//清EOC标志
ADCCON3=0xb1;//单次转换,参考电压为AVDD_SOC引脚电压,对P0.1进行A/D转换
//14位分辨率
ADCCON1=0X30;//停止A/D
ADCCON1|=0X40;//启动A/D
串口发送字符串函数*
*入口参数:
data:
数据*
*len:
数据长度*
voidUartTX_Send_String(char*Data,intlen)
intj;
for(j=0;j{U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}} /*****************************************************************函数功能:主函数**入口参数:无**返回值:无**说明:无*****************************************************************/voidmain(void){chartemp[2];floatnum;initUARTtest();//初始化串口115200InitialAD();//初始化ADCled1=1;while(1){InitialAD();if(ADCCON1>=0x80){led1=1;//转换完毕指示temp[1]=ADCL;temp[0]=ADCH;temp[1]=temp[1]>>2;//temp[1]|=temp[0]<<6;//temp[0]=temp[0]>>2;//数据处理//temp[0]&=0x3f;num=(temp[0]*256+temp[1])*3.3/8192;//有一位符号位,取2^13;num/=4;//定参考电压为3.3V。14位精确度//adcdata[0]=(char)(num)/10+48;adcdata[1]=(char)(num)%10+48;//adcdata[2]='.';adcdata[3]=(char)(num*10)%10+48;UartTX_Send_String(adcdata,6);//串口送数//包括空格Delay(30000);led1=0;//完成数据处理Delay(30000);}}}该实验效果如图:(二)片内温度转换/*实验说明:片内温度采集实验,通过串口0将数据发送到PC机*/#include#defineled1P1_0#defineled2P1_1#defineled3P1_2#defineled4P1_3/*32M晶振初始化-------------------------------------------------------*/voidxtal_init(void){SLEEP&=~0x04;//都上电while(!(SLEEP&0x40));//晶体振荡器开启且稳定CLKCON&=~0x47;//选择32MHz晶体振荡器SLEEP|=0x04;}/*LED灯初始化-------------------------------------------------------*/voidled_init(void){P1SEL=0x00;//P1为普通I/O口P1DIR|=0x0F;//P1.0P1.1P1.2P1.3输出led1=1;led2=1;led3=1;led4=1;}/*UART0初始化-------------------------------------------------------*/voidUart0Init(unsignedcharStopBits,unsignedcharParity){P0SEL|=0x0C;//初始化UART0端口PERCFG&=~0x01;//选择UART0为可选位置一U0CSR=0xC0;//设置为UART模式,而且使能接受器U0GCR=11;U0BAUD=216;//设置UART0波特率为115200bpsU0UCR|=StopBits|Parity;//设置停止位与奇偶校验}/*UART0发送字符-------------------------------------------------------*/voidUart0Send(unsignedchardata){while(U0CSR&0x01);//等待UART空闲时发送数据U0DBUF=data;}/*UART0发送字符串-------------------------------------------------------*/voidUart0SendString(unsignedchar*s){while(*s!=0)Uart0Send(*s++);}/*UART0接收数据-------------------------------------------------------*/unsignedcharUart0Receive(void){unsignedchardata;while(!(U0CSR&0x04));//查询是否收到数据,否则继续等待data=U0DBUF;returndata;}/*延时函数-------------------------------------------------------*/voidDelay(unsignedintn){unsignedinti;for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
U0DBUF=*Data++;
while(UTX0IF==0);
UTX0IF=0;
主函数*
voidmain(void)
chartemp[2];
floatnum;
initUARTtest();//初始化串口115200
InitialAD();//初始化ADC
while
(1)
InitialAD();
if(ADCCON1>=0x80)
led1=1;//转换完毕指示
temp[1]=ADCL;
temp[0]=ADCH;
temp[1]=temp[1]>>2;
//temp[1]|=temp[0]<<6;
//temp[0]=temp[0]>>2;//数据处理
//temp[0]&=0x3f;
num=(temp[0]*256+temp[1])*3.3/8192;//有一位符号位,取2^13;
num/=4;
//定参考电压为3.3V。
14位精确度
//adcdata[0]=(char)(num)/10+48;
adcdata[1]=(char)(num)%10+48;
//adcdata[2]='.';
adcdata[3]=(char)(num*10)%10+48;
UartTX_Send_String(adcdata,6);//串口送数
//包括空格
Delay(30000);
led1=0;//完成数据处理
该实验效果如图:
/*
实验说明:
片内温度采集实验,通过串口0将数据发送到PC机
*/
#include
#defineled3P1_2
#defineled4P1_3
/*32M晶振初始化
-------------------------------------------------------*/
voidxtal_init(void)
SLEEP&=~0x04;//都上电
(SLEEP&0x40));//晶体振荡器开启且稳定
CLKCON&=~0x47;//选择32MHz晶体振荡器
SLEEP|=0x04;
/*LED灯初始化
voidled_init(void)
P1SEL=0x00;//P1为普通I/O口
P1DIR|=0x0F;//P1.0P1.1P1.2P1.3输出
led2=1;
led3=1;
led4=1;
/*UART0初始化
voidUart0Init(unsignedcharStopBits,unsignedcharParity)
P0SEL|=0x0C;//初始化UART0端口
PERCFG&=~0x01;//选择UART0为可选位置一
U0CSR=0xC0;//设置为UART模式,而且使能接受器
U0GCR=11;
U0BAUD=216;//设置UART0波特率为115200bps
U0UCR|=StopBits|Parity;//设置停止位与奇偶校验
/*UART0发送字符
voidUart0Send(unsignedchardata)
while(U0CSR&0x01);//等待UART空闲时发送数据
U0DBUF=data;
/*UART0发送字符串
voidUart0SendString(unsignedchar*s)
while(*s!
=0)
Uart0Send(*s++);
/*UART0接收数据
unsignedcharUart0Receive(void)
unsignedchardata;
(U0CSR&0x04));//查询是否收到数据,否则继续等待
data=U0DBUF;
returndata;
/*延时函数
voidDelay(unsignedintn)
unsignedinti;
for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
for(i=0;ifor(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
for(i=0;ifor(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
for(i=0;ifor(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
for(i=0;i}/*得到实际温度值-------------------------------------------------------*/floatgetTemperature(void){unsignedintvalue;ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样ADCCON1|=0x30;//选择ADC的启动模式为手动ADCCON1|=0x40;//启动AD转化while(!(ADCCON1&0x80));//等待ADC转化结束value=ADCL>>2;value|=(ADCH<<6);//取得最终转化结果,存入value中returnvalue*0.06229-311.43;//根据公式计算出温度值}/*主函数-------------------------------------------------------*/voidmain(void){chari;floatavgTemp;unsignedcharoutput[]="00.00";xtal_init();led_init();led1=0;Uart0Init(0x00,0x00);//初始化串口:无奇偶校验,停止位为1位Uart0SendString("HelloCC2430-TempSensor!\r\n");while(1){led1=0;avgTemp=0;for(i=0;i<64;i++){avgTemp+=getTemperature();avgTemp=avgTemp/2;//每采样1次,取1次平均值}output[0]=(unsignedchar)(avgTemp)/10+48;//十位output[1]=(unsignedchar)(avgTemp)%10+48;//个位output[2]='.';//小数点output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位output[5]='\0';//字符串结束符Uart0SendString(output);Uart0SendString("℃\n");led1=1;//LED熄灭,表示转换结束,Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);Delay(20000);}}该实验效果如图: 实验心得体会:本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
/*得到实际温度值
floatgetTemperature(void)
unsignedintvalue;
ADCCON3=(0x3E);//选择1.25V为参考电压;14位分辨率;对片内温度传感器采样
ADCCON1|=0x30;//选择ADC的启动模式为手动
ADCCON1|=0x40;//启动AD转化
(ADCCON1&0x80));//等待ADC转化结束
value=ADCL>>2;
value|=(ADCH<<6);//取得最终转化结果,存入value中
returnvalue*0.06229-311.43;//根据公式计算出温度值
/*主函数
chari;
floatavgTemp;
unsignedcharoutput[]="00.00";
xtal_init();
led_init();
led1=0;
Uart0Init(0x00,0x00);//初始化串口:
无奇偶校验,停止位为1位
Uart0SendString("HelloCC2430-TempSensor!
\r\n");
avgTemp=0;
for(i=0;i<64;i++)
avgTemp+=getTemperature();
avgTemp=avgTemp/2;//每采样1次,取1次平均值
output[0]=(unsignedchar)(avgTemp)/10+48;//十位
output[1]=(unsignedchar)(avgTemp)%10+48;//个位
output[2]='.';//小数点
output[3]=(unsignedchar)(avgTemp*10)%10+48;//十分位
output[4]=(unsignedchar)(avgTemp*100)%10+48;//百分位
output[5]='\0';//字符串结束符
Uart0SendString(output);
Uart0SendString("℃\n");
led1=1;//LED熄灭,表示转换结束,
Delay(20000);
实验心得体会:
本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1