Thông báo

Collapse
No announcement yet.

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

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

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


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


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


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


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


          • #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:
            Lệnh                                số chu kì máy  
            
            DELAY:
            MOV R0,#245                     1
            HERE2:
            MOV R1,#255                     1
            HERE:
            DJNZ R1,HERE                    2
            DJNZ R0,HERE2                  2
            RET                                 1
            END
            
            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


            • #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:
              Lệnh                                số chu kì máy  
              
              DELAY:
              MOV R0,#245                     1
              HERE2:
              MOV R1,#255                     1
              HERE:
              DJNZ R1,HERE                    2
              DJNZ R0,HERE2                  2
              RET                                 1
              END
              
              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


              • #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...
                X