| 
 | 
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 |   
 
 
 
 |