欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
基于CC2530的溫濕度ADC源程序
[打印本頁]
作者:
陽新墨
時間:
2018-1-1 15:17
標(biāo)題:
基于CC2530的溫濕度ADC源程序
單片機(jī)源程序如下:
/*
本程序講解AD控制(片內(nèi)溫度計(jì))
主講 王加輝
*/
#include<iocc2530.h>
#include"stdio.h"
#define uchar unsigned char
#define uint unsigned int
void init_UART0(void)/*初始化串口*/
{
P0SEL|=0X3C;/*這里我們是選擇P0_2,P0_3,P0_4,P0_5最為串口通信的I/O口*/
P2DIR&=~0XC0;/*在這里我們設(shè)置串口0的優(yōu)先級大于串口1,也就是設(shè)置使用串口0*/
PERCFG=0X00;/*PERCFG是接口控制寄存器,這里我們選擇串口0位置1,就是選擇P0-2和P0-3為串口通信接口*/
U0CSR|=0X80;/*選擇串口的工作方式,我們選擇為異步通信*/
U0GCR|=11;/*結(jié)合U0BAUD設(shè)置波特率為115200,請各位查找手冊*/
U0BAUD|=216;
UTX0IF=0;/*UTX0IF為串口0發(fā)送中斷標(biāo)志位,我們將其置零*/
}
float recieve_AD(void)/*AD轉(zhuǎn)換,讀取片內(nèi)溫度計(jì)實(shí)時電壓*/
{
uint value=0;/*無符號整型變量,用來儲存AD轉(zhuǎn)換值*/
ADCCON1|=0X30;/*選擇AD轉(zhuǎn)換啟動的方式為手動啟動*/
ADCCON3=0X3E;/*設(shè)置AD轉(zhuǎn)換的信息源為片內(nèi)溫度傳感器、選擇內(nèi)部參考電壓為1.25V,設(shè)置單通道AD轉(zhuǎn)換的分辨率為512dec,12位,此處要對照AD寄存器手冊查看*/
ADCCON1|=0X40;/*手動啟動AD轉(zhuǎn)換*/
while(!(ADCCON1&0X80));/*等待AD一次轉(zhuǎn)換完成*/
value=ADCL>>4;/*CC2530的AD轉(zhuǎn)換數(shù)據(jù)是由高到低存儲的,ADCL低4位無效,所以我們要向右移動去掉無效四位,
這我也是在CC2430學(xué)校視頻上看到的,暫時我不能給出確切解釋,有懂得請補(bǔ)充一下,謝謝*/
value|=(uint)ADCH<<4;/*視頻上解釋高位數(shù)據(jù)向左移動4位是為了和低位對應(yīng),然后相加,我無法做出準(zhǔn)確解釋,我找到相關(guān)資料再做補(bǔ)充解釋*/
return value*0.06229-303.3-4;/*溫度的計(jì)算公式為:溫度=((測量電壓-某一電壓)/溫度系數(shù))-溫度的誤差值*/
}
void init_tempurature()/*初始化溫度傳感器*/
{
IEN0=IEN1=IEN2=0;/*因?yàn)锳D轉(zhuǎn)換會產(chǎn)生中斷,所以此處我們先關(guān)掉所用中斷,對于AD中斷的使用大家可以參考手冊,查看其中斷源*/
CLKCONCMD&=~0X40;/*設(shè)置時鐘頻率,在前面的串口通信中我們也曾講過*/
while(CLKCONSTA&0X40);
CLKCONCMD&=~0X47;
TR0=0X01;/*這里我讓AD和溫度傳感器相連*/
ATEST=0X01;/*啟動溫度傳感器*/
}
void data_UART0(char *character,int length)/*串口數(shù)據(jù)輸出函數(shù)*/
{
int i;
for(i=0;i<length;i++)
{
U0DBUF=*character++;
while(UTX0IF==0);/*每次發(fā)送數(shù)據(jù)完成后串口發(fā)送中斷位硬件自動置一*/
UTX0IF=0;/*這里我們要軟件將其置一*/
}
U0DBUF=0X0A;/*這句是在串口中輸出一個換行,大家可以試試*/
while(UTX0IF==0);
UTX0IF=0;
}
/*告訴大家一個在串口通信中將數(shù)字轉(zhuǎn)換成字符輸出的簡單方法,就是在數(shù)字后面加0x30,大家可以嘗試*/
void delay_ms(int ti)/*延遲函數(shù)*/
{
int x,y;
for(x=0;x<ti;x++)
for(y=0;y<526;y++);
}
void main()
{
int turn=0;
float ADTEMP=0;
char temp[6]={0};
init_tempurature();//初始化溫度傳感器
init_UART0();//初始化串口通信
while(1)
{
for(turn=0;turn<60;turn++)/*累計(jì)60次的溫度*/
ADTEMP+=recieve_AD();
ADTEMP=ADTEMP/60;/*求60次溫度的平均值*/
temp[0]=(uchar)(ADTEMP)/10+48;/*將溫度的數(shù)值存入數(shù)組temp中*/
temp[1]=(uchar)(ADTEMP)%10+48;
temp[2]='.';
temp[3]=(uchar)(ADTEMP*10)%10+48;
temp[4]=(uchar)(ADTEMP*100)%10+48;
data_UART0(temp,5);//串口輸出溫度值
delay_ms(2000);//控制每次輸出的時間間隔
}
}
/*zigbee cc2530的AD控制(片內(nèi)溫度計(jì))祝大家學(xué)的愉快*/
復(fù)制代碼
所有資料51hei提供下載:
cc2530溫濕度.doc
(19.5 KB, 下載次數(shù): 13)
2018-1-1 15:16 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1