




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Zigbee無線傳感網技術與應用數字電子時鐘0301了解按鈕驅動原理03掌握編寫按鈕程序方法05掌握編寫外部中斷方法04了解中斷概念02掌握設置I/O輸入方法學習目標Learningobjectives任務三:數字電子時鐘制作任務要求要求讀者學習CC2530單片機定時器中斷的使用方法,了解定時器在單片機中的應用,了解LED點陣屏基本驅動原理,結合上述兩個任務完成時鐘制作。任務目標Missionobjectives01了解定時中斷的概念03掌握CC2530定時中斷的配置方法04能夠編寫定時中斷的中斷處理函數02了解中斷的處理過程儲備知識
定時/計數器的概念定時/計數器是一種能夠對時鐘信號或外部輸入信號進行計數,當計數值達到設定要求時便向CPU提出處理請求,從而實現定時或計數功能的外設。在單片機中,一般使用Timer表示定時計數器。
定時/計數器的作用定時/計數器的基本功能是實現定時和計數,且在整個工作過程中不需要CPU進行過多參與,它的出現將CPU從相關任務中解放出來,提高了CPU的使用效率。例如我們之前實現LED燈閃爍時采用的是軟件延時方法,在延時過程中CPU通過執行循環指令來消耗時間,在整個延時過程中會一直占用CPU,降低了CPU的工作效率。若使用定時/計數器來實現延時,則在延時過程中CPU可以去執行其他工作任務。1.定時器什么是定時器儲備知識
定時/計數器基本工作原理無論使用定時/計數器的哪種功能,其最基本的工作原理是進行計數。定時/計數器的核心是一個計數器,可以進行加1(或減1)計數,每出現一個計數信號,計數器就自動加1(或自動減1),當計數值從最大值變成0(或從0變成最大值)溢出時定時/計數器便向CPU提出中斷請求。計數信號的來源可選擇周期性的內部時鐘信號(如定時功能)或非周期性的外界輸入信號(如計數功能)。1.定時器讓定時器開始工作由于CC2530芯片共有4個定時器,其中用法上各有不同,教材重點介紹定時器1的使用。打開芯片手冊,搜索關鍵字“定時器”,在目錄上找到定時器1(即定時器中斷1),根據目錄找到具體內容在94頁,跳轉至94頁,查看內容與相關寄存器。定時器1為一個16位定時器,共有三種不同的工作模式,自由運行模式、摸計數器模式、正計數/倒計數模式。教材重點介紹正計數/倒計數模式。儲備知識查看芯片手冊確定所需寄存器T1CC0H和T1CC0L分別為16位計數器的高8位和低8位。當達到計數值溢出時,產生中斷。工作在正計數/倒計數模式下,計數器反復從0x0000開始,正計數直到達到T1CC0H:T1CC0L保存的數值。計數器將倒計數到0x0000,因此計數的時間為兩倍的時間。正計數/倒計數模式過程就像一個沙漏。圖:正計數/到計數模式1.定時器儲備知識如上圖所示,如將T1CC0H:T1CC0L設置為0x0100,那個他的計數時間就等于0x0100*2=0x0200的時間,轉換為十進制即512,但該512數值不是最后的時間,而是時鐘周期的時間,需轉換為時間要將時間乘上芯片時鐘,即512*(1/16000000)=0.000032s。同理如將T1CC0H:T1CC0L設置為0xffff=65535最大值那么它的最大定時時間將為(65535*2)*(1/16000000)=0.008191875s,如果軟件需要定時時間為1s,由于芯片速度很快,這種定時根本無法,所以TI公司在設計定時器時引入了一個分頻的概念,即讓芯片速度慢下來。分頻有1、8、32、128四種分頻模式,分頻也就是將結果乘上分頻數,如設置在128分頻模式,則最大定時時間為0.008191875s*128=1.04856s這樣做就滿足了我們定時需求。1.定時器儲備知識分頻寄存器的設置,在芯片手冊可搜索到寄存器“T1CTL”,如圖?所示。同時它也控制著定時器1工作在那個模式中。圖:T1CTL寄存器1.定時器儲備知識如上圖所示,將定時器工作在分頻模式即可自定義設置出各種時間,如需設置一個0.1s定時時間,則可逆向計算出結果,假設系統工作在32分頻下,時鐘頻率默認為16MHZ,算法如下所示。公式:0.1/32/(1/16000000)/2=250000=0x61A8計算時間/分頻數/(1/時鐘頻率)/2=結果1.定時器一、根據公式計算定時器T1CC0H:T1CC0L賦值結果
定時器分頻為8,時鐘頻率為12MHZ,定時時間0.01s,請計算結果。
定時器分頻為32,時鐘頻率為32MHZ,定時時間200ms,請計算結果。思考練習:儲備知識如上圖所示,如要設置分頻頻率為32,要工作在正計數/倒計數模式下,T1CTL應為:T1CTL|=0x0b,(00001011)10為32分頻,11為工作在正計數/倒計數模式下。1.定時器一、根據圖?計算T1CTL結果
定時器分頻為8,正計數/到計數模式,在空白處寫出計算結果。
定時器分頻為32,模模式,在空白處寫出計算結果。思考練習:儲備知識1.定時器在確定計算時間后則需要使能定時器中斷,在任務二中介紹過一個寄存器IEN1,其控制控制著中斷使能,開啟定時器中斷也需要開啟與其對應位。故開啟定時器1中斷使能需使IEN1|=0x02。總結如需定時0.1s,定時器時鐘頻率16MHZ并開啟定時器代碼如下所示:IEN1|=0x02;//開啟定時器1中斷使能T1CTL|=0x0b;//設置32分頻
正計數/到計數模式T1CC0H=0x61;//0.1s賦值T1CC0L=0xA8;EA=1; //開啟總中斷使能儲備知識LED顯示屏(LEDdisplay)是一種平板顯示器,由一個個小的LED模塊面板組成,用來顯示文字、圖像、視頻、錄像信號等各種信息的設備。2.顯示模塊LED廣告屏本文教材使用“型號YX_TPLED廣告屏”,其產品特點:1)最長支持20個漢字的單色LED條屏幕(16*320點),1/16掃描;2)內置簡體中文(16點宋體),英文數字字庫;3)支持八種顯示效果:左移、右移,下移,往下覆蓋、往上覆蓋、翻白顯示、閃爍顯示、立即打出。4)串口更新字幕,支持RS-232和RS485通訊。5)支持單行、雙行,單行居中顯示。儲備知識本次選用的LED廣告屏使用串口通信,所以需要將LED廣告屏與Zigbee開發板串口相連,另外一頭連接220V電源。2.顯示模塊驅動原理LED廣告屏采用串口通信,可通過發送串口指令達到控制廣告屏文字的效果,其控制指令文檔保存在配套資料中,感興趣的讀者可自行查看指令集編寫對應程序。(由于還未學習過串口收發程序,故本任務在提供的LED.h頭文件實現調用即可)3.編寫定時器中斷本任務所需軟件已安裝至電腦可直接使用。本任務所需硬件:下載器、ZigBee開發板、5V電源適配器、USB下載線。環境準備任務實施任務實施
編寫定時器中斷,實現1秒進入中斷;
聲明hour,min,sec三個變量分別代表小時、分鐘、秒;
Sec變量每秒加1、60秒后分鐘加1、60分鐘后小時加1,其余清0。任務要求編寫代碼步驟1:新建工程->工程名稱為“定時器中斷”->保存->新建語言程序.c文件名稱為“main.c”->設置Opion->編寫最簡單的代碼,代碼如右所示。(新建工程具體步驟,不再重復介紹)#include"iocc2530.h"voidmain(){
while(1){
}}3.編寫定時器中斷任務實施步驟2:編寫定時器初始化代碼,設置分頻為32分頻,工作在正計數/倒計數模式。代碼如下所示。3.編寫定時器中斷#include"iocc2530.h"voidmain(){IEN1|
=
0x02;//開啟定時器1中斷使能T1CTL|=0x0b;//設置32分頻
正計數/到計數模式T1CC0H=0x61;//0.1s賦值T1CC0L=0xA8;EA=1; //開啟總中斷使能
while(1){
}}任務實施步驟3:編寫中斷使能函數T1_VECTOR,代碼如下所示。3.編寫定時器中斷#pragmavector=T1_VECTOR__interruptvoidT1_INT(void){count++;
if(count==10){count=0;P1=~P1;//加上LED燈方便查看結果是否正確}}任務實施步驟4:斷點調試,查看代碼是否進入定時器中斷,調試代碼如右圖所示。并全速執行代碼查看效果,LED燈全亮間隔1s全滅。3.編寫定時器中斷步驟5:聲明全局變量sec、min、hour,代碼如下所示。unsigned
charhour=0;unsigned
charmin=0;unsigned
charsec=0;任務實施3.編寫定時器中斷步驟6:在定時器中斷函數中,編寫累加數字代碼,代碼如下所示。#pragmavector=T1_VECTOR__interruptvoidT1_INT(void){count++;
if(count==10)//到達一秒{count=0;sec++;//秒加1
if(sec==60)//判斷累加到60{sec=0;//清0min++;//分鐘加1
if(min==60)//判斷累加到60{min=0;//清0hour++;//小時加1
if(hour==24)//到達24小時{hour=0;//小時清0}}}}}任務實施3.編寫定時器中斷步驟7:斷點調試,查看代碼是否進入定時器sec累加代碼,之后全速運行1分鐘,觀察sec,min變量變化情況,斷點調試如下圖所示。一、編寫程序,在原有程序基礎上,完成如下任務:修改分頻頻率為128,定時器中斷時間為0.2秒。使程序正常運行。思考練習:4.驅動LED顯示任務實施本任務所需軟件已安裝至電腦可直接使用。本任務所需硬件:下載器、ZigBee開發板、5V電源適配器、USB下載線、LED顯示屏。環境準備4.驅動LED顯示任務實施調用打開已有LED顯示屏工程,調用函數,顯示“你好世界”。任務要求1)拆開LED屏串口延長線一側的蓋板,將內部的串口線拔出,換成雙頭均為母頭的串口線,如圖?所示。2)根據線路連接圖連接線路,線路連接圖如下所示。線路連接4.驅動LED顯示任務實施步驟1:新建工程->工程名稱為“LED驅動”->保存->新建語言程序.c文件名稱為“main.c”->設置Opion->編寫最簡單的代碼,代碼如右所示。(新建工程具體步驟,不再重復介紹)編寫代碼(由于讀者還未學習過串口收發程序,故本任務在提供的LED.h頭文件實現調用即可)#include"iocc2530.h"voidmain(){
while(1){
}}4.驅動LED顯示任務實施步驟2:復制“\配套資料\項目三\任務三\led.h”到工程根目錄,如下圖所示。圖:復制LED.h頭文件步驟3:編寫引用LED.h頭文件,代碼如下所示。#include"LED.h"4.驅動LED顯示任務實施步驟4:在main函數開始調用串口初始化函數Uart_Init(),代碼如下所示。voidmain(){UartInit();
while(1){
}}4.驅動LED顯示任務實施步驟5:調用程序LED_TX()函數顯示漢字(注意漢字為2個字節),代碼如下所示。voidmain(){UartInit();LED_TX("你好世界",8);
while(1){
}}代碼小貼士:代碼:調用函數:LED_TX("你好世界",8);,表示顯示“你好世界”字符。函數:LED_TX(參數1,參數2);參數1:LED顯示屏顯示的字符串參數2:顯示字符串數量,注意漢字為2個字節。4.驅動LED顯示任務實施步驟6:執行代碼,查看顯示效果。圖:顯示效果一、編寫程序,在原有程序基礎上,完成如下任務:實現sw1按下時,顯示變為“00:00:00”。并且局中顯示。思考練習:5.制作數字時鐘任務實施本任務所需軟件已安裝至電腦可直接使用。本任務所需硬件:下載器、ZigBee開發板、5V電源適配器、USB下載線、LED顯示屏。環境準備任務實施
ZigBee開發板上電時LED廣告屏從00:00:00開始顯示;
時鐘計時開啟,每秒秒鐘加一,60秒進1分鐘,60分鐘進1小時,24小時后清0;
按下sw1顯示的小時加1累加至24小時后清0,按下sw2顯示的分鐘加1累加至60后清0。任務要求編寫代碼步驟1:結合上述兩段代碼,形成任務三代碼,代碼如下所示:5.制作數字時鐘任務實施5.制作數字時鐘#include"iocc2530.h"#include"LED.h"unsigned
charhour=0;unsigned
charmin=0;unsigned
charsec=0;unsigned
charcount=0;voidmain(){
UartInit();IEN1|=0x02;//開啟定時器1中斷使能T1CTL|=0x0b;//設置32分頻正計數/到計數模式T1CC0H=0x61;//0.1s賦值T1CC0L=0xa8;EA=1;//開啟總中斷使能
P1DIR=0x1b;
while(1){
}}#pragmavector=T1_VECTOR__interruptvoidT1_INT(void){T1STAT&=~0x20;count++;
if(count==10)//到達一秒{P1=~P1;
count=0;sec++;//秒加1
if(sec==60)//判斷累加到60{sec=0;//清0min++;//分鐘加1
if(min==60)//判斷累加到60{min=0;//清0hour++;//小時加1
if(hour==24)//到達24小時{hour=0;//小時清0}}}}}任務實施步驟2:編寫一個全局字符數組變量,有于存放顯示緩存,代碼如下所示:5.制作數字時鐘chartime[]={'','0','0',':','0','0',':','0','0'};步驟3:在定時器中斷調用LED顯示函數LED_TX(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論