看板 ASM 關於我們 聯絡資訊
※ 引述《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
LinuxC:哇嗚 謝謝 ^^ 10/23 13:29
narcissusli: '$' 很常用,也很好用啊 10/26 19:08