DEL_L: ;延時R7*0.1毫秒,晶振在11.0592MHZ
;MOV R7,#1 ;因為執行DEL_H時已經變成0(暫時想不到當初為什麼要+這個)
MOV A,#27H ;27H X 40us 約 = 1.56ms ,先前已經有1ms了
CPL PWM
ADD A,PWM
MOV COUNT,A
LOOP2:
;SETB TR0 ;開啟T0計數器
;CLR TR0 ;關閉T0計數器
MOV R4,#0AH ;10次
LOOP3:
NOP ;每個 nop 延時 1us
NOP
DJNZ R4,LOOP3 ;R4=0時跳下一行=>(1us+1us+2us)X10 = 40us
DJNZ COUNT,LOOP2 ;將PWM LOW的值乘以40us
MOV CUT,#0 ;因為T0中斷給兩個副程式使用,所以CUT累加在此須清除
RET
我不太肯定紅色語句的寫法有否問題,因為查 8051 instruction set 沒有這種寫法。
可否改為先找取 PWM 內的數值至 A, 執行 CPL A 指令,然後把 A 內的值回傳至 PWM。再之後才做 這幾句
MOV A,#27H ;27H X 40us 約 = 1.56ms ,先前已經有1ms了
ADD A,PWM
MOV COUNT,A
LOOP2:
...............
...............
不知這樣有否幫助。 |