Hỏi về việc khai báo #use fast_io(port)???

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • dvtrieu89
    Đệ tử 1 túi
    • Mar 2008
    • 25

    #1

    Hỏi về việc khai báo #use fast_io(port)???

    Các bác cho em hỏi về cách sử dụng các khai báo #use fast_io(port). Khi nào mình dùng? Không dùng thì chương trình có bị ảnh hưởng gì không? Cảm ơn các bác nhiều lém lém...
  • phandinh
    Đệ tử 6 túi
    • Nov 2008
    • 131

    #2
    đây là bài nhấp nháy 8 led port B theo 2 cách để bạn tham khảo & so sánh

    Code:
    ///////////////////////// dùng #use fast_io////////////////////////////
    #include <16f877a.h>
    #fuses nowdt,hs,noprotect
    #use delay(clock = 4000000)
    #use fast_io(b) // 
    #byte portb=0x06 // phải khai báo địa chỉ port B nếu dùng fast_io(b)
    void main()
    {
      set_tris_b(0);
     while(1)
    {  
      portb = 0xff ;
       delay_ms(500);
       portb = 0;
       delay_ms(500);
      } 
    }
    Code:
    ////////////////////// không dùng #use fast_io////////////////////////////
    #include <16f877a.h>
    #fuses nowdt,hs,noprotect
    #use delay(clock = 4000000)
    void main()
    { while(1) /// vòng lặp luôn xảy ra
        {
             output_high(pin_b0);
             output_high(pin_b1);
              output_high(pin_b2);
              output_high(pin_b3);
              output_high(pin_b4);
             output_high(pin_b5);
              output_high(pin_b6);
            output_high(pin_b7);
        delay_ms(500);
              output_low(pin_b0);
             output_low(pin_b1);
             output_low(pin_b2);
              output_low(pin_b3);
             output_low(pin_b4);
              output_low(pin_b5);
              output_low(pin_b6);
             output_low(pin_b7);
        delay_ms(500);
        }
    }
    Last edited by namqn; 02-04-2009, 09:55 PM.

    Comment

    • dvtrieu89
      Đệ tử 1 túi
      • Mar 2008
      • 25

      #3
      khi minh khai báo #include <def_877a.h> thì nó đã định nghĩa #byte portb=0x06 rồi phải không các bác, vậy có cần khai báo thêm không. Cụ thể đoạn khai báo của em dưới đây, các bác xem dùm nha.

      #include <16f877A.h>
      #include <def_877a.h>
      #fuses NOWDT,HS,PUT,NOPROTECT,NOLVP,NODEBUG
      #use delay(clock=16000000)
      #use fast_io(b)
      void khoitao()
      {
      set_tris_d(0x00);
      set_tris_c(0x00);
      set_tris_e(0xff);
      set_tris_b(0xff);
      }
      ......
      if((rb1==1)&&(rb2==1)&&(rb3==1)&&(rb4==1))
      .....
      cảm ơn bác nha

      Comment

      • nguyennam8888
        Đệ tử 3 túi
        • Dec 2008
        • 50

        #4
        Nguyên văn bởi dvtrieu89 View Post
        khi minh khai báo #include <def_877a.h> thì nó đã định nghĩa #byte portb=0x06 rồi phải không các bác, vậy có cần khai báo thêm không. Cụ thể đoạn khai báo của em dưới đây, các bác xem dùm nha.

        #include <16f877A.h>
        #include <def_877a.h>
        #fuses NOWDT,HS,PUT,NOPROTECT,NOLVP,NODEBUG
        #use delay(clock=16000000)
        #use fast_io(b)
        void khoitao()
        {
        set_tris_d(0x00);
        set_tris_c(0x00);
        set_tris_e(0xff);
        set_tris_b(0xff);
        }
        ......
        if((rb1==1)&&(rb2==1)&&(rb3==1)&&(rb4==1))
        .....
        cảm ơn bác nha
        không cần phải khai báo lại đâu bạn

        Comment

        • dvtrieu89
          Đệ tử 1 túi
          • Mar 2008
          • 25

          #5
          các bác cho em hoi thêm khi mình khai báo #use fast_io(b) thì mình sử dụng các lệnh ví dụ như:
          output_low(pin_b0);
          output_low(pin_b1);
          output_low(pin_b2);
          output_low(pin_b3);
          output_low(pin_b4);
          output_low(pin_b5);
          output_low(pin_b6);
          output_low(pin_b7);

          Có vấn đề gì không?
          Thankssssssssss

          Comment

          • nguyennam8888
            Đệ tử 3 túi
            • Dec 2008
            • 50

            #6
            Nguyên văn bởi dvtrieu89 View Post
            các bác cho em hoi thêm khi mình khai báo #use fast_io(b) thì mình sử dụng các lệnh ví dụ như:
            output_low(pin_b0);
            output_low(pin_b1);
            output_low(pin_b2);
            output_low(pin_b3);
            output_low(pin_b4);
            output_low(pin_b5);
            output_low(pin_b6);
            output_low(pin_b7);

            Có vấn đề gì không?
            Thankssssssssss
            khi khai báo như vậy thì trong chương trình khi dùng các lệnh io như output_low(), output_high() , thì no chỉ mất 1 lệnh ma thôi

            Comment

            • dvtrieu89
              Đệ tử 1 túi
              • Mar 2008
              • 25

              #7
              Em không khai báo #use fast_io(b) thì chương trình không có lỗi, có phải là chắc chắn nó cahj sai không các bác?

              Comment

              • nguyennam8888
                Đệ tử 3 túi
                • Dec 2008
                • 50

                #8
                Nguyên văn bởi dvtrieu89 View Post
                Em không khai báo #use fast_io(b) thì chương trình không có lỗi, có phải là chắc chắn nó cahj sai không các bác?
                trong main() ban phải dùng hàm set_tris_X() để chỉ chân vào ra thì khai báo #ues fast_io() mới có hiệu lực, không thì chương trình sẽ chạy sai

                Comment

                • dvtrieu89
                  Đệ tử 1 túi
                  • Mar 2008
                  • 25

                  #9
                  Vậy để đảm bảo chương trình không sai thì ta nên khai báo #ues fast_io() cho tất cả các port phải không bác.
                  Em mới chuyển qua C nên còn gà lắm. Cảm ơn bác đã tận tình chỉ dẫn.

                  Comment

                  • cskiller
                    Đệ tử 4 túi
                    • Aug 2008
                    • 89

                    #10
                    S ử dụng #use fast_io() sẽ báo cho CCS biết việc thực hiện lệnh SET_TRIS_X() một lần trước khi sử dụng tới IO, điều này sẽ làm cho việc Read/Write các IO nhanh hơn so với việc không khai báo(mặc định CCS sẽ thực hiện gán lại TRIS của IO trước khi Read/Write).
                    Vậy nên nếu ứng dụng của bạn chắc chắn dùng port 1 IO vào 1 chức năng nào đó làm Input hoặc Output thôi thì khai báo #use_fast_io() sẽ rất hiệu quả.
                    Quang báo RG/RGB 6/8/12/16 bits màu
                    Phone No: 0905.034.086
                    Email: lmquyen@gmail.com

                    Comment

                    • dvtrieu89
                      Đệ tử 1 túi
                      • Mar 2008
                      • 25

                      #11
                      Mình đã hiểu rồi cảm ơn các bạn nhiều nha. Khi nào có gì thắc mắc lại nhờ các bạn tiếp nhé! Hihi

                      Comment

                      • hcmut.khoamaisi
                        Đệ tử 4 túi
                        • Dec 2009
                        • 79

                        #12
                        Mình không khai báo được dòng #include <def_877a.h> .CCS cứ báo lỗi là không tìm thấy file trên trong mục device.Bạn nào có kinh nghiệm rồi xin chỉ giáo giùm.Cám ơn nhiều lắm
                        My blog: http://autumnneverreturn.blogspot.com/
                        Đối thủ khó chiến thắng nhất là bản thân !!!

                        Comment

                        • vinh2809
                          Đệ tử 1 túi
                          • Mar 2009
                          • 13

                          #13
                          Nguyên văn bởi hcmut.khoamaisi View Post
                          Mình không khai báo được dòng #include <def_877a.h> .CCS cứ báo lỗi là không tìm thấy file trên trong mục device.Bạn nào có kinh nghiệm rồi xin chỉ giáo giùm.Cám ơn nhiều lắm
                          Ui y hệt em, bỏ đi chương trình vẫn chạy tốt ko sao cả. Em cũng chẳng hiểu tại sao, ai biết chỉ giùm

                          Comment

                          • love_ac
                            Đệ tử 4 túi
                            • Apr 2008
                            • 78

                            #14
                            Lâu không dùng CCS nên ko nhớ rõ lắm. Hình như file Def_877a.h là do mình định nghĩa hay qui ước một số thứ ở trong đó. Thế thì bạn để file này ở chỗ nào...

                            Comment

                            • caovanhuong
                              Đệ tử 2 túi
                              • Jul 2009
                              • 40

                              #15
                              Nguyên văn bởi vinh2809 View Post
                              Ui y hệt em, bỏ đi chương trình vẫn chạy tốt ko sao cả. Em cũng chẳng hiểu tại sao, ai biết chỉ giùm
                              bạn phải có cái file này và bỏ chung vào một thư mục mà bạn lưu dự án thì mới được.
                              Cao Văn Hưởng
                              SĐT: 01672754113
                              Email: caovanhuong@webdien.com
                              Nhận thiết kế mạch điện tử, PCB (Orcad)

                              Comment

                              Working...