CCS C cho PIC/dsPIC phiên bản 4.xxx

Collapse
This is a sticky topic.
X
X
 
  • Giờ
  • Show
Clear All
new posts
  • namqn
    Trưởng lão PIC bang
    • Feb 2006
    • 3020

    #136
    Bạn sửa lại code trong vòng while (1) của bạn thành như sau xem:
    Code:
       while (1)
          {
             PORTB = PORTB | 0x0C;	//Bat cac bit RB2 va RB3
             delay_ms(1000);
             PORTB = PORTB & 0xF3;	//Tat cac bit RB2 va RB3
             delay_ms(1000);
          }
    Bạn đọc thêm về hoạt động read-modify-write đã được nói đến nhiều lần trên diễn đàn, chẳng hạn ở đây:
    Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC


    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

    • vdtk3
      Đệ tử 2 túi
      • Jun 2007
      • 29

      #137
      Cảm ơn bác Namqn nhiều em thử được rồi ! Mấy hôm trước em cũng viết vậy nhưng vẫn chạy bình thường, cứ tưởng là máy bị Virut cơ chứ .

      Comment

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

        #138
        Nguyên văn bởi vdtk3 View Post
        Cảm ơn bác Namqn nhiều em thử được rồi ! Mấy hôm trước em cũng viết vậy nhưng vẫn chạy bình thường, cứ tưởng là máy bị Virut cơ chứ .
        Với tốc độ xung clock tương đối thấp, bạn có thể gặp may rằng các hiện tượng liên quan đến hoạt động read-modify-write chưa đủ mạnh để làm cho PIC của bạn chạy không đúng ý đồ.

        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

        • ga_dientu
          Nhập môn đệ tử
          • Dec 2008
          • 7

          #139
          Code:
          #include <16F877A.h>
          #fuses NOWDT,PUT,XT,NOPROTECT
          #use delay(clock=4000000)
          #use fast_io(b)
          #byte portb=0x06
          #define led pin_B0
          int16 count;
          int8 a;
          //Chuong trinh ngat TMR0
          #int_timer0
          void interrupt_timer0()
          {
          set_timer0(6);
          ++count;
          if(count==2000)
             {
          count=0;
          a=a<<1;  // dich trai a 1bit
             }
          if(a==256)
             {
          a=1;
          count=0;
             }
          }
          //Chuong trinh chinh
          main()
          {
          set_tris_b(0);
          enable_interrupts(global);
          enable_interrupts(int_timer0);
          setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
          set_timer0(6);
          count=0;
          a=1;
          while(true)
             {
          portb=a;
             }
          }
          Đây là chương trình dùng ngắt Timer0 định thời 1s của anh NHH,mong a chị giải đáp dùng em làm sao tính được thời gian định thời trong chương trình này
          Last edited by namqn; 14-01-2009, 07:00 AM.

          Comment

          • ga_dientu
            Nhập môn đệ tử
            • Dec 2008
            • 7

            #140
            Việc tính toán thời gian định thời của Timer em đã hiểu, chỉ còn vấn đề tại sao lại set_timer0 (6). Mong sớm nhận được câu trả lời .

            Comment

            • manhha2799
              Đệ tử 5 túi
              • Apr 2007
              • 121

              #141
              set_timer0 (6) là để cho chương trình đếm từ bắt đầu từ số 6 chứ không phải là số 0. Tức là mỗi lần tràn là 256-6=250.
              Last edited by manhha2799; 19-01-2009, 09:28 AM.
              Bảng ledsigns chất lượng cao...
              http://www.ledviet.info - manhha2700@yahoo.com
              Đt:0949299699

              Comment

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

                #142
                Nguyên văn bởi manhha2799 View Post
                set_timer0 (6) là để cho chương trình đếm từ bắt đầu từ số 6 chứ không phải là số 0. Tức là mỗi lần tràn là 256-6=200.
                256 - 6 = 250!

                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

                • ga_dientu
                  Nhập môn đệ tử
                  • Dec 2008
                  • 7

                  #143
                  Một số chương trình hiến thị LCD có viết là LCD = 0xC3 // vị trí hàng 2,cột 4//,em chưa hiểu mấy cách xác định vị trí này.

                  Comment

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

                    #144
                    Nguyên văn bởi ga_dientu View Post
                    Một số chương trình hiến thị LCD có viết là LCD = 0xC3 // vị trí hàng 2,cột 4//,em chưa hiểu mấy cách xác định vị trí này.
                    Bạn tham khảo các tutorial về các module LCD, chẳng hạn như ở đây:


                    Để đặt con trỏ màn hình LCD ở một vị trí nào đó, bạn sẽ dùng lệnh "Set Display Address", có bit 7 mang giá trị '1' (ứng với giá trị 0x80). 7 bit thấp hơn của lệnh sẽ xác định địa chỉ cần di chuyển con trỏ đến. Thông thường, hàng 1 của LCD có địa chỉ bắt đầu là 0x00, hàng 2 của LCD có địa chỉ bắt đầu là 0x40.

                    Do đó, cột 4 của hàng 2 sẽ có địa chỉ là 0x43. Như vậy cần xuất lệnh 0x80 + 0x43 = 0xC3 để di chuyển đến hàng 2, cột 4.

                    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

                    • thaithien
                      Đệ tử 7 túi
                      • Aug 2007
                      • 211

                      #145
                      Em lục nhưng chưa thấy link download CCS.Ai biết chỉ dùm.Cám ơn

                      Comment

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

                        #146
                        Nguyên văn bởi thaithien View Post
                        Em lục nhưng chưa thấy link download CCS.Ai biết chỉ dùm.Cám ơn
                        Bạn tìm nhầm luồng rồi, luồng dưới đây mới là chỗ để tìm link download:
                        Khu vực này chỉ có thành viên diễn đàn mới được vào


                        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

                        • vietanh
                          Đệ tử 1 túi
                          • Dec 2005
                          • 20

                          #147
                          đây này bản bản 4.084 http://rapidshare.com/files/176228329/CCS_4.084.RAR
                          con đây la bùa chú // http://rapidshare.com/files/176409172/Key_pcwhd.exe

                          Comment

                          • notbadday
                            Nhập môn đệ tử
                            • Oct 2007
                            • 5

                            #148
                            Lỗi với khai báo #device *=16 ADC=10

                            Em đang viết chương trình sử dụng ADC 10 bit. Dùng khai báo #device *=16 ADC=10 nhưng bị báo lỗi. Đã thử ở CCS 4.057 và 4.084 nhưng đều báo lỗi (=> ko phải do phần mềm)
                            Đây là code của em nó:
                            Code:
                            #include <16F877A.h>
                            #include <stdlib.h>
                            #device *=16 ADC=10
                            #fuses XT,NOWDT,NOPROTECT,NOLVP
                            
                            void main()
                            {
                            }

                            Comment

                            • vietanh
                              Đệ tử 1 túi
                              • Dec 2005
                              • 20

                              #149
                              kiêm tra lại cai ##include <stdlib.h> cua bạn co trong thư viện không . không co thi xoa dong đó di dich ok

                              nếu không ban phai viết nhu thế nay thi moi đúng không bao sai
                              #include <16F877A.h>
                              #device *=16 ADC=10
                              #fuses XT,NOWDT,NOPROTECT,NOLVP
                              #include <stdlib.h>
                              void main()
                              {
                              }

                              Comment

                              • notbadday
                                Nhập môn đệ tử
                                • Oct 2007
                                • 5

                                #150
                                Cám ơn bạn. Mình đã sửa lại được rồi. Khai báo #device ngay dưới dòng #include <16F877A.h> thì không bị báo lỗi nữa. Có lẽ CCS bắt phải theo thứ tự vậy :-/
                                Code:
                                #include <16F877A.h>
                                #device *=16 ADC=10
                                #include <stdlib.h>
                                #fuses XT,NOWDT,NOPROTECT,NOLVP
                                
                                void main()
                                {
                                }
                                Last edited by notbadday; 08-03-2009, 11:15 PM. Lý do: chèn code

                                Comment

                                Working...