Thông báo

Collapse
No announcement yet.

giúp hàm tạo trễ 5s

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

  • giúp hàm tạo trễ 5s

    em có một đoạn code như sau:
    void delay(unsigned char time)
    {
    unsigned char x,y;
    for(x=0;x<time;x++)
    {
    for(y=0;y<125;y++)
    {
    ;
    }
    }
    }
    chương trình này cho phép tạo độ trễ 1ms. vậy em muốn tạo trễ 5s thi chỉ cần gọi
    delay(5000) đúng không ạ. mong anh chị gải thích kĩ hơn cho em. thanks

  • #2
    Đúng,với thạch anh 12MHz thì: mỗi 1 lệnh thực hiện mất 8us=>125 vòng lặp của y=1 vòng của i=125*8=1000(us)=1 (ms)
    => thực hiện "t" vòng lặp i mất 1*t=t (ms)
    vanduc0211@gmail.com

    Comment


    • #3
      em thắc mắc ở đây là tại sao khi em gọi chương điều khiển led thi led đang sáng đúng là phải 5s mới tắt nhưng khi chạy mô phỏng thì thấy led tắt ngay. em tăng delay(25000) vẫn vậy ạ.

      Comment


      • #4
        Nguyên văn bởi thuhaui Xem bài viết
        em thắc mắc ở đây là tại sao khi em gọi chương điều khiển led thi led đang sáng đúng là phải 5s mới tắt nhưng khi chạy mô phỏng thì thấy led tắt ngay. em tăng delay(25000) vẫn vậy ạ.
        Bạn post đoạn code lên cho mọi người xem??
        vanduc0211@gmail.com

        Comment


        • #5
          Nguyên văn bởi thuhaui Xem bài viết
          em có một đoạn code như sau:
          void delay(unsigned char time)
          {
          unsigned char x,y;
          for(x=0;x<time;x++)
          {
          for(y=0;y<125;y++)
          {
          ;
          }
          }
          }
          chương trình này cho phép tạo độ trễ 1ms. vậy em muốn tạo trễ 5s thi chỉ cần gọi
          delay(5000) đúng không ạ. mong anh chị gải thích kĩ hơn cho em. thanks
          Bạn đặt kiểu biến nhập vào là unsigned char thì chỉ dc trong vòng 8 bit thôi, tức là giá trị tối đa nhập vào là 255

          Về nguyên tắt delay > 1ms thường sử dụng timer chứ ko dùng phần mềm, còn lớn hơn 65535 us ( khoảng 65ms) thì dùng kết hợp. Mình có vài chương trình delay dùng timer + kết hợp for ở đây

          void delay_ms0 (unsigned int ms) //delay timer 0, ms max 65,
          { long us;
          us= ms*1000;
          TMOD = 0x01;
          us=-us;
          TH0 = us/256;
          TL0 = us%256;
          TR0=1;
          while (!TF0);
          TR0=0;
          TF0=0;}
          void delay1s_0 (unsigned int s )// delay theo s
          { long i,t;
          t=s*15;
          for (i=1;i<= t;i++)
          { delay_ms0 (50);}}
          Sao viết ở trên rồi mà vẫn cần 10 char

          Comment


          • #6
            biến char là biến 8 bit, max là 255, bạn đặt 5000 cũng thế mà 20000 cũng vậy thôi
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              Nguyên văn bởi thuhaui Xem bài viết
              em có một đoạn code như sau:
              void delay(unsigned char time)
              {
              unsigned char x,y;
              for(x=0;x<time;x++)
              {
              for(y=0;y<125;y++)
              {
              ;
              }
              }
              }
              chương trình này cho phép tạo độ trễ 1ms. vậy em muốn tạo trễ 5s thi chỉ cần gọi
              delay(5000) đúng không ạ. mong anh chị gải thích kĩ hơn cho em. thanks
              cũng chuơng trình này em thay biến unsigned char thanh long int thì ok chứ. vì em đã dùng hết timer rồi lên phải tạo trễ bằng phần mềm
              vậy để tạo trễ 1ms thì em cần thay đổi giá trị vòng for đi là ok chứ
              Last edited by thuhaui; 30-07-2012, 11:32.

              Comment


              • #8
                Nguyên văn bởi meoquaithu Xem bài viết
                Bạn đặt kiểu biến nhập vào là unsigned char thì chỉ dc trong vòng 8 bit thôi, tức là giá trị tối đa nhập vào là 255

                Về nguyên tắt delay > 1ms thường sử dụng timer chứ ko dùng phần mềm, còn lớn hơn 65535 us ( khoảng 65ms) thì dùng kết hợp. Mình có vài chương trình delay dùng timer + kết hợp for ở đây




                Sao viết ở trên rồi mà vẫn cần 10 char
                Em có thấy đoạn code ở trên có chỗ nào ghi 10 char nhỉ ?

                Comment


                • #9
                  Nguyên văn bởi thuhaui Xem bài viết
                  cũng chuơng trình này em thay biến unsigned char thanh long int thì ok chứ. vì em đã dùng hết timer rồi lên phải tạo trễ bằng phần mềm
                  vậy để tạo trễ 1ms thì em cần thay đổi giá trị vòng for đi là ok chứ
                  bạn thay thành biến 16 bit là ok. unsigned long time
                  Nguyễn Huy Biên - 01649 802 694
                  gmail :

                  Comment


                  • #10
                    Nguyên văn bởi transisto Xem bài viết
                    Em có thấy đoạn code ở trên có chỗ nào ghi 10 char nhỉ ?
                    Àh là 10 character forum yêu cầu nhập tối thiểu, đã nhập ở trên rồi mà nó vẫn đòi
                    Tiện thể mọi người cho hỏi cách xem số byte ( mã máy) của mấy lệnh C ở đâu

                    Comment


                    • #11
                      Nguyên văn bởi meoquaithu Xem bài viết
                      Àh là 10 character forum yêu cầu nhập tối thiểu, đã nhập ở trên rồi mà nó vẫn đòi
                      Tiện thể mọi người cho hỏi cách xem số byte ( mã máy) của mấy lệnh C ở đâu
                      mình ko hiểu ý bạn. mã máy lẽ ra phải là file hex rồi
                      Nguyễn Huy Biên - 01649 802 694
                      gmail :

                      Comment


                      • #12
                        Chắc bạn ấy hỏi mã của C tốn bao nhiu byte của thanh ghi PC đó. Mình nghĩ chắc không có, bên ASM thì có đó

                        Comment


                        • #13
                          Nguyên văn bởi meoquaithu Xem bài viết
                          Àh là 10 character forum yêu cầu nhập tối thiểu, đã nhập ở trên rồi mà nó vẫn đòi
                          Tiện thể mọi người cho hỏi cách xem số byte ( mã máy) của mấy lệnh C ở đâu
                          lâu rồi ko sài keilC nhưng hình như nó nằm lòng vòng trong cái file ở folder bạn tạo project đó, dùng notepad mở ra rồi xem
                          Nguyên văn bởi jimmyli Xem bài viết
                          Chắc bạn ấy hỏi mã của C tốn bao nhiu byte của thanh ghi PC đó. Mình nghĩ chắc không có, bên ASM thì có đó
                          code C rồi thì phần mềm cũng dịch ra code ASM rồi mới dịch ra hex. Thanh ghi PC là thanh khi 2 byte để để chứa địa chỉ vị trí của lệnh hiện hành lúc làm việc chứ có liên quan gì lúc viết code đâu

                          Comment


                          • #14
                            thời gian chạy trên phần mềm chỉ là mô phỏng mà thôi chứ ko fải tgian thực

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X