日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
單片機C51編程幾個有用的模塊(1)
單片機C51編程幾個有用的模塊(1)
 更新時間:2008-8-17 16:47:19  點擊數(shù):12
【字體: 字體顏色
Keil C51常用功能模塊使用說明
說明
本文檔包括單片機系統(tǒng)中常用到的時鐘中斷、通訊及鍵盤掃描等模塊(見所附源程序)的說明。這些模塊使用前后臺系統(tǒng)模型。為達到最大的靈活性, 需要在用戶工程中定義config.h文件, 在其中定義各模塊可選參數(shù)的設置,而不是直接更改源代碼。
這些可選內容大部分為宏定義,如果不定義宏相應的功能在編譯時被屏蔽,不會增加代碼長度。 具體可選內容見各模塊中的說明。
在Config.h文件中還要包含一個單片機硬件的資源頭文件。
各模塊使用了定義在Common.h中的一些數(shù)據(jù)類型。如:BIT(bit)&nbspBYTE(unsigned&nbspchar)等,具體請參見源程序。

時鐘模塊
在單片機軟件設計中, 時鐘是重要資源, 為了充分利用時鐘資源, 故設計本時鐘模塊。 本模塊使用定時器0,在完成用戶指定功能的同時, 還能夠自動處理一些其它模塊中與時鐘相關的信息。
時鐘模塊由聲明文件Timer.h以及實現(xiàn)文件Timer.c組成。
用戶應該在Config.h中定義宏TIMER_RELOAD來設定定時器0的重裝載初值。推薦的定時器0的中斷時間大于1毫秒。

在程序的初始化階段調用時鐘模塊的初始化函數(shù)InitTimerModule()之后,就可以使用時鐘模塊所以支持的各種功能。具體描述如下:
延時:當用戶需要進行一定時間的延時時,可以通過調用Delay()來進行,參數(shù)為時鐘中斷的次數(shù)。如時鐘中斷周期為1ms, 想進行100ms的延時, 則可以調用Delay(100)。
注意:
如果延時的絕對時間小于時鐘中斷的周期,則不能夠用本方法做到延時。

定時:當程序中需要使用定時功能時,如等待某外部事件,如果在一定時間內發(fā)生則繼續(xù)執(zhí)行,如果在這段時間內發(fā)生,則認為出現(xiàn)錯誤,轉向錯誤處理機制。
在此推薦一種編程模式,但用戶可以用自己認為更合理的方式處理此類問題。
這里簡單說明一下關于阻塞式函數(shù)及非阻塞式函數(shù)。簡單說,阻塞式函數(shù)就是當檢測完成條件,如果不能夠完成則等待,如:
void&nbspCheckSomething()
{
//&nbspgbitSuccessFlag&nbspis&nbspa&nbspglobal&nbspvariable
while(gbitSuccessFlag ==&nbspFALSE)
{
//&nbspdo&nbspnothing&nbspbut&nbspwaiting
}
}
可以看到,當bitSuccessFlag沒有被設置為TRUE時,函數(shù)保持等待狀態(tài)不返回,這樣就是阻塞式的函數(shù)。
另外一種情況:
BIT&nbspCheckSomething()
{
if(gbitSuccessFlag ==&nbspTRUE)
{
// …
return&nbspTRUE;
}
return&nbspFALSE;
}
在這里,如果所檢測的事件有沒有完成,函數(shù)進行檢測之后,立刻返回,通過返回值報告完成情況,如果沒有完成,則等待調用者分配再次執(zhí)行的機會。這樣的函數(shù)就是非阻塞函數(shù)。
在應用定時功能時,首先要將檢測函數(shù)定義成非阻塞函數(shù)。如上面的第二個版本的CheckSomething。
然后下面模式:
BIT&nbspbitDone =&nbspFALSE;
ResetClock(); //&nbspclear&nbsptimer&nbspinterrupt&nbsptimes&nbspcounter
while(GetClock() <&nbspMAX_WAITINGTIME)
{
if(CheckSomething() ==&nbspTRUE)
{
bitDone =&nbspTRUE;
break;
}
}
if(bitDone ==&nbspFALSE)
{
//&nbspprocess&nbsptime&nbspout
}

或者簡單寫成:
BIT&nbspbitDone =&nbspFALSE;
ResetClock();
while(GetClock() <&nbspMAX_WAITINGTIME && (bitDone =&nbspCheckSomething));
if(bitDone ==&nbspFLASE)

// …
}

軟件看門狗:實現(xiàn)具有局限性的看門狗功能。在程序中合適的地方加入對軟件看門狗的復位函數(shù)ResetWatchDog(),在Config.h中加入宏 TIMER_WATCHDOGTIMEOUT。當程序運行時,如果在發(fā)生TIMER_WATCHDOGTIMEOUT次時鐘中斷之內沒有復位軟件看門狗,  則系統(tǒng)復位。
注意:
如果沒有加入TIMER_WATCHDOGTIMEOUT宏,程序中的ResetWatchDog沒有任何用處,不用刪除。
如果系統(tǒng)不能實現(xiàn)時鐘中斷,則軟件看門狗也同時失去功能。
目前版本的的時鐘模塊的復位功能并不是完全復位,主要表現(xiàn)在當復位之后,系統(tǒng)將不再響應任何中斷。所以軟件看門狗只是一個程序的調試功能,不應該將它用于正式工作的程序,此時應該使用硬件看門狗。

用戶自定義任務:如果想在時鐘中斷內執(zhí)行一些耗時較短的任務,可以定義回調函數(shù)OnTimerInterrupt。函數(shù)原形為:void&nbspOnTimerInterrupt();
如果想在發(fā)生時鐘中斷時執(zhí)行一些功能,而這些功能又耗時相對較長,不合適放在中斷響應函數(shù)內部,則可以在程序中的主循環(huán)中的任意地方添加:& nbspImpTimerService(),同時提供原形為void&nbspOnTimerEvent()的回調函數(shù)。具體的程序如下所示:
void&nbspmain()
{
Initialize();
while(TRUE)
{
// …&nbspworking
[1] [2] [3] [4]  下一頁
  • 上一篇: [轉載]FPGA設計中關鍵問題的研究
  • 下一篇: 單片機C51編程幾個有用的模塊(2)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1