單片機(jī)延時(shí)大家程序中都會(huì)用到,那么怎么實(shí)現(xiàn)呢?通常我們有軟件實(shí)現(xiàn),就是語句循環(huán);或者硬件實(shí)現(xiàn),通過定時(shí)器/計(jì)數(shù)器。
對(duì)于精準(zhǔn)而言,從實(shí)現(xiàn)語言方向看,底層語言有匯編和C語言,通常我們單片機(jī)程序用C語言比較多,但是相對(duì)而言匯編更精準(zhǔn)。從實(shí)現(xiàn)方式來看,有軟件方式和硬件方式,那么對(duì)于C語言延時(shí)的方法哪種更精準(zhǔn)呢?自然是定時(shí)器計(jì)數(shù)器的方式了,為什么呢?一起來看看吧。
1、軟件延時(shí)-循環(huán)實(shí)現(xiàn)
在很多時(shí)候,定時(shí)器會(huì)被用作其他用途,不方便再用作計(jì)數(shù)了,所以這個(gè)時(shí)候就只能用軟件方法延時(shí)。軟件方法延時(shí)就是循環(huán)語句來實(shí)現(xiàn)。
通過使用帶_NOP_();語句的函數(shù)實(shí)現(xiàn),定義一系列不同的延時(shí)函數(shù)。我們都知道C語言最終通過編譯生成匯編,所以一條C語言可能會(huì)反匯編成多條匯編語句,每條匯編指令都有指令周期,比如我們時(shí)鐘是8Mhz的,那么一個(gè)指令周期就是125ns,那么NOP是一個(gè)空指令,占用一個(gè)指令周期。假如我們定義一個(gè)1ms的延時(shí)函數(shù),那么函數(shù)里面全部用NOP指令也需要循環(huán)多次,那么循環(huán)語句也可能會(huì)有多條匯編實(shí)現(xiàn),具體的根據(jù)編譯器不同也不同,我們就很難精確的計(jì)算出實(shí)際的延時(shí),那么計(jì)算大概也可以,然后最有效直接的方法就是通過示波器去測(cè)試然后再去調(diào)整循環(huán)數(shù)。不要太糾結(jié)計(jì)算數(shù)值,可以調(diào)試的。示波器測(cè)試方法更簡(jiǎn)單,在延時(shí)前后加一個(gè)引腳的輸出反轉(zhuǎn)信號(hào)就可以了。
到這里大家是不是覺得其實(shí)用匯編寫延時(shí)函數(shù)就能做到精確了呢?相比較C語言,的確是匯編可以做到很精確的數(shù)值,因?yàn)槲覀兛梢源_定每條指令的指令周期是多少,根據(jù)延時(shí)函數(shù)用到的所有指令都可以計(jì)算出來,最終計(jì)算得出比較精準(zhǔn)的循環(huán)數(shù)值。
2、硬件延時(shí)-定時(shí)器/計(jì)數(shù)器實(shí)現(xiàn)
當(dāng)然在大多情況下,我們還是會(huì)選擇定時(shí)器來做延時(shí)處理,首先我們可以通過時(shí)鐘配置定時(shí)器工作,獲得精準(zhǔn)計(jì)數(shù),具體精準(zhǔn)程度要看給定時(shí)器用的時(shí)鐘了,內(nèi)部時(shí)鐘或者外部晶振的精度。可以實(shí)現(xiàn)極短時(shí)間的精確延時(shí)。
在實(shí)際應(yīng)用中,定時(shí)常采用中斷方式,通過對(duì)定時(shí)器的配置,獲得中斷方式和定時(shí)時(shí)間,然后通過判斷計(jì)數(shù)值獲得想要的延時(shí)效果,用這種方法從程序的執(zhí)行效率和穩(wěn)定性方面考慮都是最佳的方案。大部分項(xiàng)目主循環(huán)需要處理很多事情,如果在主循環(huán)中用軟件延時(shí)方法難免需要等待過程,尤其是長(zhǎng)延時(shí)的時(shí)候不能處理其他,如果好多外設(shè)在工作,會(huì)造成通信不上或者響應(yīng)不及時(shí)。
總結(jié):大部分程序中我們可以寫個(gè)小的軟件延時(shí),必須等待的小延時(shí)可以用軟件的實(shí)現(xiàn),就可以省去對(duì)延時(shí)時(shí)間的判斷了,等待就可以了。但是需要測(cè)試延時(shí)時(shí)間是否準(zhǔn)確,或者可以直接用匯編寫延時(shí)函數(shù)。硬件延時(shí)也有必要實(shí)現(xiàn),根據(jù)實(shí)際需求去應(yīng)用。
大部分延時(shí)應(yīng)用過程中還是會(huì)有些誤差的,這個(gè)是在多個(gè)小的誤差基礎(chǔ)上疊加的,是可以接受的。
責(zé)任編輯:haq
-
單片機(jī)
+關(guān)注
關(guān)注
6037文章
44569瀏覽量
636143 -
軟件
+關(guān)注
關(guān)注
69文章
4966瀏覽量
87645 -
C語言
+關(guān)注
關(guān)注
180文章
7606瀏覽量
137052
原文標(biāo)題:?jiǎn)纹瑱C(jī)延時(shí)的兩種實(shí)現(xiàn)方法
文章出處:【微信號(hào):gh_e7f294a514ca,微信公眾號(hào):?jiǎn)纹瑱C(jī)匠人】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論