Thông báo

Collapse
No announcement yet.

Ai hướng dẫn e cách viết chương trình con delay trong Keil C với!

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

  • Ai hướng dẫn e cách viết chương trình con delay trong Keil C với!

    e mới tìm hiểu 8051 các bác chỉ giùm e cách viết hàm delay tạo trễ cho led giùm e,ví dụ như e dùng thạch anh khác nhau thì cách tính như thế nào e thấy 1 chuong trinh con delay cơ bản như vầy
    #include "regx51.h"

    #define led P1

    void delay(unsigned char time){
    while(time--)
    {
    unsigned char j = 125;
    while(j--);
    }
    }


    void main(void)
    {
    while(1)
    {
    led = 0x01;
    delay(1000);
    led = 0x56;
    delay(1000);
    }}
    không biết cái 125 ngta tìm đâu ra, làm sao tạo trễ 1s hay 1ms cho đúng với thời gian thực dc ak? e search tren diễn đàn rồi mà sao thấy trả loi chung chung quá e ko hiểu.Bên Avr codevision tự khai báo lun.còn con này phải khai báo thêm cực quá,hix

  • #2
    Bạn chọn tần số thạch anh rồi cho Debug từng vòng lặp trong chương trình delay sẽ thấy đc thời gian 1 vòng lặp, từ đó tính ra đc cần bao nhiêu vòng lặp

    VD thạch anh 12Mhz thì mỗi vòng tốn khoảng ~8us

    Comment


    • #3
      Như vậy đó. 8x125~1ms. Bạn chú ý nhé unsigned char chỉ đến 255 thôi, bạn lấy 1 tỷ thì vẫn chỉ là 255 thôi.

      Comment


      • #4
        Nguyên văn bởi student_dtvt Xem bài viết
        Bạn chọn tần số thạch anh rồi cho Debug từng vòng lặp trong chương trình delay sẽ thấy đc thời gian 1 vòng lặp, từ đó tính ra đc cần bao nhiêu vòng lặp

        VD thạch anh 12Mhz thì mỗi vòng tốn khoảng ~8us
        mỗi vòng tốn ~8us là sao vậy a? e thấy T=1/f=1/12Mhz~0.08us mà nếu như vậy thì unsigned char là 12500 phải ko a? 12500*0.08=1ms
        =>đơn vị delay là ms

        Comment


        • #5
          ko ai reply e hết ,

          Comment


          • #6
            Nguyên văn bởi binhminhdem Xem bài viết
            mỗi vòng tốn ~8us là sao vậy a? e thấy T=1/f=1/12Mhz~0.08us mà nếu như vậy thì unsigned char là 12500 phải ko a? 12500*0.08=1ms
            =>đơn vị delay là ms
            sao bạn lại tính T làm gì. ý bạn muốn tính chu kì máy chứ gì. Cái đó dùng cho ASM. Mà bạn cũng tính sai mất rùi. với 8051 thì chu kì máy : T=1/(f/12)
            f=12Mhz-> T=1us
            Trong phần mềm keil C nó cho ta biết đc mỗi vòng lặp thì mất thời gian là 8us đối với ngôn ngữ C

            Comment


            • #7
              ak vậy giá trị thạch anh là 8mHz hay 12MHZ hay 4MHz gì thi 1 vòng lặp cũng mất 8us thôi đúng ko bác ?

              Comment


              • #8
                Dĩ nhiên là nó phải mất khác.
                Để đơn giản khỏi tính bạn nên viết 1 file lib ( hoặc nhờ ai viết - mới học chắc không thể viết được). Khi đó cần khai báo cái tần số thạch anh thôi. Chương trình nó sẽ tự tính.

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X