Tư vấn cho em tạo thời gian trể chính xác bằng cách này.

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • nguyentot90
    Thành viên tích cực
    • Mar 2011
    • 488

    #1

    Tư vấn cho em tạo thời gian trể chính xác bằng cách này.

    DELAY:
    MOV R0,#245
    HERE2:
    MOV R1,#255
    HERE:
    DJNZ R1,HERE
    DJNZ R0,HERE2
    RET
    END

    Với cách viết như trên thì nhờ Anh, chi tư vấn cho em cách tính 9 xác thời gian trể được không..ví dụ em cần 5us..Cảm ơn!

  • nguyentot90
    Thành viên tích cực
    • Mar 2011
    • 488

    #2
    Hic nghe đồn là tính theo chu kỳ máy 1us nhưng hỏng biết tính như thế nào ???

    Comment

    • nguyentot90
      Thành viên tích cực
      • Mar 2011
      • 488

      #3
      Anh chị vào nhận xét giúp em đúng hay sai.
      Tạo thời gian trể ~67,5ms

      delay_67,5ms:
      mov r1,#255
      delay:
      mov r2,#130
      delay1:
      djnz r2,$
      djnz r1,delay
      ret

      Comment

      • rongdatvamuc
        Thành viên chính thức
        • Apr 2012
        • 96

        #4
        Cái này đơn giản thôi!
        Mỗi lệnh DJNZ chiếm 2 micro giây, vậy thời gian trễ sẽ bằng tích các giá trị vòng lặp nhân với 2.
        Ví dụ:
        MOV R0,#20
        DEL1:
        MOV R1,#100
        DJNZ R1,$
        DJNZ R0,DEL1
        RET
        Thời gian trễ sẽ là: 20x100x2=4000 micro giây = 4 ms.
        Không biết ngày mai sẽ ra sao?
        Mà có ra sao cũng chẳng sao.

        Comment

        • Ck33spkt
          Thành viên tích cực
          • Apr 2010
          • 616

          #5
          Nguyên văn bởi nguyentot90 Xem bài viết
          Anh chị vào nhận xét giúp em đúng hay sai.
          Tạo thời gian trể ~67,5ms

          delay_67,5ms:
          mov r1,#255
          delay:
          mov r2,#130
          delay1:
          djnz r2,$
          djnz r1,delay
          ret
          Nguyên văn bởi rongdatvamuc Xem bài viết
          Cái này đơn giản thôi!
          Mỗi lệnh DJNZ chiếm 2 micro giây, vậy thời gian trễ sẽ bằng tích các giá trị vòng lặp nhân với 2.
          Ví dụ:
          MOV R0,#20
          DEL1:
          MOV R1,#100
          DJNZ R1,$
          DJNZ R0,DEL1
          RET
          Thời gian trễ sẽ là: 20x100x2=4000 micro giây = 4 ms.

          Đúng là cách tính đơn giản nhưng không hẳn đã đúng. Thời gian delay là bao nhiêu còn phụ thuộc vào tần số mạch dao động mà bạn sử dụng.

          Comment

          • thuongdtqb
            Thành viên tích cực
            • Apr 2011
            • 513

            #6
            Nguyên văn bởi nguyentot90 Xem bài viết
            DELAY:
            MOV R0,#245
            HERE2:
            MOV R1,#255
            HERE:
            DJNZ R1,HERE
            DJNZ R0,HERE2
            RET
            END

            Với cách viết như trên thì nhờ Anh, chi tư vấn cho em cách tính 9 xác thời gian trể được không..ví dụ em cần 5us..Cảm ơn!
            muốn tính thời gian trể thì bạn phải đưa ra thạch anh dao động có giá trị là bao nhiêu và số chu kì máy của một lệnh.
            Vd như thạch anh bạn là 12MHz thì 1 chu kì máy = 12 chu kì dao đọng thạch anh => 1 chu kì máy là 12/12=1.uS thì số thời gian delay của code trên là:

            Code:
            [COLOR=#333333][B]Lệnh                                số chu kì máy  [/B]
            
            DELAY:[/COLOR]
            [COLOR=#333333]MOV R0,#245                     1[/COLOR]
            [COLOR=#333333]HERE2:[/COLOR]
            [COLOR=#333333]MOV R1,#255                     1[/COLOR]
            [COLOR=#333333]HERE:[/COLOR]
            [COLOR=#333333]DJNZ R1,HERE                    2[/COLOR]
            [COLOR=#333333]DJNZ R0,HERE2                  2[/COLOR]
            [COLOR=#333333]RET                                 1[/COLOR]
            [COLOR=#333333]END
            [/COLOR]
            thời gian thực thi vòng lặp HERE:
            2 x 255 x 1uS = 510 uS
            Vòng lặp HERE2 thục thi vòng lặp HERE 245 lần:
            245 x 510 uS = 124950 uS
            tuy nhiên ở đây còn thời gian thực thi lệnh MOV R1,#255 và lệnh DJNZ R0,#HERE2 ở đầu và cuối vòng lặp HERE2 tạo nên:
            ( 2+1) x 245 x 1 uS = 735 uS
            tổng cộng thời gian trể là:
            124950uS + 735uS = 125685 uS

            không biết mình tính thế có hợp lý không nửa
            ★♀♥♂Oº°(¯`◦_ _◦´¯)°ºO♂♥♀ღ ★

            Comment

            • Ck33spkt
              Thành viên tích cực
              • Apr 2010
              • 616

              #7
              Nguyên văn bởi thuongdtqb Xem bài viết
              muốn tính thời gian trể thì bạn phải đưa ra thạch anh dao động có giá trị là bao nhiêu và số chu kì máy của một lệnh.
              Vd như thạch anh bạn là 12MHz thì 1 chu kì máy = 12 chu kì dao đọng thạch anh => 1 chu kì máy là 12/12=1.uS thì số thời gian delay của code trên là:

              Code:
              [COLOR=#333333][B]Lệnh                                số chu kì máy  [/B]
              
              DELAY:[/COLOR]
              [COLOR=#333333]MOV R0,#245                     1[/COLOR]
              [COLOR=#333333]HERE2:[/COLOR]
              [COLOR=#333333]MOV R1,#255                     1[/COLOR]
              [COLOR=#333333]HERE:[/COLOR]
              [COLOR=#333333]DJNZ R1,HERE                    2[/COLOR]
              [COLOR=#333333]DJNZ R0,HERE2                  2[/COLOR]
              [COLOR=#333333]RET                                 1[/COLOR]
              [COLOR=#333333]END
              [/COLOR]
              thời gian thực thi vòng lặp HERE:
              2 x 255 x 1uS = 510 uS
              Vòng lặp HERE2 thục thi vòng lặp HERE 245 lần:
              245 x 510 uS = 124950 uS
              tuy nhiên ở đây còn thời gian thực thi lệnh MOV R1,#255 và lệnh DJNZ R0,#HERE2 ở đầu và cuối vòng lặp HERE2 tạo nên:
              ( 2+1) x 245 x 1 uS = 735 uS
              tổng cộng thời gian trể là:
              124950uS + 735uS = 125685 uS

              không biết mình tính thế có hợp lý không nửa
              Bạn tính thế này là tương đối chính xác rồi!
              Với ví dụ trên tính chính xác là:
              - Thực hiện xong vòng lặp HERE tốn số chu kỳ máy (MC) là: 2 * 255 = 510 MC
              - Thực hiện xong vòng lặp HERE 2 tốn chu kỳ máy là: (2 + 1 + 510) * 245 = 125685 MC
              => Tổng số chu kỳ máy của vòng lặp DELAY trên là: 125685 + 1 + 1 = 125687 MC
              Từ đây chỉ việc nhân thời gian của một chu kỳ máy với tổng số chu kỳ máy của vòng lặp sẽ cho ra thời gian delay!

              Comment

              • thuongdtqb
                Thành viên tích cực
                • Apr 2011
                • 513

                #8
                Nguyên văn bởi Ck33spkt Xem bài viết
                Bạn tính thế này là tương đối chính xác rồi!
                Với ví dụ trên tính chính xác là:
                - Thực hiện xong vòng lặp HERE tốn số chu kỳ máy (MC) là: 2 * 255 = 510 MC
                - Thực hiện xong vòng lặp HERE 2 tốn chu kỳ máy là: (2 + 1 + 510) * 245 = 125685 MC
                => Tổng số chu kỳ máy của vòng lặp DELAY trên là: 125685 + 1 + 1 = 125687 MC
                Từ đây chỉ việc nhân thời gian của một chu kỳ máy với tổng số chu kỳ máy của vòng lặp sẽ cho ra thời gian delay!
                ah có phải bạn tính thêm cả thời gian thực hiện lệnh MOV R0,245 và lệnh RET nửa là thêm 1+1 đó hả bạn
                nhanh tiện cho mình hỏi cái này với:
                cách tạo ra xung PWM là như thế nào vậy? nó có phải là tạo ra chu kì sóng vuông với tần số >30Hz không.
                ★♀♥♂Oº°(¯`◦_ _◦´¯)°ºO♂♥♀ღ ★

                Comment

                Về tác giả

                Collapse

                nguyentot90 Nguyễn Văn Tốt was born 1990 Tìm hiểu thêm về nguyentot90

                Bài viết mới nhất

                Collapse

                Đang tải...