51單片機(jī)c語言延時(shí)函數(shù) Void delay 1ms(unsigned int ms){un
delay函數(shù)是一般自己定義的一個(gè)延時(shí)函數(shù)。
C語言定義延時(shí)函數(shù)主要通過無意義指令的執(zhí)行來達(dá)到延時(shí)的目的。
關(guān)于單片機(jī)C語言的精確延時(shí),網(wǎng)上很多都是大約給出延時(shí)值沒有準(zhǔn)確那值是多少,也就沒有達(dá)到精確高的要求,而本函數(shù)克服了以上缺點(diǎn),能夠精確計(jì)數(shù)出要延時(shí)值且精確達(dá)到1us,本舉例所用CPU為STC12C5412系列12倍速的單片機(jī),只要修改一下參數(shù)值其它系例單片機(jī)也通用,適用范圍寬。
ms=1時(shí),第一個(gè)for循環(huán)進(jìn)入,然后在第二個(gè)for循環(huán)中執(zhí)行100次
再回到第一個(gè)for循環(huán)中進(jìn)行第二次循環(huán).
就這樣
你可以進(jìn)入編輯器,添加斷點(diǎn),自行查看代碼執(zhí)行過程
相關(guān)評(píng)說:
馬塘區(qū)階梯: ______ 在單片機(jī)應(yīng)用中,經(jīng)常會(huì)遇到需要短時(shí)間延時(shí)的情況,一般都是幾十到幾百μs,并且需要很高的精度(比如用單片機(jī)驅(qū)動(dòng)DS18B20時(shí),誤差容許的范圍在十幾μs以內(nèi),不然很容易出錯(cuò));而某些情況下延時(shí)時(shí)間較長,用計(jì)時(shí)器往往有點(diǎn)小題大...
馬塘區(qū)階梯: ______ 下面有你要的 選一個(gè)吧 下面幾個(gè)是單片機(jī)的延時(shí)程序(包括asm和C程序,都是我在學(xué)單片機(jī)的過程中用到的),在單片機(jī)延時(shí)程序中應(yīng)考慮所使用的晶振的頻率,在51系列的單片機(jī)中我們常用的是11.0592MHz和12.0000MHz的晶振,而在...
馬塘區(qū)階梯: ______ 1:原理:僅僅執(zhí)行一些,沒有實(shí)質(zhì)性影響的所謂“無意義指令”,比如做比大小啊,做某個(gè)int的自加運(yùn)算啊之類的 2:兩重for的作用:簡單的說,就像高中數(shù)學(xué)中的“乘法原理”一樣,這樣可以很輕易的迅速增加上述“無意義指令”的數(shù)目 3...
馬塘區(qū)階梯: ______ #include <reg51.h> //此文件中定義了51的一些特殊功能寄存器 void delay(unsigned int i); //聲明延時(shí)函數(shù) main() { P2 = 0x00; //置P0口為低電平 點(diǎn)亮P2口8個(gè)LED燈 delay(600); // 調(diào)用延時(shí)程序 等待一段時(shí)間后熄滅 P2 = 0xff; //置P0口為高電...
馬塘區(qū)階梯: ______ 以下是51單片機(jī)C語言精密延時(shí)程序:voiddelayms(unsigned char t) { unsigned char j; unsigned char i; do { j=3; do { i=165; do { --i; } while(i!=0); --j; } while(j!=0); --t; } while(t!=0); } 該程序延時(shí)時(shí)基為1ms,所以最大延時(shí)時(shí)間是255ms 下面是反編...
馬塘區(qū)階梯: ______ C語言: void delay(unsigned int x) { unsigned int i; while(x--)for(i=0;i<120;i++); }這是一毫秒
馬塘區(qū)階梯: ______ 晶振頻率Fosc=12MHz,則機(jī)械周期 T=12/Fosc=1us;程序中 的 自加(++)、自減(--) 的執(zhí)行周期為1個(gè)機(jī)械周期,即1us;若為 理想狀態(tài),則delay(500000)的時(shí)間應(yīng)該是:500000*1us=500ms;但是,編譯軟件 要把 函數(shù)調(diào)用、for 語句轉(zhuǎn)換成 機(jī)器指令,這是需要一定周期的,周期長短 視不同的編譯軟件 而有所不同,目前也沒人對(duì)這個(gè) 轉(zhuǎn)換差別 做過 專業(yè)的考量,故LZ 的問題,沒有確切 的答案,只能 是告訴 你,大于某個(gè)時(shí)間;如例子 的答案是 大于 500ms,但大到什么程度,不知道,不過可以從 軟件中 單步調(diào)試 中 得到.
馬塘區(qū)階梯: ______ 延時(shí)嗎?還是定時(shí)器? c語言: void delay(unsigned int z) { unsignede char x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } 這是延時(shí)函數(shù),用的時(shí)候在主函數(shù)里面調(diào)用delay(),括號(hào)里面寫數(shù)值隨便你寫,比如delay(1000),就大約是1秒,delay(1),...
馬塘區(qū)階梯: ______ #include <reg51.h>#define uchar unsigned char sbit LED=P1^0; uchar time; void InitTimer0(void) { TMOD = 0x01; //定時(shí)器0,工作方式1 TH0 = 0x3c; TL0 = 0xb0; //50ms中斷一次 EA = 1; ET0 = 1; TR0 = 1; } void main(void) { InitTimer0(); while(1);...
馬塘區(qū)階梯: ______ 1.循環(huán)延時(shí)的方法 DELAY: ;誤差 0us MOV R7,#25H DL1: MOV R6,#9AH DL0: MOV R5,#02H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET 不過這不實(shí)用.40MS時(shí)間單片機(jī)都 在這里循環(huán),不作能它事. 1.可以用定時(shí)中斷的方法: ...