Thông báo

Collapse
No announcement yet.

Sữa Code Giúp Em

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

  • Sữa Code Giúp Em

    #include <regx51.h>
    unsigned long x;
    unsigned char b;
    unsigned char c;
    unsigned char e;
    #define BYTE1(v) ((unsigned char) (v))
    #define BYTE2(v) ((unsigned char) (((unsigned long) (v)) >> 8))
    #define BYTE3(v) ((unsigned char) (((unsigned long) (v)) >> 16))

    unsigned long code a2[]={0x0000,0x0001,0x0003,0x00007,0x000f,0x001f,0x003 f,0x0007f,0x00ff,
    0x01ff,0x03ff,0x007ff,0x0fff,0x1fff,
    0x0000,0x0001,0x0003,0x00007,0x000f,0x001f,0x003f, 0x0007f,0x00ff,
    0x01ff,0x03ff,0x007ff,0x0fff,0x2fff};
    unsigned long code a3[]={0x0000,0x0001,0x0003,0x00007,0x000f,0x001f,0x003 f,0x0007f,0x00ff,
    0x01ff,0x03ff,0x007ff,0x0fff,0x1fff,0x2fff,
    0x1fff,0x2fff,0x1fff,0x2fff,0x1fff,0x2fff,0x1fff,0 x2fff,0x1fff,0x2fff,0x1fff,0x2fff};

    void delay()////delay xung 555///////
    {
    while(!P1_0);
    while(P1_0);
    }
    void xuat (void)
    {
    P2 = BYTE1(x);
    P3 = BYTE2(x);


    }
    void main(void)
    {
    while(1)
    {
    for(b=0;b<27;b++)
    {
    x=a2[b];
    xuat();
    delay();
    }
    }
    }


    Code e nó thế này mà giờ e muốn cho chạy 6 lần của mảng a2 xong thì chạy a3 và quay lại từ đầu
    E làm hết cách mà nó cứ chạy 1 trong 2
    Mấy a chỉ giúp e với
    Thank nhiều ạ

  • #2
    Có ai còn thức giúp e với

    Comment


    • #3
      #include <regx51.h>
      unsigned long x;
      unsigned char b;
      unsigned char c;
      unsigned char d;
      #define BYTE1(v) ((unsigned char) (v))
      #define BYTE2(v) ((unsigned char) (((unsigned long) (v)) >> 8))
      #define BYTE3(v) ((unsigned char) (((unsigned long) (v)) >> 16))

      unsigned long code a2[]={0x0000,0x0001,0x0003,0x00007,0x000f,0x001f,0x003 f,0x0007f,0x00ff,
      0x01ff,0x03ff,0x007ff,0x0fff,0x1fff,
      0x0000,0x0001,0x0003,0x00007,0x000f,0x001f,0x003f, 0x0007f,0x00ff,
      0x01ff,0x03ff,0x007ff,0x0fff,0x2fff};
      unsigned long code a3[]={0x0000,0x0001,0x0003,0x00007,0x000f,0x001f,0x003 f,0x0007f,0x00ff,
      0x01ff,0x03ff,0x007ff,0x0fff,0x1fff,0x2fff,
      0x1fff,0x2fff,0x1fff,0x2fff,0x1fff,0x2fff,0x1fff,0 x2fff,0x1fff,0x2fff,0x1fff,0x2fff};

      void delay()////delay xung 555///////
      {
      while(!P1_0);
      while(P1_0);
      }
      void xuat (void)
      {
      P2 = BYTE1(x);
      P3 = BYTE2(x);


      }
      ///////////////
      void ef1 (void)
      {
      while(1)
      {
      for(b=0;b<28;b++)
      {
      x=a2[b];
      xuat();
      delay();
      }
      }
      }
      ///////

      void ef2(void)
      {
      while(1)
      {
      for(b=0;b<27;b++)
      {
      x=a3[b];
      xuat();
      }
      }
      }
      //////////

      void main(void)
      {
      c=0;
      while(c<=5)
      {
      ef1();
      }
      ef2();
      delay();

      }

      nó vẫn cứ thế

      Comment


      • #4
        Hjc mấy a cao thủ ko ai chỉ giúp e với

        Comment


        • #5
          Vòng while(1) trong các hàm ef1 , ef2 lúc nào cũng đúng và thế là nó lặp mãi ko thoát ra đc. Gọi hàm nào trước thì nó nằm đó mãi.

          Đề nghị về xem lại sách vở ghi chép, học lại lập trình.

          Comment


          • #6
            Chỗ này :
            void main(void)
            {
            while(1)
            {

            c=0;
            while(c<=5)
            {
            ef1();
            ////////// Cho thêm cái này ////
            c++;
            }
            ef2();
            delay();
            }
            }

            ///////// Khi chạy hết 5 lần ef1 ( do c++ ( tăng dần >5) nó sẽ thoát nhảy sang ef2 chạy 1 lần ... sau đó delay .... rồi lại quay lại chu trình ấy ( do nằm trong while (1) ).

            Nói Chung nên đọc lại lập trình C cơ bản về mấy cái vòng lặp ( while, for, do ... )
            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

            Comment


            • #7
              Bạn cũng cần bỏ lệnh while(1) trong các chương trình ef1, ef2 thì nó mới chạy được .... Để vòng lặp vô tận trong 1 chương trình con thì nó thoát sao được sang trương trình khác ( trong khi trương trình bạn viết chẳng có điều kiện hay sự kiện để Nó thoát khỏi while(1) ).
              Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

              Comment


              • #8
                Nguyên văn bởi queduong Xem bài viết
                Bạn cũng cần bỏ lệnh while(1) trong các chương trình ef1, ef2 thì nó mới chạy được .... Để vòng lặp vô tận trong 1 chương trình con thì nó thoát sao được sang trương trình khác ( trong khi trương trình bạn viết chẳng có điều kiện hay sự kiện để Nó thoát khỏi while(1) ).


                dạ ổn rồi a. e thật là gà quá. e hiểu lệnh nhưng e không biết sử dụng và xử lý với nó thế nào cho chạy đúng. phải học thêm mới được
                thank anh nhiều ạ

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X