|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請問用c51編寫一個精確延時的程序? |
| 作者:zw820506 欄目:單片機 |
精確到微秒~ 大蝦賜教~~ |
| 2樓: | >>參與討論 |
| 作者: 36358168 于 2005/4/7 9:45:00 發(fā)布:
re精確延時 用_nop_()函數(shù);不過前面要加#include <intrins.h>. |
|
| 3樓: | >>參與討論 |
| 作者: xymxym 于 2005/4/7 11:37:00 發(fā)布:
如下: n = DelayValue; for(i = n; i != 0;i--) ; 第二個表達式采用不等式時,反匯編后是: mov r7,#n djnz r7,$ 如想長延時,可在循環(huán)中加_nop()_; |
|
| 4樓: | >>參與討論 |
| 作者: zw820506 于 2005/4/7 15:39:00 發(fā)布:
_nop_()這個函數(shù)是什么庫里大?周期是多少阿? |
|
| 5樓: | >>參與討論 |
| 作者: 阿南 于 2005/4/7 19:42:00 發(fā)布:
可以看一下這個:51單片機 Keil C 延時程序的簡單研究 http://www.c51bbs.com/show.aspx?id=85&cid=9 |
|
| 6樓: | >>參與討論 |
| 作者: freego 于 2005/4/7 19:52:00 發(fā)布:
干嗎不用TIMER? |
|
| 7樓: | >>參與討論 |
| 作者: xwj 于 2005/4/8 9:04:00 發(fā)布:
可以精確到us的延時程序: #define uint unsigned int //---------------------------------------------------------------------------// void delay(uint x) { uint i,j; // for (i=0; i<x;i++) { // for (j=0; j<36; j++) ; //j變化1 相差 8 個機器周期/每x ( j=(?Khz*12-20)/8 ) //j=(?Khz*12-20)/8 )6MHZ時j=60;3.6864MHZ時j=36; _nop_();_nop_();_nop_();_nop_();_nop_(); //修正到 500個機器周期/每x } } // //(機器周期數(shù))(j=10)無_nop_行: 有_nop_行;(j=60)有_nop_行:(6MHZ) // delay(2); //206 216 1016 // delay(1); //110 115 515 // delay(2); //205 215 1015 // delay(3); //300 315 1515 // delay(4); //395 415 2015 // delay(5); //490 515 2515 // delay(6); //585 615 3015 // delay(7); //680 715 3515 // delay(8); //775 815 4015 // delay(9); //870 915 4515 // delay(10); //965 1015 5015 //---------------------------------------------------------------------------// void dlus (unsigned CHAR us)//us=(實際延時-5)/2 { //us=1:7;2:9;3:11;4:13;5:15;6:17;9:19;10:21周期 while(--us); //5 +n*2 DJNZ R7,dlus RET // while(us){us--;} //8 +n*6 // for (;--us>0;); //5 +n*6 // for (;us>0;us--); //10+n*8 // unsigned CHAR i;for (i=0;i<us;i++); //12+n*8 } |
|
| 8樓: | >>參與討論 |
| 作者: xwj 于 2005/4/8 9:08:00 發(fā)布:
實際上精確到us是有困難的,因為任何中斷都會使延時時間增加 就算用查詢定時器的方法也會有誤差的,因為受到查詢間隔及中斷響應時間的影響 |
|
| 9樓: | >>參與討論 |
| 作者: freego 于 2005/4/8 21:18:00 發(fā)布:
在設(shè)定定時值的時候要考慮到中斷處理的影響 還必須注意:使用精確定時的時候要關(guān)閉高優(yōu)先級中斷!使用100US延時做時間片(TIME SLICE),是常用的技巧。 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |