Thông báo

Collapse
No announcement yet.

Cần 1 chương trình delay 1 us cho 8051 ! rất bế tắc cần help!!

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

  • Cần 1 chương trình delay 1 us cho 8051 ! rất bế tắc cần help!!

    mình đã viết 1 hàm bằng c code delay 1 ms rùi nhưng delay 1 us thì cố gắng cũng chẳng được, mình còn dùng cách chèn đoạn asm vào (chèn lệnh "mov A, #5" vào vì mình biết nó tốn 1 chu kì máy) nhưng khi mô phỏng osilo trong protues vẫn ko đc. trình mình còi quá mong các tiền bối chỉ dạy...

  • #2
    bác viết bằng C thì thời gian delay = thời gian lệnh for + 1us => tổng thời gian sẽ không đúng, ngoài ra còn cộng thêm thời gian bác gọi hàm nữa

    Comment


    • #3
      Thạch anh bao nhiêu ? Nếu 12MHz chèn mỗi lệnh NOP.

      Comment


      • #4
        bác vanlong12345 có cao kiến j giúp tui với chứ tui viết hàm truyền tham số vào để delay us tao xung kich mak viết bằng asm thi tui chuối lắm.

        Comment


        • #5
          Chốt lại là không viết được ngoài cách dùng ASM. Bởi vì chu kì máy của 8051 quá cao.

          Comment


          • #6
            Bác Dương Ác Không Sợ Vợ nói em mới nhớ hình như trong KeilC nó có lệnh NOP = 1 chu kỳ ngồi chơi thì phải, lâu quá quên hé hé.
            Bác viết hàm C delay cho 1 hoặc vài us cho 8051 thì nan giải lắm à, có 1 cách dùng tạm là trong chương trình chính bác cứ NOP NOP NOP NOP NOP NOP cho đủ thì thôi, em thấy chỗ này làm vầy không ai chê dở đâu,
            Phần này nói thêm: nếu delay 1 hoặc 2us hay 5us cũng cho kết quả giống nhau thì viết luôn hàm cụ thể delay_5us rồi cứ gặp là phang luôn 5us, nhanh gọn lẹ, delay_5us viết thì khả thi hơn 1us rồi hỉ

            Comment


            • #7
              Nguyên văn bởi vanlong12345 Xem bài viết
              Bác Dương Ác Không Sợ Vợ nói em mới nhớ hình như trong KeilC nó có lệnh NOP = 1 chu kỳ ngồi chơi thì phải, lâu quá quên hé hé.
              Bác viết hàm C delay cho 1 hoặc vài us cho 8051 thì nan giải lắm à, có 1 cách dùng tạm là trong chương trình chính bác cứ NOP NOP NOP NOP NOP NOP cho đủ thì thôi, em thấy chỗ này làm vầy không ai chê dở đâu,
              Phần này nói thêm: nếu delay 1 hoặc 2us hay 5us cũng cho kết quả giống nhau thì viết luôn hàm cụ thể delay_5us rồi cứ gặp là phang luôn 5us, nhanh gọn lẹ, delay_5us viết thì khả thi hơn 1us rồi hỉ
              Thì đúng như vậy mà. Thường thì khi sử dụng (thạch anh 12MHz) thì chu kì máy là 1us rồi. Nếu dùng cấu trúc lặp để tạo delay thì thông thường mỗi lần lặp mất tối thiểu từ 5-7chu kì ~ 5-7us. Và đương nhiên thời gian delay của hàm là bội số của thời gian này nên sẽ không có delay 1us.

              Comment


              • #8
                Thì có thể dùng #define delay1us nop(); được mà. nếu delay thấp thì cứ chèn macro cho dễ gọi, code cũng dễ nhìn. Delay lớn thì mới dùng vòng lặp. Nhớ mang máng từ trước mình toàn làm thế này
                Code:
                #define delay1us() nop()
                #define delay2us() nop(); nop()
                #define delay3us() delay2us();delay1us()
                #define delay5us() delay3us(); delay2us()
                #define delay10us() delay5us(); delay5us()
                Đại loại là thế, cũng không nhớ chính xác với keilc thì viết thế phải không ý. Còn đối với delay cần cao thì dùng vòng lặp là chuẩn men rồi

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X