單片機(jī)延時(shí)函數(shù)50ms?精準(zhǔn)高效延時(shí)方
這篇文章給大家聊聊關(guān)于單片機(jī)延時(shí)函數(shù)50ms?精準(zhǔn)高效延時(shí)方案,以及單片機(jī)延時(shí)函數(shù)50ms?精準(zhǔn)高效延時(shí)方案設(shè)計(jì)對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站哦。...
這篇文章給大家聊聊關(guān)于單片機(jī)延時(shí)函數(shù)50ms?精準(zhǔn)高效延時(shí)方案,以及單片機(jī)延時(shí)函數(shù)50ms?精準(zhǔn)高效延時(shí)方案設(shè)計(jì)對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站哦。
文章目錄:
- 1、單片機(jī)定時(shí)器延時(shí)計(jì)算方法
- 2、單片機(jī)的延時(shí)函數(shù)如何編寫(xiě)準(zhǔn)確時(shí)間
- 3、單片機(jī)怎么定義延時(shí),是直接寫(xiě)delayms(50),還是需要一個(gè)函數(shù)?看下我的...
- 4、51單片機(jī)用c語(yǔ)言延時(shí)函數(shù)?
- 5、編程利用8051內(nèi)部的定時(shí)器T0產(chǎn)生50ms延時(shí)
單片機(jī)定時(shí)器延時(shí)計(jì)算方法
方式1最長(zhǎng)可定時(shí)13072MS。方式2最長(zhǎng)可定時(shí)512us。根據(jù)計(jì)算公式,X=M-計(jì)數(shù)初值=M-(fosc*t)/12,其中X是計(jì)數(shù)初值,要得到最大定時(shí)時(shí)間X=0;M最大計(jì)數(shù)值,工作方式0時(shí)M=2^13=8192,工作方式1時(shí)M=2^16=65535,工作方式2時(shí)M=2^8=256。fosc晶振頻率。
如圖所示,當(dāng)X0為ON,T0計(jì)時(shí),T0計(jì)時(shí)100*100ms=10s,C0計(jì)數(shù)加一。同時(shí)T0復(fù)位清零,重新計(jì)時(shí)。當(dāng)C0計(jì)數(shù)到20,即20*10s=200s時(shí),Y0輸出。這樣定時(shí)器T0和計(jì)數(shù)器C0就實(shí)現(xiàn)了200s延時(shí)。望采納。。
計(jì)算定時(shí)器,最原始的公式是(65536-初值)*12/晶振值=定時(shí)的時(shí)間,由此式子推出:初值=65536-(晶振值*定時(shí)時(shí)間/12)。
單片機(jī)的延時(shí)程序通過(guò)指令來(lái)達(dá)到延時(shí)效果,這個(gè)時(shí)間等于的指令需要的時(shí)間,而一個(gè)指令需要的時(shí)間叫做指令周期,這個(gè)時(shí)間等于若干個(gè)機(jī)器周期。
單片機(jī)的延時(shí)函數(shù)如何編寫(xiě)準(zhǔn)確時(shí)間
1、方法如下:編寫(xiě)一個(gè)實(shí)現(xiàn)延時(shí)的函數(shù),在該函數(shù)的開(kāi)始置某個(gè)I/O口線如P0為高電平,在函數(shù)的最后清P0為低電平。在主程序中循環(huán)調(diào)用該延時(shí)函數(shù),通過(guò)示波器測(cè)量P0引腳上的高電平時(shí)間即可確定延時(shí)函數(shù)的時(shí)間。
2、所以,實(shí)際延時(shí)時(shí)間為86 μs。簡(jiǎn)言之,只有最內(nèi)層的函數(shù)RET指令。在C51中通過(guò)預(yù)處理指令 #pragma asm和#pragma endasm可以嵌套匯編程序段實(shí)現(xiàn)延時(shí)。用戶編寫(xiě)的匯編語(yǔ)言緊跟在 #pragma asm之后,在 #pragma endasm之前結(jié)束。
3、為了編寫(xiě)一個(gè)80C51單片機(jī)的120秒延時(shí)程序,需要遵循以下步驟。首先,我們需要?jiǎng)?chuàng)建一個(gè)名為“delay”的函數(shù),用于實(shí)現(xiàn)延時(shí)功能。該函數(shù)接收一個(gè)參數(shù)“z”,即所需延時(shí)的周期數(shù)。在函數(shù)內(nèi)部,我們使用兩個(gè)嵌套的循環(huán)結(jié)構(gòu),分別用變量“x”和“y”作為循環(huán)計(jì)數(shù)器。
單片機(jī)怎么定義延時(shí),是直接寫(xiě)delayms(50),還是需要一個(gè)函數(shù)?看下我的...
1、可以根據(jù)單片機(jī)的時(shí)鐘和指令時(shí)間延時(shí) void delay (int m){ while(m--) {_NOP();} } 也可以用單片機(jī)的定時(shí)器延時(shí),設(shè)置timer的時(shí)鐘源,設(shè)置溢出計(jì)數(shù),然后再中斷里處理。如果延遲2秒,最好用定時(shí)中斷。
2、所以一個(gè)簡(jiǎn)單的延時(shí)功能就誕生了,我們只需要自減120次,就可以延時(shí)1ms,如果我們要延時(shí)50ms呢,那就自減50*120=6000次。
3、普通延時(shí)法這個(gè)比較簡(jiǎn)單,讓單片機(jī)做一些無(wú)關(guān)緊要的工作來(lái)打發(fā)時(shí)間,經(jīng)常用循環(huán)來(lái)實(shí)現(xiàn),不過(guò)要做的比較精準(zhǔn)還是要下一番功夫。下面的代碼是在網(wǎng)上搜到的,經(jīng)測(cè)試延時(shí)比較精準(zhǔn)。
51單片機(jī)用c語(yǔ)言延時(shí)函數(shù)?
1、void delayus2x(char n)//延時(shí)nx2 us { while(--n);} void delayms(unsigned int t)//延時(shí) t x 1ms { while(t--){ delayus2x(245);delayux2x(245);} } delayms(50000);//調(diào)用此句延時(shí)5s 至于不能大于255,因?yàn)槟愕臄?shù)據(jù)類型為char型,及8字節(jié),最大值為255,2的8次方減一。
2、C程序中可使用不同類型的變量來(lái)進(jìn)行延時(shí)設(shè)計(jì)。經(jīng)實(shí)驗(yàn)測(cè)試,使用unsigned char類型具有比unsigned int更優(yōu)化的代碼,在使用時(shí)應(yīng)該使用unsigned char作為延時(shí)變量。 以某晶振為12MHz的單片機(jī)為例,晶振為12MHz即一個(gè)機(jī)器周期為1us。
3、幾個(gè)精確延時(shí)程序:在精確延時(shí)的計(jì)算當(dāng)中,最容易讓人忽略的是計(jì)算循環(huán)外的那部分延時(shí),在對(duì)時(shí)間要求不高的場(chǎng)合,這部分對(duì)程序不會(huì)造成影響。500ms延時(shí)子程序程序:(晶振12MHz,一個(gè)機(jī)器周期1us。
編程利用8051內(nèi)部的定時(shí)器T0產(chǎn)生50ms延時(shí)
1、很簡(jiǎn)單的,假設(shè)晶振頻率為12M Hz ,則每一個(gè)機(jī)器周期為1us,T0工作于方式1,非門(mén)控,16位定時(shí)器。
2、計(jì)算延時(shí)需要的機(jī)器周期。比如采用12M晶振,CPU采用通用8051,那么一個(gè)機(jī)器周期為1US,50毫秒為50*1000=50000US,需要的機(jī)器周期=50000/1=50000。
3、方式1的最大定時(shí)是65ms左右,一次要采用和硬件結(jié)合定時(shí),先讓T0定時(shí)50ms運(yùn)行3次就可以了。
4、最大脈寬計(jì)算:知道計(jì)數(shù)器中斷的產(chǎn)生是從全1變?yōu)槿?產(chǎn)生溢出中斷,所以計(jì)數(shù)器的處置設(shè)定為00H,如果讓其工作在方式1計(jì)數(shù)下,最大計(jì)數(shù)值為2^16=65536,那么最大計(jì)數(shù)脈沖寬度就是65536*2us。
5、MHz的晶振下,CPU得到的頻率是1M,因?yàn)?1單片機(jī)是內(nèi)部十二分頻的。那么對(duì)應(yīng)的一個(gè)時(shí)鐘的周期就是1us,16000us就是16ms,也就是16000個(gè)周期后將產(chǎn)生溢出,如果你的程序里全能了定時(shí)中斷和全局中斷,那么將會(huì)發(fā)生定時(shí)器中斷。但你程序一里面的寫(xiě)法是有問(wèn)題的。
關(guān)于單片機(jī)延時(shí)函數(shù)50ms?精準(zhǔn)高效延時(shí)方案的內(nèi)容到此結(jié)束,希望對(duì)大家有所幫助。
本文鏈接:http:///bian/227308.html