mov a,#0 ;將A清零
clr c ;清進位標誌位
mov a,r1 ;取低字節數據
add a,r7 ;低字節數據相加
mov 60h,a ;存低位結果
mov a,r0 ;取高位字字
addc a,r6 ;未高位和並加上低位的進位
mov 61h,a ;存高位結果
2.80C52 內部12分頻,故將 6M/12 = 0.5M 得到頻率,然後將頻率換為
壹個機器周期的時間 T = 1/ (0.5M) = 2 * e -6
即為2us,壹個機器周期的時間 為2 us;
DELAY:MOV R7,#0F6H ; 該指令執行為 2 T 設標號為 A指令
LP: MOV R6,#0FAH ;該指令執行為 2 T 設標號為 B指令
DJNZ R6,$ ;該指令執行為 2 T 設標號為 C指令
DJNZ R7,LP ;該指令執行為 2 T 設標號為 D指令
RET
B指令將 250 傳給 R6, C 指令中 的 "$" 表示本條指令的地址,所以壹直在執行 C指令,
該所用時間 為 2T ,***為 250次, 250* 2T為C指令所執行的時間 ,
D指令中R7為 246,他會執行 B ,C ,D 三條指令,所以,每次要 2T + 250* 2T +2T 的時間 ,
***為 246 *( 2T + 250* 2T +2T ) 再加上A指令的2T 時間 所以***為:
246 *( 2T + 250* 2T +2T ) + 2T = 247972 us 在單片機中記為 250 ms的延時
3.
個人感覺 題目有些問題,51在做16位除法的時候 比較復雜壹點
雖然可以做出來,我簡單的將其最8位處理
mov r0,#50h
mov r7,#10
mov a,#0
loop: add a,@r0
inc r0
djnz r7,loop
mov b ,#10
div ab
mov 5ah,a
4.
MOV R6,#0FAH
mov r7,#10
lp: DJNZ R6,$ ; 1 ms延時
DJNZ R7,LP ; 10 次
RET
約為,10ms,壹般情況,十幾us的偏差是正常的。
註意,這是在妳的剛說的 晶振6MHZ 的前提下的。