|
3#
樓主 |
發表於 2011-8-25 20:06:52
|
只看該作者
沒錯 就是這樣 我有試過 放慢如程式 還是一樣 只動一次
ORG 0000H
LOOP:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共 1ms
CLR P1.0 ;清除為0 Low
MOV R0,#38 ;設R0暫存器跑38次 38*0.5(Delay)=19
MOV R1,#50 ;設R1暫存器跑50次
WAIT19R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT19R0 ;R0不為零則跳到WAIT19R0 共跑38次19ms
DJNZ R1,LOOP ;重複(1ms high) (0 low) 週期 20ms 共50次 才換下個狀態
LOOP2:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共1.5 ms
CLR P1.0 ;清除為0 Low
MOV R0,#37 ;設R0暫存器跑37次 37*0.5(Delay)=18.5
MOV R1,#50 ;設R1暫存器跑50次
WAIT18_5R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT18_5R0 ;先減1 R0不為零則跳到WAIT18_5R0 共跑37次18.5ms
DJNZ R1,LOOP2 ;重複(1.5ms high) (0 low) 週期 20ms 共50次 才換下個狀態
LOOP3:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共2.0 ms
CLR P1.0 ;清除為0 Low
MOV R0,#36 ;設R0暫存器跑36次 36*0.5(Delay)=18
MOV R1,#50 ;設R1暫存器跑50次
WAIT18R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT18R0 ;先減1 R0不為零則跳到WAIT18_5R0 共跑37次18.5ms
DJNZ R1,LOOP3 ;重複(2ms high) (0 low) 週期 20ms 共50次 才換下個狀態
JMP LOOP ;跳回迴圈
DELAY: ;Delay 0.5ms
MOV TMOD,#00010000B
D1:
MOV TH1,#FEH
MOV TL1,#0CH
SETB TR1
JNB TF1,$
CLR TF1
RET
END |
|