Thông báo

Collapse
No announcement yet.

có ai chỉ giúp mình cách tính thời gian delay với

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

  • có ai chỉ giúp mình cách tính thời gian delay với

    mov r6,#0ffh
    de: mov r7,#0ffh
    djnz r7,$
    djnz r6,de

    mình có đoạn code delay như vậy
    viết cho at89s52 dùng thạch anh 12 MHz
    không hiểu làm sao biết cách tính đoạn trên là delay ? giây
    Các cao thủ chỉ giúp em với

  • #2
    minh thi moi hoc thoi, nhung minh nghi nhung cau lenh tren cua ban co van de rui` do
    thach anh 12 tuong duong voi 1000s
    chuyen 255 vao r6
    chuyen 255 vao r7
    giam nhay r7 tai cho : nghia la` tai r7 mang gia' tri 255 se giam ve 0, sau do no' se thuc hien lenh ke tiep la` giam nhay r6, nhung r6 dang mang gia tri 255 se giam ve 0 rui` thuc hien lenh ke tiep,r6 ko co' nhay ve delay duoc,neu muon ban co the mov r6,#0
    noi chung la` bai lap trinh cua ban sai nhieu rui thieu lenh call,va` 2 lenh mov

    Comment


    • #3
      lạ nhỉ sao lại sai được? Mình chép trong sách ra cơ mà?
      Chứ nếu mình tự viết ra được thì tất nhiên là biết cách tính rùi

      theo mình hiểu là nap 255 vào r6
      rồi mỗi lần giảm r6 đi 1 đơn vị thì nạp 255 vào r7 rùi đếm lùi về 0
      sau đó lại giảm r6 và tiếp tục lặp lại .... đến khi r6 về 0 thì sẽ làm lệnh tiếp theo ngay bên dưới

      mình chỉ không biết cách tính thời gian delay ra giây thôi

      Comment


      • #4
        Nguyên văn bởi watery_87 Xem bài viết
        minh thi moi hoc thoi, nhung minh nghi nhung cau lenh tren cua ban co van de rui` do
        thach anh 12 tuong duong voi 1000s
        câu này... ko hiểu nổi ý bạn muốn nói j.
        giam nhay r7 tai cho : nghia la` tai r7 mang gia' tri 255 se giam ve 0,
        sau do no' se thuc hien lenh ke tiep la` giam nhay r6, nhung r6 dang mang gia tri 255 se giam ve 0 rui` thuc hien lenh ke tiep,r6 ko co' nhay ve delay duoc,neu muon ban co the mov r6,#0
        hic.. bạn giảm sao mà từ 255 nó phóng một phát xuống tận 0 hay vậy..? hình như bước nhảy của nó tận mấy trăm đơn vị..hic.
        noi chung la` bai lap trinh cua ban sai nhieu rui thieu lenh call,va` 2 lenh mov
        nếu bạn ko biết, hoặc ko chắc thì ko nên post hướng dẫn ng khác, họ sẽ hiểu cái sai của bạn thành cái đúng, như vậy rất tai hại cho quá trình học hỏi.

        Comment


        • #5
          Dòng lệnh trên là đúng thời gian được tính như sau:
          t(255*2)+1)*(255*2))+1)*t1
          t1=1/((12*10^6)/12)
          muốn hiểu kỹ thì xem tài liệu "Cấu trúc và lập trình họ vi điều khiển 8051 -Nguyễn Tăng Cường,Phan Quốc Thắng"(Chương 3)

          Comment


          • #6
            Dòng lệnh trên là đúng thời gian được tính như sau:
            t(255*2)+1)*(255*2))+1)*t1
            t1=1/((12*10^6)/12)
            muốn hiểu kỹ thì xem tài liệu "Cấu trúc và lập trình họ vi điều khiển 8051 -Nguyễn Tăng Cường,Phan Quốc Thắng"(Chương 3)

            Comment


            • #7
              thanks rất nhiều , không biết có tài liệu ebook nào chỉ kỹ lưỡng vấn đề này không nhỉ?
              đi tìm mua sách cũng oải lắm

              Comment


              • #8
                Nguyên văn bởi thundernhut Xem bài viết
                mov r6,#0ffh
                de: mov r7,#0ffh
                djnz r7,$
                djnz r6,de

                mình có đoạn code delay như vậy
                viết cho at89s52 dùng thạch anh 12 MHz
                không hiểu làm sao biết cách tính đoạn trên là delay ? giây
                Các cao thủ chỉ giúp em với
                món này bon biết chút đỉnh nè!

                bạn thun tính như thế này nha:
                1/Lệnh mov r6,#0ffH có thời gian là T1 chu kỳ máy (cái này bạn tra trong các sách vi điều khiển, 1 chu kỳ máy =1/12 chu kỳ xung dao động; trường hợp thạch anh 12M => chu kỳ máy = 10^(-6) giây )
                2/Đoạn lệnh :

                mov r7,#0ffh
                djnz r7,$
                djnz r6,de

                được thực hiện 255 lần (= giá trị 0ffH trong r6 )

                trong vòng lặp đó:
                *lệnh mov r7,#0ffH có thời gian thực hiện là T1 chu kỳ máy và được thực hiện 1 lần.
                *lệnh djnz r7,$ có thời gian thực hiện là T2 chu kỳ máy và được thực hiên 255 lần ( = giá trị 0ffH trong r7)
                *lệnh djnz r6,de có thời gian thực hiện cũng là T2 chu kỳ máy, và được thực hiện 1 lần

                Tóm lại:

                mov r6,#0ffh ;T1
                de: mov r7,#0ffh ;T1
                djnz r7,$ ;T2
                djnz r6,de ;T2

                => delay= T1+ 255*(T1+255*T2+T2)= T1 +255*(T1+256.T2) (chu kỳ máy)

                *ko biết có sai chỗ nào ko nhỉ
                Kiếm tiền cưới vợ!!!

                Comment


                • #9
                  Á Á Á , té xỉu
                  trời ơi, sao kinh vậy , có công thức hay cách gì tính nhanh ko ?
                  hic hic
                  vậy thí dụ cần delay 1s thì viết lặp thế nào cho đúng 1 giấy với mạch trên?

                  Comment


                  • #10
                    Nguyên văn bởi thundernhut Xem bài viết
                    Á Á Á , té xỉu
                    trời ơi, sao kinh vậy , có công thức hay cách gì tính nhanh ko ?
                    hic hic
                    vậy thí dụ cần delay 1s thì viết lặp thế nào cho đúng 1 giấy với mạch trên?
                    vậy thì em phải giải pt ngược lại:

                    1000.000 = T1 + R6.( (R7+1).T2 + T1) ( 1s = 1 triệu chu kỳ máy ứng với thạch anh 12M )

                    tra sách tìm T1, T2 ( theo anh nhớ mang máng T1= 2, T2=3 ),
                    từ đó em phải giải một phương trình nghiệm nguyên với 2 ẩn là R6 , R7
                    Để thật chính xác thì phải hì hục với cái pt khốn khổ kia, còn không thì giải gần đúng ( tất nhiên đánh đổi lại là dộ chính xác thời gian delay của em)
                    Ngày trước khi viết chương trình delay anh cũng chả tính gì cả, thử một lượt các giá trị và so sánh với đồng hồ Casio tất nhiên phải kết hợp với một chương trình nhập phím,...

                    em thử tìm T1, T2 là bao nhiêu đi, có thể anh giải được cái...của nợ này đấy
                    Kiếm tiền cưới vợ!!!

                    Comment


                    • #11
                      Tạo delay thì dùng timer cho nó dễ tính và tiết kiệm

                      Comment


                      • #12
                        Nguyên văn bởi enter88 Xem bài viết
                        Tạo delay thì dùng timer cho nó dễ tính và tiết kiệm
                        bạn enter thử viết một chương trình delay dùng định thời đúng 1s thử xem! nhớ kèm theo các tính toán cụ thể
                        Kiếm tiền cưới vợ!!!

                        Comment


                        • #13
                          T1 + R6.( (R7+1).T2 + T1) = 1.000.000 us
                          Ptrình này 2 ẩn, 2 hằng cần tra cứu

                          2 hằng tra cứu là T1 và T2 :
                          lệnh mov Rn, #data cần 1 chu kỳ máy => T1 = 1
                          lệnh djnz direct, address cần 2 chu kỳ máy => T2 = 2

                          2 ẩn R6 và R7(giá trị nhập vào thanh ghi R6 và R7)
                          1 phương trình 2 ẩn, đương nhiên đây là bài toán thiết kế ta chọn 1 ần rồi suy ra ẩn còn lại.
                          1 chút ngờ vực ta thử ktra : R6 = R7 = 255 => 1 + 255.((255 +1).2 + 1) = 130.816 us ~ 0.13 s
                          nếu cách tính trên là đúng thì giá trị 1s cần thêm r5 nữa mới đủ "đô"
                          và để có 1 s "tròn trịa" cần chọn R5, R6 và R7 thành các số mà việc nhẩm tính ra nó cần phải nhờ máy vi tính thôi

                          có lẽ mình tự chỉnh lại như sau

                          mov r5, x

                          vong1: mov r6,y
                          vong2: mov r7,z
                          djnz r7,$
                          djnz r6,vong2

                          djnz r5,vong1

                          vậy cách tính giá trị delay là
                          T1 + x*(T1 + T2 + y*(T1 + (z+1)*T2))

                          sau khi nhờ máy vi tính giúp thì ta có :

                          r5 = 11 r6 = 218 r7 = 207
                          r5 = 33 r6 = 60 r7 = 251
                          r5 = 33 r6 = 100 r7 = 150
                          r5 = 63 r6 = 46 r7 = 171
                          r5 = 63 r6 = 138 r7 = 56
                          r5 = 63 r6 = 230 r7 = 33
                          r5 = 99 r6 = 22 r7 = 228
                          r5 = 99 r6 = 34 r7 = 147
                          r5 = 99 r6 = 54 r7 = 92
                          r5 = 99 r6 = 66 r7 = 75
                          r5 = 99 r6 = 102 r7 = 48
                          r5 = 99 r6 = 198 r7 = 24
                          r5 = 111 r6 = 38 r7 = 117
                          r5 = 111 r6 = 114 r7 = 38
                          r5 = 111 r6 = 158 r7 = 27
                          r5 = 117 r6 = 32 r7 = 132
                          r5 = 117 r6 = 96 r7 = 43
                          r5 = 143 r6 = 30 r7 = 115
                          r5 = 231 r6 = 14 r7 = 153
                          r5 = 231 r6 = 42 r7 = 50
                          r5 = 231 r6 = 206 r7 = 9

                          Thanks tất cả các anh em đã chỉ dẫn
                          mình đã test trên mạch led thật và cho kết quả vô cùng chính xác
                          Tăng các bro luôn chương trình nhỏ nhỏ tính thời gian với đoạn lệnh trên
                          Attached Files
                          Last edited by thundernhut; 31-08-2009, 16:54.

                          Comment


                          • #14
                            .................................................. .......
                            Last edited by typhoon; 31-08-2009, 18:18. Lý do: mistake

                            Comment


                            • #15
                              Nguyên văn bởi bonseho Xem bài viết
                              bạn enter thử viết một chương trình delay dùng định thời đúng 1s thử xem! nhớ kèm theo các tính toán cụ thể
                              dung thach anh 12Mh nha cho chinh xac
                              DELAY1S: MOV 7AH,#500000
                              DJNZ 7FH,$

                              vay chac ban hieu chu gi?
                              djnz 2 chu ky may tuc 2us, giam 500.000 tuc la ton thoi gian = 500.000 x 2us = 1s

                              Comment

                              Về tác giả

                              Collapse

                              thundernhut Tìm hiểu thêm về thundernhut

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

                              Collapse

                              Đang tải...
                              X