51單片機(jī)100延時(shí)函數(shù)?可靠高效實(shí)現(xiàn)方法
今天給各位分享51單片機(jī)100延時(shí)函數(shù)?可靠高效實(shí)現(xiàn)方法的知識(shí),其中也會(huì)對(duì)51單片機(jī)延時(shí)1ms進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! 文...
今天給各位分享51單片機(jī)100延時(shí)函數(shù)?可靠高效實(shí)現(xiàn)方法的知識(shí),其中也會(huì)對(duì)51單片機(jī)延時(shí)1ms進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!
文章目錄:
- 1、51單片機(jī)用c語言延時(shí)函數(shù)?
- 2、單片機(jī)中延時(shí)100毫秒的程序
- 3、51單片機(jī)中怎么得到精確延時(shí)?
- 4、51單片機(jī)的延遲函數(shù),時(shí)間是怎么計(jì)算的,求大神解答
51單片機(jī)用c語言延時(shí)函數(shù)?
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次方減一。
C程序中可使用不同類型的變量來進(jìn)行延時(shí)設(shè)計(jì)。經(jīng)實(shí)驗(yàn)測試,使用unsigned char類型具有比unsigned int更優(yōu)化的代碼,在使用時(shí)應(yīng)該使用unsigned char作為延時(shí)變量。 以某晶振為12MHz的單片機(jī)為例,晶振為12MHz即一個(gè)機(jī)器周期為1us。
幾個(gè)精確延時(shí)程序:在精確延時(shí)的計(jì)算當(dāng)中,最容易讓人忽略的是計(jì)算循環(huán)外的那部分延時(shí),在對(duì)時(shí)間要求不高的場合,這部分對(duì)程序不會(huì)造成影響。500ms延時(shí)子程序程序:(晶振12MHz,一個(gè)機(jī)器周期1us。
delay函數(shù)是一般自己定義的一個(gè)延時(shí)函數(shù)。C語言定義延時(shí)函數(shù)主要通過無意義指令的來達(dá)到延時(shí)的目的。下面給出一個(gè)經(jīng)典的延時(shí)函數(shù)。
如果用C51來編寫延時(shí)程序,一般都用循環(huán)語句:例:void delay(unsigned int num){ unsigned int i;for (i=0; inum; i++){ ; // 程序什么都不做 } } 原理很簡單,程序什么都不做,只是不段的比較,直到比較完,這樣就起到延時(shí)的作用了。
單片機(jī)中延時(shí)100毫秒的程序
1、void delay_100ms(uint8 n){ uint16 i;while(n){ for(i=0;ixxx;i++)//此循環(huán)應(yīng)為運(yùn)行100ms,用儀器輔助得到xxx的值。不夠就再在FOR一次。
2、晶振為12M,說明一個(gè)機(jī)器周期為1微秒,100毫秒就是100 000個(gè)機(jī)器周期。mov r7,#X;3周期 loop:mov r6,#Y;3X周期 djnz r6,$;2XY周期 djnz r7,loop;2X周期 也就是3+5x+2xy=100 000??扇=194,y=255。此時(shí)共延時(shí)99 913,即9913毫秒。
3、流程:點(diǎn)亮1個(gè)燈;延時(shí)100毫秒 滅第一個(gè)燈,點(diǎn)亮第二個(gè)燈;4延時(shí)100毫秒;。。依次類推,直到滅第8個(gè)燈,再返回到1,重新開始。
4、在delayms();函數(shù)后,i=xms即i=10,然后做for循環(huán),根據(jù)的時(shí)鐘周期做出相應(yīng)時(shí)間的延時(shí)。如果沒有xms,你的延時(shí)函數(shù)只能寫成固定延時(shí)的,即在delayms內(nèi)部確定好i的值,很不方便。有了參數(shù),就能像上面說的那樣隨意延時(shí)了(數(shù)值范圍要在uint定義內(nèi),即小于65536)。
5、分鐘數(shù)加1 cond = 0;minute++;} if (minute == 60) { // 分鐘數(shù)到達(dá)60分,小時(shí)數(shù)加1 minute = 0;hour++;} delay(100); // 延時(shí)100毫秒,控制顯示刷新速度和計(jì)時(shí)精度 } } ```以上代碼僅供參考,實(shí)際應(yīng)用中需要根據(jù)具體情況進(jìn)行修改和調(diào)整。ai.aimpcapbp.top可以給你解憂。
6、計(jì)算延時(shí)需要的機(jī)器周期。比如采用12M晶振,CPU采用通用8051,那么一個(gè)機(jī)器周期為1US,50毫秒為50*1000=50000US,需要的機(jī)器周期=50000/1=50000。
51單片機(jī)中怎么得到精確延時(shí)?
1、單片機(jī)的幾種精確延時(shí)實(shí)現(xiàn)延時(shí)通常有兩種方法:一種是硬件延時(shí),要用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);另一種是延時(shí),這種方法主要采用循環(huán)體進(jìn)行。1 使用定時(shí)器/計(jì)數(shù)器實(shí)現(xiàn)精確延時(shí) 單片機(jī)一般常選用1059 2 MHz、12 MHz或6 MHz晶振。
2、幾個(gè)精確延時(shí)程序:在精確延時(shí)的計(jì)算當(dāng)中,最容易讓人忽略的是計(jì)算循環(huán)外的那部分延時(shí),在對(duì)時(shí)間要求不高的場合,這部分對(duì)程序不會(huì)造成影響。500ms延時(shí)子程序程序:(晶振12MHz,一個(gè)機(jī)器周期1us。
3、單片機(jī)的精確延時(shí)主要取決于兩個(gè)方面:時(shí)鐘的準(zhǔn)確性和穩(wěn)定性。(晶振或晶體或內(nèi)部振蕩或其他外部時(shí)鐘源)單片機(jī)延時(shí)的實(shí)現(xiàn)方法。一不做討論,但顯然與精度密切相關(guān)。要求精確的延時(shí)時(shí)間越長,當(dāng)然誤差越大。假設(shè)時(shí)鐘與標(biāo)稱值的系數(shù)為x,延時(shí)誤差是下面分析誤差的x倍。
51單片機(jī)的延遲函數(shù),時(shí)間是怎么計(jì)算的,求大神解答
1、通過計(jì)算每條指令的時(shí)間和次數(shù),得到每條指令的總運(yùn)行時(shí)間,在吧所有指令的時(shí)間相加,人工算的話停麻煩的,一般都是用算的,例如 單片機(jī)精靈 stc-isp 等。
2、第一步:在延時(shí)程序沒行后邊標(biāo)注該指令的機(jī)器周期第二步:在機(jī)器周期后邊乘以該指令循環(huán)的次數(shù)第三步:計(jì)算總共用的機(jī)器周期數(shù)第四步:計(jì)算總延時(shí)時(shí)間。
3、延時(shí)時(shí)間的計(jì)算與單片機(jī)的晶振頻率有關(guān)。若晶振頻率為12Mhz,那么單片機(jī)每震動(dòng)一次所需要的時(shí)間是1/12M s。那么再來看看單片機(jī)一次自減所需要的振動(dòng)次數(shù)是96次,假如我們對(duì)時(shí)間要求不是特別精確的話,可以約等于100來計(jì)算。
如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
本文鏈接:http:///bian/226347.html