Re: [問題] 請教幾個8051的問題

看板ASM (組合語言)作者 (喵喵叫的蜜蜂貓)時間14年前 (2010/10/22 22:03), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1CmPcRlT (ASM)
討論串 (同標題文章)
文章代碼(AID): #1CmPcRlT (ASM)