10504231114实验五文档格式.docx
《10504231114实验五文档格式.docx》由会员分享,可在线阅读,更多相关《10504231114实验五文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
#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;
i<
n;
i++);
}
初始化串口1*
57600-8-n-1*
voidinitUARTtest(void)
CLKCON&
=~0x40;
//晶振
while(!
(SLEEP&
0x40));
//等待晶振稳定
=~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<
len;
j++)
{
U0DBUF=*Data++;
while(UTX0IF==0);
UTX0IF=0;
}
主函数*
voidmain(void)
{
chartemp[2];
floatnum;
initUARTtest();
//初始化串口115200
InitialAD();
//初始化ADC
while
(1)
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]>
//数据处理
//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<
ioCC2430.h>
#defineled3P1_2
#defineled4P1_3
/*32M晶振初始化
-------------------------------------------------------*/
voidxtal_init(void)
SLEEP&
=~0x04;
//都上电
//晶体振荡器开启且稳定
//选择32MHz晶体振荡器
/*LED灯初始化
voidled_init(void)
P1SEL=0x00;
//P1为普通I/O口
P1DIR|=0x0F;
//P1.0P1.1P1.2P1.3输出
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;
/*得到实际温度值
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();
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);
℃\n"
//LED熄灭,表示转换结束,
Delay(20000);
实验心得体会:
本节课我们学习使用了CC2430实现模数转换,实现了电压与温度的转换,深入的了解了其工作原理,对物联网这门课程有了更加深入的了解。