Re: [問題] 請教幾個8051的問題
※ 引述《LinuxC (死工程師 = = )》之銘言:
: 最近再複習8051
: 但因為年代有點久遠
: 而且現在看的書也並不是當初用的那本
: 所以書上有些看不太懂
: DELAY20MS:
: MOV R6,#40
: D1: MOV R5,#248
: DJNZ R5,$
: DJNZ R6,D1
: RET
: 請問$是什麼意思呢?
: 是要跳躍到哪裡去了?
: 請問如何精確地寫出要延遲20MS秒呢?
: 這當中要怎麼推算呢?
: 程式碼為何給R6 資料值40
: 然後又給R5 資料值248
雖然沒看人用過"$",不過望文生義,應該指的是自己
這段程式碼用C寫的話就是這樣子
for(R6=40;R6<>0;R6--) {
for(R5=248;R5<>0;R5--) ;
}
指令 Byte Cycles
MOV Rn,#data 2 1
DJNZ Rn,rel 2 2
RET 1 2
MOV R6,#40 1
D1: MOV R5,#248 1
DJNZ R5,$ 2 *248
DJNZ R6,D1 2 *40
RET
所以這段程式碼共計要 1+(1+2*248)*40+2=19883 Cycles
對於 1 Cycle = 1 us 的CPU而言就是19.883ms
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.180.163
推
10/23 13:29, , 1F
10/23 13:29, 1F
→
10/26 19:08, , 2F
10/26 19:08, 2F
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章