<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)匯編延時(shí)程序的理解

          單片機(jī)匯編延時(shí)程序的理解

          作者: 時(shí)間:2012-08-20 來(lái)源:網(wǎng)絡(luò) 收藏

          實(shí)現(xiàn)延遲的代碼:

          本文引用地址:http://www.ex-cimer.com/article/171019.htm

          DELAY: MOV R7,#250 ;

          D1: MOV R6,#250 ;

          D2: DJNZ R6,D2 ;

          DJNZ R7,D1 ;

          RET

          如果用高級(jí)語(yǔ)言編程,只需要簡(jiǎn)單地調(diào)用函數(shù)就可以實(shí)現(xiàn),但是計(jì)算機(jī)具體是怎么實(shí)現(xiàn)的呢?要想知其所以然,還得從開始學(xué)起。

          冒號(hào)前面的“DELAY”、“D1”、“D2”為語(yǔ)句行的名字,是為了的條件語(yǔ)句跳轉(zhuǎn)用的,分號(hào)后面為注釋,計(jì)算機(jī)執(zhí)行時(shí)將過(guò)濾掉這些信息,最大限度減少代碼長(zhǎng)度,提高效率。

          DELAY: MOV R7,#250 ; 名字為“DELAY”的語(yǔ)句:意思是將CPU內(nèi)部?jī)?nèi)存RAM的R7位置填寫為250(原來(lái)為0,為什么是0呢?因?yàn)槿魏?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/程序">程序開始執(zhí)行前都要復(fù)位,就像我們打算盤要將算子復(fù)位一樣,或者我們用沙盤寫字,要將沙盤抹平類似)

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

          D2: DJNZ R6,D2 ; 名字為“D2”的語(yǔ)句:將R6位置的250減1,如果為0就繼續(xù)執(zhí)行下一條,不為0就繼續(xù)執(zhí)行D2這一句,因?yàn)镽6=250,所以這個(gè)語(yǔ)句要原地踏步執(zhí)行250次!

          DJNZ R7,D1 ; 這句沒有名字,因?yàn)闆]有別的語(yǔ)句要跳到這里,所以就省略了。R7同樣等于250,但它不是原地踏步,而是跳回了D1,這么干,D!、D2和本句將被循環(huán)執(zhí)行250遍,需要強(qiáng)調(diào)的是:D2語(yǔ)句自身每次都要執(zhí)行250遍,也就是執(zhí)行了250*250=62500遍!

          RET ;子程序結(jié)束(因?yàn)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/延時(shí)">延時(shí)程序一般不作為獨(dú)立程序存在,它只是一個(gè)子程序,也就是高級(jí)語(yǔ)言中的一個(gè)函數(shù),看到這個(gè)字符,子程序?qū)⑻氐侥赋绦?,進(jìn)行下一步)。

          這個(gè)子程序這么反復(fù)地循環(huán)指令,到底有什么意義呢?又是怎么實(shí)現(xiàn)的程序呢?說(shuō)起來(lái)計(jì)算機(jī)真是有點(diǎn)笨,它是*數(shù)程序執(zhí)行的次數(shù)來(lái)累加時(shí)間的!也就是說(shuō)語(yǔ)句本身就是為了浪費(fèi)時(shí)間!哈哈,可笑吧?這就像你沒有鐘表,但是你知道你跑操場(chǎng)一圈是一分鐘,然后就繞著操場(chǎng)跑了60圈,時(shí)間過(guò)了正好一小時(shí)一樣。

          如果是人的話,誰(shuí)也不會(huì)笨到干這么累的活兒來(lái)計(jì)時(shí),但計(jì)算機(jī)不一樣,它不論靜止還是運(yùn)動(dòng),程序總是一拍一拍地運(yùn)行著,所以它不累。

          那么,計(jì)算機(jī)執(zhí)行一個(gè)語(yǔ)句耗費(fèi)的時(shí)間是多少呢?

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


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();