導航:首頁 > 操作系統 > 單片機延時子程序

單片機延時子程序

發布時間:2022-04-26 08:05:56

① 請幫忙在51系列單片機系統中,編寫一個延時1ms的子程序。謝謝。。

1、首先,在電腦中打開keil軟體,創建好工程,然後添加c文件,如下圖所示。

② 單片機延時子程序

你可以粗略這樣看,在上面的指令中,執行次數最多的是DJNZ rn,那麼可以延時就是DJNZ指令執行時間。這里運用了嵌套,所以要×。
它的順序是先執行DJNZ R5,L3 ;10次,執行DJNZ R6,L2 250次
但是當R6減1那麼就賦予R5初值10,所以R5又得運行10次,而每減一次1都要重復10次。同理,執行R7減一要重復前面的DJNZ指令10×250次,所以就有了
10×250×200×2us=1s

③ 單片機延時子程序,求高手詳解送分

1,r7賦值200,一個機器周期(只執行1次)。2,通過4可知被執行了200次,每次1個機器周期。
3,執行125*200=25000次。每次2個機器周期。4,執行200次,每次2個機器周期。5,最後執行一次返回,花費2個機器周期。如果是12MHZ的晶振,震盪周期1/12US,機器周期1US。
整個延時程序,花費50603個指令周期,乘以1us,大概延時50Ms左右。怎麼會是機器周期*200呢?機器周期應該是振盪周期的12被才對。

④ 單片機匯編語言 編寫一個延時50ms的子程序,設晶振主頻率為12MHz

關於單片機延時程序的具體分析

前面我們介紹了延時程序,但這還不完善,因為,我們只知道DJNZ R6,D2這句話會被執行62500次,但是執行這么多次需要多長時間呢?是否滿足我們的要求呢?我們還不知道,所以下面要來解決這個問題。

關於單片機延時程序的具體分析

先提一個問題:我們學校里什麼是最重要的。(鈴聲)校長可以出差,老師可以休息,但學校一日無鈴聲必定大亂。整個學校就是在鈴聲的統一指揮下,步調一致,統一協調地工作著。這個鈴是按一定的時間安排來響的,我們可以稱之為「時序��時間的順序」。一個由人組成的單位尚且要有一定的時序,計算機當然更要有嚴格的時序。事實上,計算機更象一個大鍾,什麼時候分針動,什麼時候秒針動,什麼時候時針動,都有嚴格的規定,一點也不能亂。計算機要完成的事更復雜,所以它的時序也更復雜。

我們已知,計算機工作時,是一條一條地從ROM中取指令,然後一步一步地執行,我們規定:計算機訪問一次存儲器的時間,稱之為一個機器周期。這是一個時間基準,好象我們人用「秒」作為我們的時間基準一樣,為什麼不幹脆用「秒」,多好,很習慣,學下去我們就會知道用「秒」反而不習慣。

一個機器周期包括12個時鍾周期。下面讓我們算一下一個機器周期是多長時間吧。設一個單片機工作於12M晶振,它的時鍾周期是1/12(微秒)。它的一個機器周期是12*(1/12)也就是1微秒。(請計算一個工作於6M晶振的單片機,它的機器周期是多少)。

MCS-51單片機的所有指令中,有一些完成得比較快,只要一個機器周期就行了,有一些完成得比較慢,得要2個機器周期,還有兩條指令要4個機器周期才行。這也不難再解,不是嗎?我讓你掃地的執行要完成總得比要你完成擦黑板的指令時間要長。為了衡量指令執行時間的長短,又引入一個新的概念:指令周期。所謂指令周期就是指執行一條指令的時間。INTEL對每一條指令都給出了它的指令周期數,這些數據,大部分不需要我們去記憶,但是有一些指令是需要記住的,如DJNZ指令是雙周期指令。

下面讓我們來計算剛才的延時。首先必須要知道晶振的頻率,我們設所用晶振為12M,則一個機器周期就是1微秒。而DJNZ指令是雙周期指令,所以執行一次要2個微秒。一共執行62500次,正好125000微秒,也就是125毫秒。

⑤ 單片機中延時子程序的作用是什麼

就是為了延時啊,譬如說你讓數碼管從1變到10,一秒跳一下這就需要用到延時啊當然你可能會說用定時器就行了,但是定時器有限,而且他是通過中斷來控制,但我不需要延時時間那麼精準的時候用起中斷就不夠直接用延時程序方便了

⑥ 單片機延時程序的延時時間怎麼算的

單片機的延時程序通過執行指令來達到延時效果,這個時間等於執行的指令需要的時間,而一個指令需要的時間叫做指令周期,這個時間等於若干個機器周期。

(6)單片機延時子程序擴展閱讀:

1丶指令周期,是每種運算需要的時間,如加法、邏輯等,是每一步進行這種指令運算需要的時間,是機器周期的整數倍,這種周期不定。

2丶51單片機12M晶振,晶振周期1/12微妙,一個機器周期包含12個晶振周期,所以12M晶振時機器周期=12x(1/12)微妙=1微妙。

3丶1個毫秒延時子程序如下:

void delay1ms(uint ms)

{

uint i,j;

for(i=0;i<ms;i++)

{

for(j=0;j<110;j++);

}

}

⑦ 單片機延時時間程序怎麼編程

舉一個例子來說明吧.比如你要編一個延時50毫秒的子程序,那麼步驟如下:
1、查看一下你的硬體環境,比如晶振大小,CPU型號,不用CPU指令的機器周期是不一樣的。
2、計算延時需要的機器周期。比如採用12M晶振,CPU採用通用8051,那麼一個機器周期為1US,50毫秒為50*1000=50000US,需要的機器周期=50000/1=50000。
3、試編程,如下:

程序代碼 指令時間 總共時間
DELAY50MS: ;2 2
MOV R7,#A ;1 1
DELAY1:
MOV R6,#B ;1 1*A
DJNZ R6,$ ;2 2*B*A
DJNZ R7,DELAY1 ;2 2*A
RET ;2 2
所以總時間=2+1+A+2*A*B+2*A+2=5+3A+2AB
4、湊數求A、B
根據2、3得到如下式子:
50000=5+3A+2AB
可以有很多種結果,不過最好是以A盡可能小,B盡可能大為原則,當然不能大於255.
我現在湊出A=110,B=225;那麼總延時時間=5+3*110+2*110*225=49835。還差165US
5、補齊不夠時間
再加一個小循環就OK了,呵呵如下:
MOV R6,#C
DJNZ R6,$
會算了吧,2*C+1=165;所以C=82。
現在完整的延時程序出來了,如下:
DELAY50MS: ;2 2
MOV R7,#110 ;1 1
DELAY1:
MOV R6,#225 ;1 1*110
DJNZ R6,$ ;2 2*225*110
DJNZ R7,DELAY1 ;2 2*110
MOV R6,#82 ;1 1
DJNZ R6,$ ;2 2*82
RET ;2 2
很圓滿:總的時間50000微妙,也就是50毫秒。這種方式編程,在該硬體環境下可以保證最大誤差為1微妙。

⑧ 求解單片機延時子程序延時計算

你可以粗略這樣看,在上面的指令中,執行次數最多的是djnz
rn,那麼可以延時就是djnz指令執行時間。這里運用了嵌套,所以要×。
它的順序是先執行djnz
r5,l3
;10次,執行djnz
r6,l2
250次
但是當r6減1那麼就賦予r5初值10,所以r5又得運行10次,而每減一次1都要重復10次。同理,執行r7減一要重復前面的djnz指令10×250次,所以就有了
10×250×200×2us=1s

⑨ 關於單片機延時程序

void timer0_zd() interrupt 1 //定時器0,定時中斷子程序
{
TL0 = 0x00; // 設置定時器初值
TH0 = 0x4C; // 設置定時器初值

a++; //開關按下延時,延時到之後,電磁閥開始動作。

if(a==20) //延時20*50毫秒 = 1秒
{
flag0=1;
}
}
很明顯進入中斷,a == 20的時候flag0標志置位,aut1 = 0;如果你a不清零的話,a++一直加加到溢出,所以出錯,如果你清零了,中斷進入一次a+1 到20請aut1就會一直輸出

⑩ 單片機延時程序是怎麼實現的

延時是靠CPU執行無關指令,把時間浪費掉。
具體來說,DJNZ指令需要2個周期,循環250次就是500個周期,兩層循環就是500*500個周期,你調用一次DELAY子程序,CPU就空轉250000個周期(注意這個計算不精確),如果晶振是12MHz,那就意味著時間過去了250ms,也就是延時250ms

閱讀全文

與單片機延時子程序相關的資料

熱點內容
查看ipdns命令 瀏覽:260
命令與征服3凱恩之怒漢化 瀏覽:865
linuxc一站式編程 瀏覽:96
比心app男的識別女的怎麼樣 瀏覽:637
線切割pdf 瀏覽:638
命令與征服3泰伯利亞戰爭109修改器 瀏覽:521
看著很解壓的景色 瀏覽:896
sqlite在Android中應用 瀏覽:77
pdf虛擬列印機ofmac 瀏覽:354
九江php招聘 瀏覽:376
怎麼在ubuntu編程 瀏覽:256
思科保存的命令是什麼意思 瀏覽:958
主力控制副圖源碼及套利選股公式 瀏覽:813
兄弟php培訓怎麼樣 瀏覽:678
金炯泰編譯器 瀏覽:860
涼山參加青少年編程培訓班報名 瀏覽:598
程序員開發者模式 瀏覽:199
電腦有圖標的文件夾是什麼 瀏覽:350
app停運了怎麼恢復 瀏覽:188
u盤加密密碼怎麼刪除 瀏覽:90