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

                • Andrea14
                  Vấn đề về tốc độ quay
                  bởi Andrea14
                  Chào mọi người,

                  Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
                  12-12-2025, 12:42
                • bqviet
                  Trả lời cho Đấu tắt điện cho máy tính bảng
                  bởi bqviet
                  Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                  06-12-2025, 17:17
                • nguyendinhvan
                  Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                  bởi nguyendinhvan
                  Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                  05-12-2025, 19:59
                Đang tải...
                X