Thông báo

Collapse
No announcement yet.

hàm trong C

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

  • hàm trong C

    anh em cho em hỏi là em có 3 hàm con lần luot là :
    hamcon1();
    {...
    }
    hamcon2();
    {..
    }
    hamcon3();
    {..}
    main()
    {....
    }.


    em muốn gọi hàm con lần lươt theo các switch tác đong là khi ấn P1_0 thì hàm con 1 se dc gọi khi ấn P1_0 thì hàm con 2 se dc goi,va tuong tự cho hàm con 3, mỗi lần goi như thế chỉ dc 1 hàm chạy, muốn chay này khi thì phải trả 2 switch kia về trang thái off ,Moi nguoi giup em vơi , em xài câu truc if...else makhông dc ! hjc thankssssss Cho em hỏi lun là em xài 89c51 sử dung P0 thì phải treo trở lên phải không ? những Port có cầnn treo không?

  • #2
    Nguyên văn bởi handoidenbac Xem bài viết
    anh em cho em hỏi là em có 3 hàm con lần luot là :
    hamcon1();
    {...
    }
    hamcon2();
    {..
    }
    hamcon3();
    {..}
    main()
    {....
    }.


    em muốn gọi hàm con lần lươt theo các switch tác đong là khi ấn P1_0 thì hàm con 1 se dc gọi khi ấn P1_0 thì hàm con 2 se dc goi,va tuong tự cho hàm con 3, mỗi lần goi như thế chỉ dc 1 hàm chạy, muốn chay này khi thì phải trả 2 switch kia về trang thái off ,Moi nguoi giup em vơi , em xài câu truc if...else makhông dc ! hjc thankssssss Cho em hỏi lun là em xài 89c51 sử dung P0 thì phải treo trở lên phải không ? những Port có cầnn treo không?
    mình đọc bài của bạn ko hiểu ý bạn lắm
    mỗi lần goi như thế chỉ dc 1 hàm chạy, muốn chay này khi thì phải trả 2 switch kia về trang thái off
    ko hiểu
    bạn nói rõ hơn nhé

    Comment


    • #3
      hjc ý của em là có 3 công tác sẽ điều khiẻn 3 hàm ,mỗi lần chỉ gọi được 1 hàm ,và 1 công tắc sẽ điều khiẻn 1 hàm , khi công tác diều khiển hàm này chay thì 2 cái kia se bi khoá ,dù co bật nhưng chương trình vẫn không chạy, tức là tại 1 thời điểm chỉ duy I dc 1 công tắc chạy,

      Comment


      • #4
        hamcon1()
        {
        if(nut1) ...;
        while(nut1);
        }
        hamcon2()
        {
        if(nut2) ...;
        while(nut3);
        }
        hamcon3()
        {
        if(nut3) ...;
        while(nut3);
        }
        main()
        {
        while (1)
        {
        hamcon1();
        hamcon2();
        hamcon3();
        }
        }
        123...

        Comment


        • #5
          của em là ấn thằng này thì hàm này dc gọi, ấn thằng kia thì thăng kia dc goi, và khi hàm này gọi thì hàm kia 2 công tắc kia bia khoá chéo! túc là dù có ấn nhưng hàm vẫn không chay đươc, hjc giúp dệ với

          Comment


          • #6
            hamcon1()
            {
            if(nut1) ...;
            while(nut1);
            }
            hamcon2()
            {
            if(nut2) ...;
            while(nut3);
            }
            hamcon3()
            {
            if(nut3) ...;
            while(nut3);
            }
            main()
            {
            while (1)
            {
            hamcon1();
            hamcon2();
            hamcon3();
            }
            }
            __________________


            zi la minh chèn công tắc trong hàm luon hả anh?

            Comment


            • #7
              Cái này đơn giản mà, bạn làm như sau nhé:

              if(nut1 && !nut2 && !nut3)
              hamcon1();
              if(nut2 && !nut1 && !nut3)
              hamcon2();
              if(nut3 && !nut1 && !nut2)
              hamcon3();

              Comment


              • #8
                em co 3 hàm thế này nhé
                dktudong() ứng voi P1_0
                dktay() P1_1
                dkluanphien() P1_3

                mấy anh chỉ hộ e code nay với , ấn nut P1_0 thì hàm P1_0 se dc gọi,tai một thời điểm chỉ 1 hàm dc gọi ...dù có ấn mấy cái kia thi cung bi khoá ! help me , em moi tiem hiểu vdk = code C

                Comment


                • #9
                  Theo mình nghĩ là VDK tại 1 thời diểm chỉ thực hiện dược 1 công việc, nên tại 1 thời diểm chỉ gọi dược 1 hàm thôi. Nếu bạn muốn ấn P1_0 hàm P1_0 dược gọi, ấn P1_1 hàm P1_1 lai dược gọi nữa thì phải dùng ngắt ngoài hoặc có câu lệnh gì dó trong hàm P1_0 dể chuyển sang hàm P1_1, lúc chuyển sang hàm P1_1 thì hàm P1_0 tạm thời dừng chạy.

                  Comment


                  • #10
                    uhm, mà minh mới hoc vdk mấy cái ngắt còn mơ hồ quá hjc, mây a chỉ e code viết bằng C đi

                    Comment


                    • #11
                      Bạn hunterX nói sai rồi: thông thường ta sẽ gọi hàm kiểm tra nút nhấn trong timer. Nếu giả sử chương trình đang ở trong hàm con thứ nhất mà nút thứ hai được nhấn thì chương trình sẽ chuyển hướng xang ham con thứ hai để thực hiện. => không thỏa đk một thời điểm chỉ có một hàm được gọi.
                      handoidenbac: bạn làm theo cách gltd hướng dẫn sẽ giải quyết được: mỗi hàm bạn khai báo một biến is_valid. Một hàm được chạy khi và chỉ khi hai biến is_valid của hai hàm kia không được set.(Trong các hàm con phải set lại giá trị của các biến is_valid cho thích hợp).

                      Comment


                      • #12
                        hjc dệ cũng chua hiễu rõ nữa ! anh manhkha chỉ em rõ ti di, cho đệ xin 1 code vd lun ngen

                        Comment


                        • #13
                          void hamcon1(){
                          is_valid1 = 1;
                          if(is_valid2 == 0 && is_valid3 == 0){
                          //Add your code here.
                          dktudong();
                          }
                          is_valid1 = 0;
                          }
                          void hamcon2(){
                          is_valid2 = 1;
                          if(is_valid1 == 0 && is_valid3 == 0){
                          //Add your code here.
                          dktay();
                          }
                          is_valid2 = 0;
                          }
                          void hamcon3(){
                          is_valid3 = 1;
                          if(is_valid1 == 0 && is_valid2 == 0){
                          //Add your code here.
                          dkluanphien() ;
                          }
                          is_valid3 = 0;
                          }
                          /*--------------------------------------------*/
                          void main(){

                          }

                          Hàm test nút nhấn bạn nên gọi trong timer (100ms). Không biết bạn có thêm yêu cầu chống rung hay không ?. Mình nghĩ là cần.
                          Port 0 bạn nên có điện trở kéo 10k. Các port khác không cần.
                          Hi vọng giúp được bạn.

                          Comment


                          • #14
                            Zị là mình chèn 3 hàm dktay,dktudongva dkluanphien trong 3 hàm con hả bạn.Zi là ham main mình chỉ cần gọi:
                            main()
                            {
                            hamcon1();
                            hamcon2();
                            hamcon3();
                            }l


                            Uhm` sao mình không thấy các p1_0 p1_1 P1_2 dể dk dâu ? hjc
                            la xong rui phai kg bạn.ban co nick yahoo kg ? cho minh xin nhé co gi giúp dễ pm hihi
                            Last edited by handoidenbac; 20-04-2010, 12:01.

                            Comment


                            • #15
                              Nguyên văn bởi handoidenbac Xem bài viết
                              anh em cho em hỏi là em có 3 hàm con lần luot là :
                              hamcon1();
                              {...
                              }
                              hamcon2();
                              {..
                              }
                              hamcon3();
                              {..}
                              main()
                              {....
                              }.


                              em muốn gọi hàm con lần lươt theo các switch tác đong là khi ấn P1_0 thì hàm con 1 se dc gọi khi ấn P1_0 thì hàm con 2 se dc goi,va tuong tự cho hàm con 3, mỗi lần goi như thế chỉ dc 1 hàm chạy, muốn chay này khi thì phải trả 2 switch kia về trang thái off ,Moi nguoi giup em vơi , em xài câu truc if...else makhông dc ! hjc thankssssss Cho em hỏi lun là em xài 89c51 sử dung P0 thì phải treo trở lên phải không ? những Port có cầnn treo không?
                              Theo tôi thì tôi sẽ dùng state machine để mô tả:

                              Code:
                              int main()
                              {
                                enum st_type {H1, H2, H3};
                                st_type st = H1;
                                int count = 0;
                              
                                while (true)
                                {
                                  switch (st)
                                  {
                                    case H1 : 
                                        if (p1_0)
                                        {
                                           hamcon1();
                                           st = H2;
                                        }
                                        break;
                                    case H2 : 
                                        if (p1_0)
                                        {
                                           hamcon2();
                                           st = H3;
                                        }
                                        break;
                                    default : 
                                        if (p1_0)
                                        {
                                           hamcon3();
                                           st = H1;
                                        }
                                        break;
                                  }
                                  if (count < 2)
                                     count++;
                                  else
                                     break;
                                }
                              }
                              Chúc một ngày vui vẻ
                              Tony
                              email : dientu_vip@yahoo.com

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X