Thông báo

Collapse
No announcement yet.

Câu lệnh for

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

  • Câu lệnh for

    tình hình là mình viết 2 vòng lặp for nhưng nó chỉ chạy đúng 1 lần, có bác nào biết cách chỉ mình với! tks
    Code:
    #include <16f877a.h>
    #fuses  noprotect, nolvp, nowdt, put, hs
    #use delay(clock=20000000)
    #use fast_io(b)
    #byte portb=0x06
    #bit RB0=0x06.0
    #bit RB1=0x06.1
    #bit RB2=0x06.2
    #bit RB3=0x06.3
    #bit RB4=0x06.4
    #bit RB5=0x06.5
    int dem, i, j, a;
    int duty5;
    int mang[19]={7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
    #INT_TIMER0
    void set_servo()
     {
       set_timer0(129);
       dem++;            
       if (dem >= 200)  
        {
          dem=0;
          RB0=1;
        }
       if (dem >= duty5)RB0=0;
     }
    
    
    void main()
    {
       set_tris_b(0x00);
       portb = 0x00;
       enable_interrupts(int_timer0);
       enable_interrupts(global);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); 
       set_timer0(129);
       j=0; i=0, a=0;
       while(true)      
       {
             if(a==0)
             {
                for(i=0; i<=19; i++)
                {
                   duty5=mang[i];
                   delay_ms(100);
                }
                a=1;
             }
     
             if(a==1)
             {
                for(i=19; i>=0;i--)
                {
                   duty5=mang[i];
                   delay_ms(100);
                }
                   a=0;
              }
       }
    }

  • #2
    Thêm vào mấy biến (LEDs) để test xem cái vòng lặp 2 (a có bằng 1 ko) có chạy ko (nếu ko debug được). Thử thay biến i hoặc khởi tạo i trong vòng lặp xem và khởi tạo j cho vòng lặp 2 xem.
    Đưa biến a vào trong vòng while xem. Chạy đúng 1 lần là cái gì chạy đúng 1 lần bạn?

    Comment


    • #3
      Mảng 19 phần tử thì giá trị index chỉ từ 0 --> 18 thôi. Với truy xuất mảng tĩnh bạn cũng có thể từ 1 đến 19 ( cái này thì tùy chỉ một số ít trình dịch mới hỗ trợ vì nó không theo quy chuẩn ).

      giá trị a luôn đúng sau khi thực hiện vòng for trước đó nên if(a== ... ) chẳng có ý nghĩa gì. Nếu muốn thực hiện lệnh if theo kiểu loại trừ thì dùng if (a==.... )

      //// làm những gì muốn

      else
      if(a==... )

      /// làm những gì muốn

      Lúc đó nó sẽ loại nhũng lệnh sau else.
      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


      • #4
        em cũng sửa lại như bác nói nhưng, nó vẫn thực hiện tạo xung đúng 1 lần... bác xem lại giúp em với. Tks bác #QueDung và bá #Htc2k14. link mô phỏng
        https://www.mediafire.com/?oqlrdicwhfa0m33

        Comment


        • #5
          Nguyên văn bởi camxuc831 Xem bài viết
          em cũng sửa lại như bác nói nhưng, nó vẫn thực hiện tạo xung đúng 1 lần... bác xem lại giúp em với. Tks bác #QueDung và bá #Htc2k14. link mô phỏng
          https://www.mediafire.com/?oqlrdicwhfa0m33
          Mình ko biết xài mô phỏng bạn ơi =]] . Mạch mô phỏng PIC viết code như thế này à?
          biến a là global, gán giá trị a, i trong main... cũng ko thấy vde gì chỗ này.
          j làm gì? dòng j=0;i=0, a=0; ko báo lỗi à? Thường khi code nhớ viết comment để ng dùng sau hoặc ng đọc dễ hình dung bạn nhé !

          Comment


          • #6
            Sai chỗ này thì phải
            for(i=19; i>=0;i--)
            Vì i luôn >=0 do đó vòng For không thoát được.
            Em vừa test thử thì nó báo thế này
            Attached Files
            Last edited by hoacvxd; 18-11-2014, 18:07.

            Comment


            • #7
              Bạn post lại code bạn đã sửa lên xem đã sửa đúng chưa ?

              Comment


              • #8
                Bạn thử sửa thế này
                if(a==1)
                {
                for(i=19; i>0;i--)
                {
                duty5=mang[i];
                delay_ms(100);
                }
                duty5=mang[0];
                delay_ms(100);
                a=0;
                }

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X