a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機匯編延時程序的理解

單片機匯編延時程序的理解

作者: 時間:2012-08-20 來源:網絡 收藏

實現延遲的代碼:

本文引用地址:http://www.j9360.com/article/171019.htm

DELAY: MOV R7,#250 ;

D1: MOV R6,#250 ;

D2: DJNZ R6,D2 ;

DJNZ R7,D1 ;

RET

如果用高級語言編程,只需要簡單地調用函數就可以實現,但是計算機具體是怎么實現的呢?要想知其所以然,還得從開始學起。

冒號前面的“DELAY”、“D1”、“D2”為語句行的名字,是為了的條件語句跳轉用的,分號后面為注釋,計算機執行時將過濾掉這些信息,最大限度減少代碼長度,提高效率。

DELAY: MOV R7,#250 ; 名字為“DELAY”的語句:意思是將CPU內部內存RAM的R7位置填寫為250(原來為0,為什么是0呢?因為任何開始執行前都要復位,就像我們打算盤要將算子復位一樣,或者我們用沙盤寫字,要將沙盤抹平類似)

D1: MOV R6,#250 ; 名字為“D1”的語句:將R6位置填寫為250

D2: DJNZ R6,D2 ; 名字為“D2”的語句:將R6位置的250減1,如果為0就繼續執行下一條,不為0就繼續執行D2這一句,因為R6=250,所以這個語句要原地踏步執行250次!

DJNZ R7,D1 ; 這句沒有名字,因為沒有別的語句要跳到這里,所以就省略了。R7同樣等于250,但它不是原地踏步,而是跳回了D1,這么干,D!、D2和本句將被循環執行250遍,需要強調的是:D2語句自身每次都要執行250遍,也就是執行了250*250=62500遍!

RET ;子程序結束(因為程序一般不作為獨立程序存在,它只是一個子程序,也就是高級語言中的一個函數,看到這個字符,子程序將跳回到母程序,進行下一步)。

這個子程序這么反復地循環指令,到底有什么意義呢?又是怎么實現的程序呢?說起來計算機真是有點笨,它是*數程序執行的次數來累加時間的!也就是說語句本身就是為了浪費時間!哈哈,可笑吧?這就像你沒有鐘表,但是你知道你跑操場一圈是一分鐘,然后就繞著操場跑了60圈,時間過了正好一小時一樣。

如果是人的話,誰也不會笨到干這么累的活兒來計時,但計算機不一樣,它不論靜止還是運動,程序總是一拍一拍地運行著,所以它不累。

那么,計算機執行一個語句耗費的時間是多少呢?

以51型為例:如果采用12MHz的晶振,運行一個機器周期為1微秒,具體為什么暫時不管。的指令系統分為單周期、雙周期和三周期指令(三周期實際上占用四個周期,多余一個周期浪費掉),這是有指令的內容決定的,內容多的單周期執行不完,肯定要延長了。子程序里面的MOV是單周期、DJNZ是雙周期。


上一頁 1 2 下一頁

評論


相關推薦

技術專區

關閉