Pic16f877a TỪ DỄ TỚi KhÓ

Collapse
This topic is closed.
X
This is a sticky topic.
X
X
 
  • Giờ
  • Show
Clear All
new posts
  • tung_bk02
    Nhập môn đệ tử
    • Oct 2008
    • 4

    #331
    cho em hỏi vấn đề dùng 16f877A để giao tiếp pc qua ethernet, từ đó có thể nối ứng dụng điều khiển đo, hiển thị nhiệt độ, điều khiển tốc độ động cơ...

    Comment

    • vtuan274
      Nhập môn đệ tử
      • Feb 2009
      • 1

      #332
      anh nào có thể cho tư liệu về hình ảnh encoder va nguyên lí hoạt động của nó vớ

      Comment

      • thienthan611
        Nhập môn đệ tử
        • Feb 2009
        • 1

        #333
        anh ơi anh có thể giúp em thiết kế mạch sử dụng pic 16f877a (tính năng là dùng đề chạy chữ)giúp em lam zoi nha anh ntc,hoac ai làm được chỉ mình với nha.thanks nhiu

        Comment

        • electronic
          Nhập môn đệ tử
          • Apr 2008
          • 9

          #334
          Mình mới bắt đầu học Pic. Cũng đọc qua một số tài liệu. Viết xuất I/O cho 1 Led bằng cách khác thì chạy, còn cách này thì không. Mong các anh em chỉ giáo. Biết sai để hiểu hơn. Cảm ơn anh em.

          Code:
          #include <16F877A.h>
          #use delay (clock=20000000)
          #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
          int1 x;
          void main()
          {  while(1)
             {output_bit(pin_B1,!x);
              delay_ms(250);
             }
          }
          Last edited by namqn; 28-02-2009, 01:28 AM. Lý do: định dạng code

          Comment

          • namqn
            Trưởng lão PIC bang
            • Feb 2006
            • 3020

            #335
            Nguyên văn bởi electronic View Post
            Mình mới bắt đầu học Pic. Cũng đọc qua một số tài liệu. Viết xuất I/O cho 1 Led bằng cách khác thì chạy, còn cách này thì không. Mong các anh em chỉ giáo. Biết sai để hiểu hơn. Cảm ơn anh em.

            Code:
            #include <16F877A.h>
            #use delay (clock=20000000)
            #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
            int1 x;
            void main()
            {  while(1)
               {output_bit(pin_B1,!x);
                delay_ms(250);
               }
            }
            Theo tài liệu hướng dẫn của CCS C, cú pháp của hàm output_bit() như sau: output_bit(pin, value). Tham số pin có thể là biến, nhưng tham số value là hằng số (0 hay 1). Bạn đã dùng một biểu thức có chứa biến cho tham số thứ hai của hàm trong đoạn code của bạn.

            Nếu bạn muốn lật trạng thái của chân B1, bạn có thể dùng hàm output_toggle() đã được CCS C cung cấp.

            Thân,
            Biển học mênh mông, sức người có hạn.

            Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
            http://www.picvietnam.com/forum/showthread.php?t=1263

            Comment

            • electronic
              Nhập môn đệ tử
              • Apr 2008
              • 9

              #336
              Cảm ơn anh namqn nhé. Anh cho em hỏi. Em muốn xoay bit ở 8 led đơn. Code em viết như sau:

              #include <16F877A.h>
              #fuses HS,NOLVP,NOWDT,PUT
              #use delay(clock=4000000)
              void main()
              { int16 i,count;

              while(1)
              {
              count=1;
              for (i=0;i<=8;i++)
              {
              output_A(count);
              delay_ms(100);
              count=count>>1;
              }
              }

              }
              Không hiểu sao chỉ chạy 6 led. Mong anh em chỉ dùm. Có cách nào để lưu 1 giá trị vào 1 thanh ghi rồi cho xoay k anh? Chẳng hạn lưu: b10000000 vào rồi cho rotate sang phải để dịch?

              Comment

              • electronic
                Nhập môn đệ tử
                • Apr 2008
                • 9

                #337
                Ah. Mình hiểu rồi. Port A chi có I/O từ RA0-RA5 thôi. Cám ơn anh em.

                Comment

                • phandinh
                  Đệ tử 6 túi
                  • Nov 2008
                  • 131

                  #338
                  bác namqn chỉ cho em cách dùng timer được không?
                  .khởi tạo
                  .thiết lập giá trị ban đầu.

                  Comment

                  • electronic
                    Nhập môn đệ tử
                    • Apr 2008
                    • 9

                    #339
                    Các anh trong dien đàn chỉ em phần này với. Em lập code cho chương trình led sáng dồn, nếu dùng xuất ra portB 0x01,0x02... thì dài quá nên em viết theo 1 kiểu khác. Không hiểu sai chỗ nào mà lại chạy sai, nhờ mấy anh chỉ giúp.

                    Code:
                    #include <16F877A.h>
                    #fuses HS,NOWDT,NOPUT,NOPROTECT, NOWRT
                    #use delay(clock=20000000)
                    
                    void main()
                    { byte i,led;
                      led=0x00;
                      while(1)
                       { for(i=0; i<=8; i++)
                             { led=led+2^i;
                               output_B(led);
                               delay_ms(200);
                             }  
                       }
                    }
                    Xin cảm ơn.
                    Last edited by namqn; 01-03-2009, 12:33 AM.

                    Comment

                    • namqn
                      Trưởng lão PIC bang
                      • Feb 2006
                      • 3020

                      #340
                      Nguyên văn bởi phandinh View Post
                      bác namqn chỉ cho em cách dùng timer được không?
                      .khởi tạo
                      .thiết lập giá trị ban đầu.
                      PIC16F877A có nhiều loại timer, tôi chỉ lấy ví dụ về Timer 1 ở đây. Giả sử tần số xung clock là 4 MHz, có nghĩa là mỗi chu kỳ máy (bao gồm 4 chu kỳ xung clock) sẽ kéo dài 1 us. Lại giả sử cần định thời 100 ms.

                      Nếu chọn xung clock thực thi lệnh là nguồn xung clock cho Timer 1, thì chúng ta cần đếm đủ 100000 chu kỳ máy (= 100000 us) để định khoảng thời gian 100 ms. Vì bộ đếm của Timer 1 chỉ có độ dài 16-bit, giá trị lớn nhất mà Timer 1 có thể đếm được mà không bị tràn là 65535. Do đó, chúng ta cần giảm tần số xung đi vào Timer 1 để có thể đạt được mục đích. Điều này có thể thực hiện bằng cách sử dụng bộ chia (tần) trước (prescaler). Bộ chia trước của Timer 1 trong PIC16F877A có thể chia 1, 2, 4, hay 8 tần số clock trước khi đưa vào Timer 1. Ở ví dụ này, tôi chọn hệ số chia là 8. Như vậy, số đếm mà Timer 1 sẽ đếm được ứng với 100 ms sẽ là 100000/8 = 12500. Vì Timer 1 chỉ tràn từ 0xFFFF về 0x0000, cần thiết lập trước giá trị của các thanh ghi TMR1H và TMR1L để sẽ tràn trong 12500 lần đếm, tức là giá trị TMR1 = 65536 - 12500 = 53026 = 0xCF2C. Xem thêm hình 6-2 trong datasheet của PIC16F877A để hiểu rõ hơn phần trình bày trên.

                      Code để thiết lập Timer 1 như sau:
                      Code:
                        T1CON = 0x30;		// Prescale = 1:8, dung clock thuc thi lenh
                        TMR1H = 0xCF		// TMR1 = 0xCF2C
                        TMR1L = 0x2C
                        T1CON = T1CON | 0x01;	// Bat Timer 1
                      Trong chương trình chính, người dùng có thể xét trạng thái của bit TMR1IF (bit 0 của thanh ghi PIR1) để kiểm tra xem đã hết thời gian cần chờ hay chưa. Người dùng cần xóa bit TMR1IF này sau khi đã sử dụng xong để dùng cho lần định thời tiếp theo.

                      Một nhắc nhở nhỏ: Bạn nên tránh nêu đích danh người được hỏi, và chú ý là những câu hỏi loại này không phải chỉ có một vài người có thể trả lời.

                      Thân,
                      Last edited by namqn; 01-03-2009, 09:43 PM. Lý do: tính nhầm
                      Biển học mênh mông, sức người có hạn.

                      Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
                      http://www.picvietnam.com/forum/showthread.php?t=1263

                      Comment

                      • namqn
                        Trưởng lão PIC bang
                        • Feb 2006
                        • 3020

                        #341
                        Nguyên văn bởi electronic View Post
                        Các anh trong dien đàn chỉ em phần này với. Em lập code cho chương trình led sáng dồn, nếu dùng xuất ra portB 0x01,0x02... thì dài quá nên em viết theo 1 kiểu khác. Không hiểu sai chỗ nào mà lại chạy sai, nhờ mấy anh chỉ giúp.

                        Code:
                        #include <16F877A.h>
                        #fuses HS,NOWDT,NOPUT,NOPROTECT, NOWRT
                        #use delay(clock=20000000)
                        
                        void main()
                        { byte i,led;
                          led=0x00;
                          while(1)
                           { for(i=0; i<=8; i++)
                                 { led=led+2^i;
                                   output_B(led);
                                   delay_ms(200);
                                 }  
                           }
                        }
                        Xin cảm ơn.
                        Bạn thử lại với code sau xem:
                        Code:
                        #include <16F877A.h>
                        #fuses HS,NOWDT,NOPUT,NOPROTECT, NOWRT
                        #use delay(clock=20000000)
                        
                        void main()
                        { byte i,led;
                          led=0x00;
                          while(1)
                           { for(i=0; i<=8; i++)
                                 { led = (led << 1) + 1;
                                   output_B(led);
                                   delay_ms(200);
                                 }  
                           }
                        }
                        Thân,
                        Biển học mênh mông, sức người có hạn.

                        Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
                        http://www.picvietnam.com/forum/showthread.php?t=1263

                        Comment

                        • 135246357
                          Nhập môn đệ tử
                          • Feb 2009
                          • 2

                          #342
                          chào các bác em mới bắt đầu học về vi điều khiển pic nên rất mong bác ntc sớm post bài lên kèm thêm giải thích câu lệnh thì hay quá

                          Comment

                          • 135246357
                            Nhập môn đệ tử
                            • Feb 2009
                            • 2

                            #343
                            ở đây có bác nào biết viết lập trình cho pic bằng ngôn ngữ ccs không?bảo em với có ví dụ minh họa thì tốt quá

                            Comment

                            • lexuantien
                              Đệ tử 2 túi
                              • Feb 2009
                              • 37

                              #344
                              Bạn vào luồng này :
                              http://www.picvietnam.com/forum/show...=2113#post2113.
                              Link download trình biên dịch CCS C ở đây: http://www.tailieuvietnam.net/downlo...CCSC_3.249.rar
                              Hiện nay đã có phiên bản mới hơn 4.0 rùi đó.
                              mình cũng mới học về nó thôi , chủ yếu là học trong phần Help của nó đó , có ví dụ rõ ràng lắm.
                              the stair

                              Comment

                              • dhbk3i
                                Nhập môn đệ tử
                                • May 2008
                                • 7

                                #345
                                chào các bạn, mình đang làm đề tài về đo khoảng cách 5-10m kết hợp với vi xử lý, mình đang băn khoăn không biết trọn con cảm biến nào cho phù hợp, mong được sự góp ý từ các bạn, mình xin cảm ơn trước

                                Comment

                                Working...