<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 如何用好WinAVR里的延時(shí)函數

如何用好WinAVR里的延時(shí)函數

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò ) 收藏
剛對WinAVR自帶的延時(shí)函數進(jìn)行一下研究,有些收獲,與大家分享,不對之處請斧正,謝謝。

先看_delay_loop_1(uint8_t__count)函數,從其函數注釋里面可以了解到,該函數用來(lái)延遲3個(gè)晶振時(shí)鐘周 期,不包括程序調用和退出該函數所花費的時(shí)間。該函數的形參__count是一個(gè)8位的變量,由此,我們就可以根據系統采用的晶振頻率算出該函數最大的延 遲時(shí)間了:
1MHz時(shí):MAX_DELAY_TIME=(1/1000000)*3*256=0.000768S=768uS
8MHz時(shí):MAX_DELAY_TIME=(1/8000000)*3*256=0.000096S=96uS
............
F_CPUMAX_DELAY_TIME=(1/F_CPU)*3*256
依此類(lèi)推。


同樣再看_delay_loop_2(uint16_t__count)函數,該函數延時(shí)4個(gè)晶振周期,形參是一個(gè)16位的變量,同樣 我們也可以算出該函數最大的延遲時(shí)間:
1MHz時(shí):MAX_DELAY_TIME=(1/1000000)*4*65535=0.26214S=262.1mS
8MHz時(shí):MAX_DELAY_TIME=(1/8000000)*4*65535=0.03277S=32.8mS
............
F_CPUMAX_DELAY_TIME=(1/F_CPU)*4*65535
依此類(lèi)推。

重要提示:_delay_loop_1(0)、_delay_loop_1(256)延時(shí)是一樣的??!
同理,_delay_loop_2(0)、_delay_loop_2(65536)延時(shí)也是一樣的??!這些函數的延時(shí)都是最長(cháng)的延時(shí)。

重量級函數出 場(chǎng)>>>>>>>>>>>>>_delay_us()and_delay_ms()?。?!<<<<<<<<<<<<<<<<<

先說(shuō)_delay_us(double__us),不要以為該函數的形參是double形就為所欲為,隨便付值都不會(huì )溢出了,其實(shí)這個(gè) 函數的調用是有限制的,不然就會(huì )出現延時(shí)不對的情況。函數的注釋里說(shuō)明如下:

Themaximalpossibledelayis768us/F_CPUinMHz.
在1MHz時(shí)最大延時(shí)768us?。。?!

也就是說(shuō)double__us這個(gè)值在1M系統時(shí)鐘時(shí)最大只能是768。如果大于768,比如這樣調用延時(shí)函數 _delay_us(780)會(huì )怎么樣呢??那就會(huì )和調用_delay_loop_1(0)一樣的效果了!能延遲多少各位可以算出來(lái)。具體在各種系統時(shí)鐘 之下這個(gè)值是多少可以通過(guò)一個(gè)公式算出來(lái):
MAX_VALUE=256*3000000/F_CPU

同理,分析程序,可以知道_delay_ms(double__ms)函數,在1MHz系統時(shí)鐘下其最大延時(shí)是262.14ms!在這 里也給出該函數的形參的最大值,調用此函數時(shí)的實(shí)參都不要大于這個(gè)值,大于這個(gè)限制值的話(huà)就和調用_delay_loop_2(0)同樣的延時(shí)效果!
MAX_VALUE=65536*4000/F_CPU

總結完畢!不正確之處還望各位不吝指正!謝謝


關(guān)鍵詞: WinAVR延時(shí)函

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>