延時程序匯編程序
Ⅰ 51匯編語言的延時程序
用stc系列帶ad轉換的單片機(例如stc12c5410ad)在p1.0接上電位器,經ad轉換得到控制值,再用定時中斷產生基準信號,由控制值修改計數值達到調整時間的目的。
例如0電壓對應20秒,5v電壓對應80秒。
Ⅱ 用匯編語言設計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毫秒。
Ⅲ 匯編語言延時程序怎麼解釋
編碼程序的一種變式。
Ⅳ 匯編延時程序
你先看下這段延時程序:
採用12M晶振,用51晶元處理。
DELAY: MOV R7,#250;
D1:MOV R6,#250;
D2:DJNZ R6 ,D2;
DJNZ R7,D1;
RET
以上是一段延時0.125秒的程序。
它計算的原理是:
這段程序最終執行了250*250次,而DJNZ指令執行需要2個機器周期,一個機器周期需要1微秒的時間,所以以上延時程序就是250*250*2=0.125秒。
你的程序原理跟這個應該是一樣的~
Ⅳ 用匯編怎麼寫51單片機的延時程序
和前兩位的差不多,最簡單的就是運用MOV賦值的,再用DJNZ遞減的方式,計算出每條指令執行時間,再加上循環字數,延時時間按照你自己的時間編寫循環次數和賦值大小;另外,你也可以用定時器編寫,計算好你的延時時間,當時間達到時輸出高電平,作為中斷信號,返回主程序,執行設定延時後的目標程序。
匯編和C各有好處,就我個人而言,浮點數的計算最好用C編,匯編不好解決,而且需要的很多代碼,C很容易就可以實現!
Ⅵ 匯編語言延時程序問題
延時方法很多,用定時/計數比較方便也比較精確。如果用軟體延時,則可以用循環(多重、嵌套都行)。根據時間長短確定循環次數,力求精確。時間計算以機器的晶振頻率為基準,算出各指令的運行時間(每條指令運行時間乘所循環的次數就是該指令的全部運行時間),所有指令運行時間的和就是延時的時間。
比如:設晶振頻率為12MHz 則每機器周期為1us
513us延時程序為
DL513: MOV R7,#0FFH ;1us
DJNZ R7,$;2us *255=510us
RET ;2us
延時時間為1+510+2=513us
延時時間較長則可以用多重循環(以四重循環為例),如:
KKKK0:MOV R2,#XX ;1us
KKKK1:MOV R3,#LL ;1us*XX
KKKK2:MOV R4,#NN ;1us*XX*LL
KKKK3:MOV R5,#MM ;1us*XX*LL*NN
DJNZ R5,$ ;2us *XX*LL*NN*MM
DJNZ R4,KKKK3 ;2us *XX*LL*NN
DJNZ R3,KKKK2 ;2us *XX*LL
DJNZ R2,KKKK1 ;2us *XX
RET ;2us
延時時間為1us+1us*XX+1us*XX*LL+1us*XX*LL*NN+2us *XX*LL*NN*MM+2us *XX*LL*NN+2us *XX*LL+2us *XX+2us
適當確定四個循環次數XX、LL、NN、MM就能得到准確的延時時間。
Ⅶ 求解釋!!!匯編語言:延時程序
DELAY:MOV R7,#250 第一層循環250次
DEL1:MOV R6,#100 第二層循環100次
DEL2:MOV R5,#10 第三層循環10次
DJNZ:R5,$ 如果R5不等於0,則跳轉到本行,也就是空轉10次
DJNZ:R6,DL2 如果R6不等於0,則跳到DL2行,給R5賦值
DJNZ R7,DL1 如果R7不等於0,則跳到DL1行,給R6賦值
所以總的空轉循環次數是250*100*10=250000次,通過調節R5,R6,R7值來控制延時時間
Ⅷ 延時程序 匯編
DELAY:MOV
R7,#200
;1us
DELAY1:DJNC
R7,DELAY1
;2us
RET
;2us
T=1+200*2+2=4003us,如果200改為199會更接近些,調整循環次數就能調整延時精度。
DEL:MOV
R7,#10;1us
DEL1:MOV
R6,#104
;1us
DEL2:DJNC
R6,DEL2
;2us
DJNC
R7,DEL1
;2us
RET
;2us
T=1+10*1+10*104*2+10*2+2=us,如果104改為99會更接近些。
(1)你的兩個延時程序都對。
(2)延時不超過513us的延時程序這應該是最簡單的方法了。
(3)其中#200,#10,#104不是隨便設的,不能大過255,同時也要盡可能滿足精度要求。
你的時間演算法是對的。
還想請問一下和2200是否允許要看你的系統精度來定,一般不說,你這里將近10%的誤差是比較大的。
Ⅸ 單片機匯編程序怎麼計算延時
單片機編程時延時程序其實就是一些循環指令組成的集合。比如:
DELAY:
MOVR2,#248;本條指令1T執行1次
DJNZR2,$;本條指令2T執行248次
NOP;本條指令1T執行1次
RET;本條指令2T執行1次
所以延時時間為:1+248*2+1+2=500T,如果晶振是12M的話,延時500us
Ⅹ 匯編語言延時程序0.4s
匯編語言中,延遲有幾種方式: 1、通過一些專門的語句,比如 NOP ;執行一個空操作 2、通過空循環,比如: setb p1.0 ;IO口置1 mov r2,#200 ;R2賦值200 djnz r2,$ ;循環200次,延時約400微妙 clr p1.0 ;IO口清0 3、通過調用延時程序
