《無線通信開發(fā)技術及實踐》課件實踐5_第1頁
《無線通信開發(fā)技術及實踐》課件實踐5_第2頁
《無線通信開發(fā)技術及實踐》課件實踐5_第3頁
《無線通信開發(fā)技術及實踐》課件實踐5_第4頁
《無線通信開發(fā)技術及實踐》課件實踐5_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

實踐5UHF無線數(shù)傳技術實踐5.G.1實踐5.G.1

實踐5.G.1

編寫一個單片機讀取CC1101模塊芯片版本號和接收信號強度的程序,所讀取的內容用LCD12864液晶屏顯示。

【分析】芯片版本號和接收信號強度信息的讀取需通過讀取相應的狀態(tài)寄存器實現(xiàn),這些寄存器分別為標志芯片版本編號的VERSION寄存器和指示接收信號強度的RSSI寄存器。其中,CC1101的電子版本編號為0x04,即VERSION的值恒為0x04;而接收信號強度是隨時間變化的,即RSSI的值不唯一。圖S5-1硬件電路采用單片機控制實現(xiàn)LCD12864顯示CC1101狀態(tài)寄存

器的內容,首先要實現(xiàn)單片機對CC1101狀態(tài)寄存器的讀取,然后要實現(xiàn)LCD12864對讀取內容的顯示。因此,本實驗是CC1101驅動與LCD12864驅動程序的融合。關于CC1101完整的驅動程序,在本書理論篇中已有完整的講解;關于LCD12864字符顯示驅動程序,在實踐2也有講解。但要注意,狀態(tài)寄存器的值為單字節(jié)的十六進制數(shù),而LCD12864驅動程序完成的是單個字符或者字符串的顯示。因此,要保證正確顯示所讀取的內容,必須在LCD12864的驅動函數(shù)中添加一個將十六進制數(shù)轉換為字符的函數(shù)。

硬件電路如圖S5-1所示。

【參考解決方案】

1.準備工作

將實驗板接通?+5V電源,連接JTAG仿真器,將LCD12864液晶屏插入插槽,開啟電源開關,查看仿真器

端口號(此處為COM12),在IAR編譯器中做好相關設置。

2.源代碼編寫

新建一個IAR工程,在包含main.c的基礎上,依次添加CC1101.h和CC1101.c,LCD12864.h和LCD12864.c四個文件。

1)?main.c

main.c文件中包含cc1101.h和LCD12864.h兩個頭文件,實現(xiàn)了I/O端口初始化、LCD初始化、SPI初始化、CC1101復位、CC1101初始化、LCD顯示相關狀態(tài)寄存器的值等內容。main.c的源程序代碼如下:

#include<iom16.h>

#include<intrinsics.h>

#include<string.h>

#include“CC1101.h”

#include“LCD12864.h”

INT8UCCRxBuf[32];

voidIO_init();

voidread_status_reg();

2)?CC1101相關文件

采用模塊化的編碼風格,分別編寫CC1101.c和CC1101.h,其源程序代碼同任務描述5.D.1。限于本書的

篇幅,此處不再列出,請參見前述相關程序代碼。

3)?LCD12864相關文件

關于LCD12864的驅動函數(shù),在實踐2已有講述,此處只是在其基礎上,在LCD12864.c文件中添加一個將十六進制數(shù)轉換為字符輸出的函數(shù)void

LCD_hex_display

(ucharreg_value),并在LCD12864.h中增加相應的函數(shù)聲明即可。

voidLCD_hex_display(ucharreg_value)函數(shù)的實現(xiàn)程序代碼如下:限于本書的篇幅,關于LCD12864.h和LCD12864.c的完整內容,此處不再列出,請參考前述相關程序代碼。

3.下載調試

將程序下載至實驗板,全速運行后,實驗結果如下:液晶屏上逐漸出現(xiàn)四行內容,分別為提示語和相應寄存器的值,如圖S5-2所示。圖S5-2液晶顯示結果

實踐5.G.2

配合按鍵、LED燈、蜂鳴器,實現(xiàn)單片機控制兩個CC1101模塊之間的收/發(fā)通信。

【分析】在實踐3.G.2中,采用單片機控制串口收/發(fā),結合按鍵、LED燈、蜂鳴器和LCD,實現(xiàn)了單片機通過兩個藍牙模塊進行串口通信。與藍牙模塊不同的是,CC1101模塊作為數(shù)傳模塊,不存在AT指令,更無需操作AT指令使其進入透傳模式,可直接進行數(shù)據的發(fā)送和接收。本實踐采用與實踐3.G.2相同的思路,實現(xiàn)兩個CC1101模塊之間的SPI收/發(fā)通信。兩個模塊的接收和發(fā)送均由單片機通過SPI接口控制,而且要使用CC1101必須實現(xiàn)完整的CC1101驅動程序。

硬件電路如圖S5-3所示。圖S5-3硬件電路

【參考解決方案】

1.準備工作

將實驗板通過JTAG仿真器連至PC機上,查看端口號(此處為COM12),做好IAR中的相關設置。

2.代碼編寫

本實踐仍采用模塊化的編碼風格,分別編寫主函數(shù)main.c、按鍵掃描keyscan.h和keyscan.c、CC1101驅動CC1101.c和CC1101.h。

1)?main.c

CC1101模塊通過SPI串口與單片機相連,因此主函數(shù)采用了任務函數(shù)結合定時器中斷的方法控制蜂鳴器響、清屏、LED2亮和按鍵掃描及SPI發(fā)送,是實際工程應用中比較常用的編程方法。在主函數(shù)中,首先完成SPI和CC1101的初始化,設置好發(fā)射功率后,進入接收模式并清空CC1101接收緩存數(shù)組;然后,在任務函數(shù)中實現(xiàn)CC1101的數(shù)據接收與發(fā)送,以及蜂鳴器和LED燈控制。

main.c的編寫思路與實踐3.G.2類似,其源程序代碼如下:#include<iom16.h>

#include<intrinsics.h>

#include<string.h>

#include"CC1101.h"

#include"keyscan.h"

#defineCLR_BEEPPORTD|=BIT(PD7) //蜂鳴器不響

#defineSET_BEEPPORTD&=~BIT(PD7) //蜂鳴器響

#defineCLR_LEDPORTC|=BIT(PC7) //LED2滅

#defineSET_LEDPORTC&=~BIT(PC7) //LED2亮INT8Ubeep=0;

INT8Uled=0;

INT8Ustatus=0;

INT8Ukey=0;

INT8UGDO0_flag=0;

INT8Uleng=0;

INT8UCCRxBuf[32];

INT16UCCRxCounter;

INT8Usend[]="HELLO";

INT8U__flashASCII[]="0123456789ABCDEF";

voidTIMER2_init();

voidIO_init();

voiddelayms(INT16Ut);

voidtask0(void);

voidtask1(void);

voidtask2(void);

voidtask3(void);

2)?CC1101相關文件

分別編寫CC1101.c和CC1101.h,其源程序代碼參見任務描述5.D.1,限于本書的篇幅,此處不再列出。

3)按鍵掃描

分別編寫keyscan.h和keyscan.c,源程序代碼同實踐3.G.2,請參考前述內容,此處不再詳細列出。

3.下載驗證

使用JTAG仿真器分別將上述源程序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論