
單片機定時器在平時的工作中,其主要的功能之一就是為整個51單片機系統提供延時程序的精確控制。此前我們曾經從硬件設置和程序編寫兩個方面,為大家介紹過如何利用單片機定時器進行精確延時,今天小編找到了兩種能夠精確完成延時程序設定方法,在這里與各位工程師一同分享。
首先要為大家介紹的是利用示波器確定單片機定時器延時時間的方法。這種方法雖然并不是很常見,但是也同樣可以幫助工程師完成延時程序的設定。這種設定方法的操作流程如下:編寫一個實現延時的函數,在該函數的開始置某個I/O口線如P1.0為高電平,在函數的最后清P1.0為低電平。在主程序中循環調用該延時函數,通過示波器測量P1.0引腳上的高電平時間即可確定延時函數的執行時間,其具體程序的設定情況為:
可以看到,這種延時程序的設定并不是非常復雜,操作起來也比較簡單。在完成了對單片機定時器的延時程序設定之后,接下來我們僅需要把P1.0接入示波器,運行上面的程序即可。在這種程序的運行過程中,我們可以看到P1.0輸出的波形為周期是3ms的方波。其中,高電平為2ms,低電平為1ms,即for循環結構的執行時間為1ms。通過改變循環次數,可得到不同時間的延時。當然,也可以不用for循環而用別的語句實現延時。這里討論的只是確定延時的方法。
第二種要為大家介紹的單片機定時器延時程序設定方式,是使用反匯編工具計算延時時間的方法。在平時的應用過程中,我們可以選擇用KeilC51中的反匯編工具計算延時時間,在反匯編窗口中可用源程序和匯編程序的混合代碼或匯編代碼顯示目標應用程序。為了說明這種設定方法,這里我們還是使用上面的for循環結構為案例進行解說。如果要在該程序中加入這一循環結構,首先我們需要選擇buildtaget,然后再單擊start/stopdebugsession按鈕進入程序調試窗口,最后打開Disassemblywindow,找出與這部分循環結構相對應的匯編代碼,具體設定情況如下:
從該程序的設置過程中我們可以比較明顯的看出,在0x000F~0x0017中,一共有8條語句,分析語句可以發現并不是每條語句都執行DlyT次。然而,其核心循環只有0x0011~0x0017共6條語句,總共由8個機器周期,第1次循環先執行“CLRA”和“MOVR6,A”兩條語句,需要2個機器周期,每循環1次需要8個機器周期,但最后1次循環需要5個機器周期。DlyT次核心循環語句消耗(2+DlyT×8+5)個機器周期,當系統采用12MHz時,其精度為7μs。而當采用while(DlyT--)循環體時,DlyT的值存放在R7中。相對應的匯編代碼如下:
在這段單片機定時器延時程序的運行過程中,本階段循環語句執行的時間可計算為為(DlyT+1)×5個機器周期,即這種循環結構的延時精度為5μs。通過實驗不難發現,如果我們將while(DlyT--)改為while(--DlyT),經過反匯編后就能夠得到一個新的代碼,我們可以將這一代碼寫為C:0x0014DFFEDJNZR7,C:0014//2T。相信很多工程師應該已經看出,這時的代碼只有1句,占用2個機器周期,精度達到2μs,循環體耗時DlyT×2個機器周期。
聲明:本內容為作者獨立觀點,不代表電源網。本網站原創內容,如需轉載,請注明出處;本網站轉載的內容(文章、圖片、視頻)等資料版權歸原作者所有。如我們采用了您不宜公開的文章或圖片,未能及時和您確認,避免給雙方造成不必要的經濟損失,請電郵聯系我們,以便迅速采取適當處理措施;歡迎投稿,郵箱∶editor@netbroad.com。
新人必看 單片機定時器應用實例解析 | 16-01-11 09:20 |
---|---|
解疑答惑 單片機定時器常見兩大應用問題解析 | 15-12-10 09:25 |
新人小白必看 單片機定時器基礎概念科普 | 15-12-03 09:37 |
基于51單片機定時器的電子時鐘設計方案分享 | 15-11-26 09:41 |
兩大單片機定時器中斷時間誤差原因總結分析 | 15-11-19 09:25 |
微信關注 | ||
![]() |
技術專題 | 更多>> | |
![]() |
技術專題之EMC |
![]() |
技術專題之PCB |