物聯(lián)網(wǎng)實(shí)訓(xùn)Day05

@TOC

CC2530的串行接口原理與應(yīng)用

  • 微控制器與微處理器的區(qū)別
  • CC2530有兩個(gè)串行通信接口USART0和USART1,它們能夠分別運(yùn)行于異步UART模式或者同步SPI模式磁滚。
  • 接地線垂攘,把多個(gè)設(shè)備的電平參考源統(tǒng)一起來晒他。

寄存器

[圖片上傳失敗...(image-b27840-1626001720406)]

  1. U0CSR寄存器
  • 置1陨仅,異步設(shè)置
    [圖片上傳失敗...(image-53cffd-1626001720406)]
  • 置1灼伤,設(shè)置為接收
    [圖片上傳失敗...(image-a0d764-1626001720406)]
  1. U0UCR寄存器
  • 校驗(yàn)位
    [圖片上傳失敗...(image-3de9f2-1626001502434)]
  • 設(shè)置幾位傳輸(不同的位寄存器不同)
    [圖片上傳失敗...(image-a071eb-1626001502434)]
  • 是否使用奇偶校驗(yàn)位
    [圖片上傳失敗...(image-a4b7dc-1626001502434)]
  • 停止位
    [圖片上傳失敗...(image-1dccce-1626001502434)]
  • 起始(使用默認(rèn)設(shè)置)
  1. U0GCR寄存器
  • 波特率設(shè)置(先清零&=~0x1F狐赡、|=)
    [圖片上傳失敗...(image-35cfd9-1626001502434)]
  1. U0BAUD寄存器
  • 波特率控制(可以直接賦值=)
  • 系統(tǒng)時(shí)鐘使用32MHz


    32MHz系統(tǒng)時(shí)鐘常用的波特率設(shè)置

串口初始化

  1. 步驟


    串口初始化步驟
  2. 程序


    串口初始化程序
  • P2DIR設(shè)置為串口優(yōu)先(查手冊(cè))
  • U0DBUF,讀和寫操作的是不同的寄存器
  1. 串口發(fā)送字符串函數(shù)


    串口發(fā)送字符串函數(shù)
  2. 串口接收中斷函數(shù)


    串口接收中斷函數(shù)

DHT11溫濕度

  • 硬件選擇-根據(jù)所測(cè)環(huán)境、需求
  • DHT11的供電電壓范圍為3-5.5V览祖,選擇3.3V(和板子一樣)穴墅,否則可能會(huì)燒引腳。
  • 串行接口使用半雙工
  • 一次通訊時(shí)間4ms左右皇钞,一次完整的數(shù)據(jù)傳輸為40bit夹界。
  • 數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù) +8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù) +8bit校驗(yàn)和
  • 通訊過程
    [圖片上傳失敗...(image-2985cd-1626001502434)]
  • 總線空閑狀態(tài)為高電平,主機(jī)把總線拉低等待DHT11響應(yīng),主機(jī)把總線拉低必須大于18毫秒,保證DHT11能檢測(cè)到起始信號(hào)可柿。DHT11接收到主機(jī)的開始信號(hào)后,等待主機(jī)開始信號(hào)結(jié)束,然后發(fā)送80us低電平響應(yīng)信號(hào).主機(jī)發(fā)送開始信號(hào)結(jié)束后,延時(shí)等待20-40us后, 讀取DHT11的響應(yīng)信號(hào),主機(jī)發(fā)送開始信號(hào)后,可以切換到輸入模式,或者輸出高電平均可, 總線由上拉電阻拉高复斥。
    [圖片上傳失敗...(image-e3c40d-1626001502434)]
  • 總線為低電平,說明DHT11發(fā)送響應(yīng)信號(hào),DHT11發(fā)送響應(yīng)信號(hào)后,再把總線拉高80us,準(zhǔn)備發(fā)送數(shù)據(jù),每一bit數(shù)據(jù)都以50us低電平時(shí)隙開始,高電平的長(zhǎng)短定了數(shù)據(jù)位是0還是1.格式見下面圖示.如果讀取響應(yīng)信號(hào)為高電平,則DHT11沒有響應(yīng),請(qǐng)檢查線路是否連接正常.當(dāng)最后一bit數(shù)據(jù)傳送完畢后目锭,DHT11拉低總線50us,隨后總線由上拉電阻拉高進(jìn)入空閑狀態(tài)痢虹。
    [圖片上傳失敗...(image-27c34f-1626001502434)]

作業(yè)

  • 調(diào)試奖唯。將數(shù)據(jù)串口傳輸顯示到電腦糜值。每三秒鐘采集一次臀玄。(數(shù)字轉(zhuǎn)成字符 顯示)
  • CC2530 + DTH11
  • DTH11.h
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define DATA_PIN P0_0
//溫濕度定義
uchar ucharFLAG,uchartemp;
uchar shidu_shi,shidu_ge,wendu_shi,wendu_ge=4;
uchar ucharT_data_H,ucharT_data_L,ucharRH_data_H,ucharRH_data_L,
ucharcheckdata;
uchar ucharT_data_H_temp,ucharT_data_L_temp,ucharRH_data_H_temp,ucharRH_data_L_temp,ucharcheckdata_temp;
uchar ucharcomdata;
//延時(shí)函數(shù)
void Delay_us() //1 us 延時(shí)
{
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
}
void Delay_10us() //10 us 延時(shí)
{
 Delay_us();
 Delay_us();
}
void Delay_ms(uint Time)//n ms 延時(shí)
{
 unsigned char i;
 while(Time--)
 {
 for(i=0;i<100;i++)
 Delay_10us();
 }
}
//溫濕度傳感
void COM(void) // 溫濕寫入
{
 uchar i;
 for(i=0;i<8;i++)
 {
   ucharFLAG=2;
   while((!DATA_PIN)&&ucharFLAG++);
   Delay_10us();
   Delay_10us();
   Delay_10us();
   uchartemp=0;
   if(DATA_PIN)uchartemp=1;
   ucharFLAG=2;
   while((DATA_PIN)&&ucharFLAG++);
   if(ucharFLAG==1)break;
   ucharcomdata<<=1;
   ucharcomdata|=uchartemp;
 }
}
void DHT11(void) //溫濕傳感啟動(dòng)
{
 DATA_PIN=0;
 Delay_ms(30); //>18MS
 DATA_PIN=1;
 P0DIR &= ~0x01; //重新配置 IO 口方向 輸入
 Delay_10us();
 Delay_10us();
 Delay_10us();
 Delay_10us();
 if(!DATA_PIN)
 {
   ucharFLAG=2;
   while((!DATA_PIN)&&ucharFLAG++);
   ucharFLAG=2;
   while((DATA_PIN)&&ucharFLAG++);
   COM();
   ucharRH_data_H_temp=ucharcomdata;
   COM();
   ucharRH_data_L_temp=ucharcomdata;
   COM();
   ucharT_data_H_temp=ucharcomdata;
   COM();
   ucharT_data_L_temp=ucharcomdata;
   COM();
   ucharcheckdata_temp=ucharcomdata;
   DATA_PIN=1;
  
  uchartemp=(ucharT_data_H_temp+ucharT_data_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp);
   if(uchartemp==ucharcheckdata_temp)
   {
     ucharRH_data_H=ucharRH_data_H_temp;
     ucharRH_data_L=ucharRH_data_L_temp;
     ucharT_data_H=ucharT_data_H_temp;
     ucharT_data_L=ucharT_data_L_temp;
     ucharcheckdata=ucharcheckdata_temp;
   }
   wendu_shi=ucharT_data_H/10;
   wendu_ge=ucharT_data_H%10;
  
   shidu_shi=ucharRH_data_H/10;
   shidu_ge=ucharRH_data_H%10;
 }
 else //沒用成功讀取,返回 0
 {
   wendu_shi=2;
   wendu_ge=2;
  
   shidu_shi=0;
   shidu_ge=0;
 }
 P0DIR |= 0x01; //IO 口需要重新配置
}

  • UART.c
#include <ioCC2530.h>
#include <string.h>
#include"DHT11.h"

//typedef unsigned int uint;
#define TX_SIZE 20
#define TX_STRING "Hello World "

char TxData[TX_SIZE]; //存儲(chǔ)發(fā)送字符串
char TxData1[TX_SIZE];
/*****************************************************
***********************
* 名 稱: DelayMS()
* 功 能: 以毫秒為單位延時(shí) 16M 時(shí)約為 535,32M 時(shí)要調(diào)整,系統(tǒng)
時(shí)鐘不修改默認(rèn)為 16M
* 入口參數(shù): msec 延時(shí)參數(shù)累贤,值越大延時(shí)越久
* 出口參數(shù): 無
******************************************************
**********************/
void DelayMS(uint msec)
{ 
 uint i,j;
 for (i=0; i<msec; i++)
 for (j=0; j<1070; j++);
}


/*****************************************************
***********************
* 名 稱: InitUart()
* 功 能: 串口初始化函數(shù)
* 入口參數(shù): 無
* 出口參數(shù): 無
******************************************************
**********************/
void InitUart(void)
{ 
 PERCFG = 0x00; 
 P0SEL = 0x0c; //P0_2,P0_3 用作串口(外設(shè)功能)
 P2DIR &= ~0XC0; //P0 優(yōu)先作為 UART0
 
 U0CSR |= 0x80; //設(shè)置為 UART 方式
 U0GCR |= 11; 
 U0BAUD |= 216; //波特率設(shè)為 115200
 UTX0IF = 0; //UART0 TX 中斷標(biāo)志初始置位 0
}
/*****************************************************
***********************
* 名 稱: UartSendString()
* 功 能: 串口發(fā)送函數(shù)
* 入口參數(shù): Data:發(fā)送緩沖區(qū) len:發(fā)送長(zhǎng)度
* 出口參數(shù): 無
******************************************************
**********************/
void UartSendString(char *Data, int len)
{
 uint i;
 
 for(i=0; i<len; i++)
 {
 U0DBUF = *Data++;
 while(UTX0IF == 0);
 UTX0IF = 0;


 } 
 }
/*****************************************************
***********************
* 程序入口函數(shù)
******************************************************
**********************/
void main(void)
{
 CLKCONCMD &= ~0x40; //設(shè)置系統(tǒng)時(shí)鐘源為 32MHZ

 while(CLKCONSTA & 0x40); //等待晶振穩(wěn)定為 32M
 CLKCONCMD &= ~0x47; //設(shè)置系統(tǒng)主時(shí)鐘頻 32MHZ
 InitUart(); //調(diào)置串口相關(guān)寄存器
 memset(TxData, 0, TX_SIZE); //數(shù)據(jù)清 0
 while(1)
 {
     DHT11();
     TxData[0]=(char)wendu_shi+48;
     TxData[1]=(char)wendu_ge+48;
     TxData1[0]=(char)shidu_shi+48;
     TxData1[1]=(char)shidu_ge+48;
     UartSendString("Temp:",5);
     UartSendString(TxData,2);
     UartSendString("  ",2);
     UartSendString("Humidity:",9);
     UartSendString(TxData1,2);
     UartSendString("\n",1);
     DelayMS(1500); //延時(shí)
 
 
 } 
}

  • 結(jié)果顯示


    結(jié)果截圖

模數(shù)轉(zhuǎn)換(ADC)

  • 測(cè)量物體使用的參考變量穩(wěn)定硼被、高精度
  • 逐次逼近型
  • DMA直接內(nèi)存存取
  1. ADC特征


    ADC特征
  2. ADC輸入


    ADC輸入
  • ADCCON2寄存器


    ADCCON2寄存器

    ADCCON2寄存器
  • ADCCON3寄存器


    ADCCON3寄存器
  • 單次轉(zhuǎn)換使用ADCCON3寄存器
使用宏定義
  1. ADC轉(zhuǎn)換
  • ATEST寄存器ADC的轉(zhuǎn)換分為ADC序列轉(zhuǎn)換和ADC單個(gè)轉(zhuǎn)換始鱼。ADC執(zhí)行一系列的轉(zhuǎn)換医清,并把轉(zhuǎn)換結(jié)果通過DMA移動(dòng)到存儲(chǔ)器会烙,不需要任何CPU的干預(yù)柏腻。
  • ADC序列轉(zhuǎn)換與APCFG寄存器的設(shè)置有關(guān)纸厉,APCFG為8位模擬輸入的I/O引腳設(shè)置,如果模擬I/O使能五嫂,每一個(gè)通道正常情況下應(yīng)是ADC序列的一部分残腌。如果相應(yīng)的模擬I/O被禁用,將啟用差分輸入贫导,處于差分的兩個(gè)引腳必須在APCFG寄存器中設(shè)置為模擬輸入引腳抛猫。
  • ADCCON2.SCH寄存器位用于定義一個(gè)ADC序列轉(zhuǎn)換,它來自ADC輸入孩灯。如果ADCCON2.SCH設(shè)置為一個(gè)小于8的值闺金,轉(zhuǎn)換序列來自AIN0-AIN7的每個(gè)通道上;當(dāng)ADCCON2.SCH設(shè)置為一個(gè)在8和12之間的值峰档,序列包括差分輸入讥巡;當(dāng)ADCCON2.SCH大于或等于12槽棍,為單個(gè)ADC轉(zhuǎn)換缆巧。
  • 除了序列轉(zhuǎn)換陕悬,每個(gè)通道都可以進(jìn)行ADC單個(gè)轉(zhuǎn)換,ADC單個(gè)轉(zhuǎn)換通過配置寄存器狂秦。ADCCON3.SCH完成。當(dāng)通過寫ADCCON3觸發(fā)的一個(gè)單個(gè)轉(zhuǎn)換完成時(shí)堪簿,ADC將產(chǎn)生一個(gè)中斷。
  • ADC的數(shù)字轉(zhuǎn)換結(jié)果可以通過設(shè)置寄存器ADCCON1獲得虑瀑。
  • 開啟ADCCON1
ADCCON1=0x40;
  • 左對(duì)齊,先放H的高位


    ADCH和ADCL
  • 操作步驟


    操作步驟
  • 模擬I/O使能


    模擬I/O使能
  • ADC 轉(zhuǎn)換必須使用32MHz
CLKCONCMD &= ~0x40;

————————————————
版權(quán)聲明:本文為CSDN博主「路燈謠」的原創(chuàng)文章主届,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明绘闷。
原文鏈接:https://blog.csdn.net/lululumiao/article/details/118614056

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末燎潮,一起剝皮案震驚了整個(gè)濱河市确封,隨后出現(xiàn)的幾起案子颜曾,更是在濱河造成了極大的恐慌,老刑警劉巖诡曙,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異慎璧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疙驾,“玉大人它碎,你說我怎么就攤上這事傻挂。” “怎么了绪抛?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵尖飞,是天一觀的道長(zhǎng)贞铣。 經(jīng)常有香客問我,道長(zhǎng)圣勒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮用含,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缸夹。我一直安慰自己橡类,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布勇凭。 她就那樣靜靜地躺著寓盗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼虫给。 笑死舆床,一個(gè)胖子當(dāng)著我的面吹牛蒿往,可吹牛的內(nèi)容都是我干的颊埃。 我是一名探鬼主播饥漫,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼彻消,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤列林,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后虏缸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慨灭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年语淘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹅心。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碉京,到底是詐尸還是另有隱情界弧,我是刑警寧澤设凹,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布奋姿,位于F島的核電站头遭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜈首。R本人自食惡果不足惜赏淌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一鼠冕、第九天 我趴在偏房一處隱蔽的房頂上張望博脑。 院中可真熱鬧该押,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工赖舟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留豫喧,地道東北人缕棵。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓忽匈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扇售,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容