hàm trong C

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • handoidenbac
    Thành viên mới
    • Apr 2010
    • 14

    #1

    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?
  • hoang_hai
    Thành viên tích cực
    • Feb 2009
    • 108

    #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

    • handoidenbac
      Thành viên mới
      • Apr 2010
      • 14

      #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

      • nbb3i
        Thành viên tích cực
        • Dec 2007
        • 540

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

        Comment

        • handoidenbac
          Thành viên mới
          • Apr 2010
          • 14

          #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

          • handoidenbac
            Thành viên mới
            • Apr 2010
            • 14

            #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

            • gltd
              Thành viên chính thức
              • Apr 2008
              • 32

              #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

              • handoidenbac
                Thành viên mới
                • Apr 2010
                • 14

                #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

                • hunterX
                  Thành viên mới
                  • Jan 2010
                  • 11

                  #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

                  • handoidenbac
                    Thành viên mới
                    • Apr 2010
                    • 14

                    #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

                    • manhkha
                      Thành viên chính thức
                      • May 2009
                      • 42

                      #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

                      • handoidenbac
                        Thành viên mới
                        • Apr 2010
                        • 14

                        #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

                        • manhkha
                          Thành viên chính thức
                          • May 2009
                          • 42

                          #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

                          • handoidenbac
                            Thành viên mới
                            • Apr 2010
                            • 14

                            #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, 11:01.

                            Comment

                            • tonyvandinh
                              Moderator
                              • Jun 2009
                              • 327

                              #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...