Thông báo

Collapse
No announcement yet.

Hi-Tech PIC và CCS C

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

  • Nguyên văn bởi kiemkhach10 Xem bài viết
    các bác xem dùm cái này hơi kỳ lạ
    với lệnh cơ bản này:
    Code:
    //------------------------// cai nay thi chạy tot.
    char i;//ko khoi tao gia tri dau cho i
    void main()
    {
       while(1)
       {
          if( ++i  >10)
            i=0;
        }
    }
    //-----------------------------
    //------------------------// cai nay thi ko chạy
    char i=0;// khoi tao gia tri ban dau cho i=0;
    void main()
    {
       while(1)
       {
          if( ++i  >10)
            i=0;
        }
    }
    //-----------------------------
    các bác xem cho ý kiến với với vì sao KHỞI TẠO GIÁ TRỊ ĐẦU LẠI KO CHẠY CÒN BỎ MẶC LẠI CHẠY NHIỆT TÌNH NHỈ ?

    p/s: cả vấn đề cộng dồn nữa cũng ko ổn lắm.
    int x1,x2;
    x1+=x2;
    //cộng đủ 50 lần rùi hiển thị x1;
    chẳng hiểu sao nó cứ hiện lung tung . với htech hay c18 thì hiển thị bình thường còn Mikroc lại hiển thị lung tung
    DisAssembly là ra hết mọi chuyện. Hi vọng là bạn biết ASM

    Comment


    • Các biểu thức nhất là những biểu thức phức tạp (cần yêu cầu ưu tiên phép toán) mình thấy các trình dịch khác nhau biên dịch một cách khác nhau đó, đôi khi nó không hiểu đúng ý mình đâu. bạn xem lại những biểu thức sau ++i >10, x1+=x2; bạn cứ viết rõ ràng ra nhé.

      Comment


      • mình mù tịt asembly
        Nguyên văn bởi duong_act Xem bài viết
        DisAssembly là ra hết mọi chuyện. Hi vọng là bạn biết ASM

        Comment


        • theo kinh nghiệm lập trình của tôi thì cứ viết bình thường, rành mạch ra ... chương trình sáng sủa , chạy đâu hiểu đấy , dễ tối ưu khi cần... dễ sửa .
          Chứ cái kiểu chưa leo qua gốc đã muốn nhảy lên ngọn ... thì có lúc vỡ đầu mà chết !

          Học theo kiểu sinh viên hiện nay ... đã dốt lại hay thích chơi chữ ... thì khó mà nên hồn ... rồi cuối cùng chẳng hiểu cái mô tê gì !
          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

          Comment


          • Nguyên văn bởi kiemkhach10 Xem bài viết
            mình mù tịt asembly
            Thế thì đành có cách viết cho rõ ràng rành mạch ra.

            Code:
            char i=0;
            void main()
               while(1)
               {
                   i++;
                   if(i>10) i=0;
               }
            Cũng chả dài hơn tí nào. Đơn giản, dễ hiểu, dễ kiểm tra và cũng cần nên biết 1 ít ASM mới là hoàn chỉnh.

            Comment


            • thì mình cũng viết lại như vậy cũng ko được. chắc có gì đó chưa ổn để hum nay mình tim nốt vậy.chắc mình bị mắc ở chỗ nào viết chưa rõ thui
              Nguyên văn bởi duong_act Xem bài viết
              Thế thì đành có cách viết cho rõ ràng rành mạch ra.

              Code:
              char i=0;
              void main()
                 while(1)
                 {
                     i++;
                     if(i>10) i=0;
                 }
              Cũng chả dài hơn tí nào. Đơn giản, dễ hiểu, dễ kiểm tra và cũng cần nên biết 1 ít ASM mới là hoàn chỉnh.

              Comment


              • hi! mọi người.
                **Mục tiêu
                +Em ngồi biên dịch thử 1 đoạn code nhỏ viết cho pic. bằng mikroc và mplab x xc8 để kiểm tra mấy thứ
                **Vấn đề mắc phải
                +ở mikroc khi dịch đến đoạn code có lỗi thì nó sẽ báo trực tiếp lên chương trình của mình nhìn cái là biết luôn và sửa lun.
                +nhưng ở mplab xc8 thì em chỉ thấy nó ghi ở phần OUTPUT với thông báo là có lỗi thui chứ nó ko hiện lên trên main mặc dù em đã kích vào lỗi đó.
                **Phương pháp giải quyết
                +Bác có cách làm cho nó hiện lỗi lên phần main như các trình dịch khác thì chỉ em với

                Thank mọi người!

                Comment


                • Thông báo lỗi của MPLABX luôn đi kèm số # dòng nơi trình dịch báo lỗi. Đồng thời kích chuột vào cái thông báo đó thì con trỏ sẽ nhảy tới chỗ mã nguồn có lỗi luôn. Tiện dụng đến thế rồi còn gì nữa

                  Phần mềm tự do hoặc không dùng máy tính nữa !.

                  Comment


                  • Nguyên văn bởi bqviet Xem bài viết
                    Thông báo lỗi của MPLABX luôn đi kèm số # dòng nơi trình dịch báo lỗi. Đồng thời kích chuột vào cái thông báo đó thì con trỏ sẽ nhảy tới chỗ mã nguồn có lỗi luôn. Tiện dụng đến thế rồi còn gì nữa
                    sao của bác nó hiện các lỗi rõ ràng thế nhỉ? mà của em thì ko hiện lỗi mà chỉ hiện thông báo như này thui.
                    hay em có nghí ngoáy bỏ tích mục hiện lỗi ko nhỉ?
                    Click image for larger version

Name:	qwe.jpg
Views:	1
Size:	78.2 KB
ID:	1390908

                    Comment


                    • Có thể bạn đặt cấu hình cho MPLABX bỏ tính năng này. Rõ ràng không phải lỗi phần mềm vì bạn dùng bản MPLABX mới hơn cá bqv đang dùng. Cũng có thể bản MPLABX cho Linux có tính năng khác so với bản cho Windows chăng ? khả năng này rất thấp.
                      Phần mềm tự do hoặc không dùng máy tính nữa !.

                      Comment


                      • Nguyên văn bởi bqviet Xem bài viết
                        Có thể bạn đặt cấu hình cho MPLABX bỏ tính năng này. Rõ ràng không phải lỗi phần mềm vì bạn dùng bản MPLABX mới hơn cá bqv đang dùng. Cũng có thể bản MPLABX cho Linux có tính năng khác so với bản cho Windows chăng ? khả năng này rất thấp.
                        +mình gỡ hết ra và cài lại từ đầu thì ok luôn

                        cơ chế ngắt ưu tiên của pic 18f trong mplab xc mình muốn hỏi chút:
                        mình muốn sử dụng 2 mức ngắt. trong đó ưu tiên mức cao trước thì phải khai báo như nào?
                        để nếu đang xử lý ngắt ở mức thấp mà có ngắt ở mức cao thì nó sẽ nhảy vào mức cao thực hiện xong quay lại mức thấp thực hiện tiếp công việc giang dở.
                        Code:
                        void interrupt CAO (void)
                        {
                         //xử lý mức cao
                        }
                        void interrupt THAP (void)
                        {
                        //xử lý mức thấp
                        }
                        thank!

                        Comment


                        • Trích từ hướng dẫn sử dụng của XC8, mục 5.9.5

                          Khai báo hàm ngắt ưu tiên thấp
                          Code:
                          void interrupt low_priority foo(void) {
                            if (TMR1IE && TMR1IF) {
                              TMR1IF=0;
                              tick_count = 0;
                              return;
                            }
                            // process any other low priority sources here
                          }
                          Khai báo hàm ngắt ưu tiên cao còn đơn giản hơn
                          Code:
                          void interrupt bar(void) {
                          
                          }
                          Trước đây C18 phải khai báo thêm một ít mã ASM ở đúng địa chỉ vector ngắt rồi nhảy tới hàm ngắt thực, dùng XC8 thì không cần những thứ rườm rà đó nữa. Hầm ngắt giờ rất gọn gàng.
                          Phần mềm tự do hoặc không dùng máy tính nữa !.

                          Comment


                          • ở hàm ngắt ưu tiên thấp
                            Code:
                            void interrupt low_priority foo(void) {
                              if (TMR1IE && TMR1IF) {
                                TMR1IF=0;
                                tick_count = 0;
                                return;
                              }
                              // process any other low priority sources here
                            }
                            ở phần hướng dẫn có lúc có lệnh return có lúc lại ko có lệnh return.
                            vậy khi nào sử dụng lệnh đó?
                            thank

                            Comment


                            • Đây không hiểu là lỗi của nhà sản xuất hay lỗi của trình dịch ( bác nào gặp trường hợp như này chưa ?)
                              + ở data sheet (pic18f45k22 và pic18f46k22 thì định nghĩa các chức năng ở pin số 7 tức là chân RA5 như sau)
                              ***RA5/C2OUT/SRNQ/SS1/HLVDIN/AN4
                              có rất nhiều tính năng trong đó có tính năng input analog (AN4)
                              +vậy mà ở file header (pic18f45k22.h và pic18f46k22.h ) lại định nghĩa thiếu tính năng AN4.
                              Code:
                              #ifndef __18F46K22_H
                              #define __18F46K22_H
                              
                              extern volatile far  unsigned char       ANSELA;
                              extern volatile far  struct {
                                unsigned ANSA0:1;
                                unsigned ANSA1:1;
                                unsigned ANSA2:1;
                                unsigned ANSA3:1;
                                unsigned :1;
                                unsigned ANSA5:1;
                              } ANSELAbits;
                              ko hề có định nghĩa cho AN4. vậy lỗi do trình dịch hay lỗi do datasheet hả các bác.
                              lúc thiết kế cứ nhìn datasheet mà vẽ thui giờ chẳng biết làm sao nữa

                              Comment


                              • Nguyên văn bởi octo Xem bài viết
                                Đây không hiểu là lỗi của nhà sản xuất hay lỗi của trình dịch ( bác nào gặp trường hợp như này chưa ?)
                                + ở data sheet (pic18f45k22 và pic18f46k22 thì định nghĩa các chức năng ở pin số 7 tức là chân RA5 như sau)
                                ***RA5/C2OUT/SRNQ/SS1/HLVDIN/AN4
                                có rất nhiều tính năng trong đó có tính năng input analog (AN4)
                                +vậy mà ở file header (pic18f45k22.h và pic18f46k22.h ) lại định nghĩa thiếu tính năng AN4.
                                Code:
                                #ifndef __18F46K22_H
                                #define __18F46K22_H
                                
                                extern volatile far  unsigned char       ANSELA;
                                extern volatile far  struct {
                                  unsigned ANSA0:1;
                                  unsigned ANSA1:1;
                                  unsigned ANSA2:1;
                                  unsigned ANSA3:1;
                                  unsigned :1;
                                  unsigned ANSA5:1;
                                } ANSELAbits;
                                ko hề có định nghĩa cho AN4. vậy lỗi do trình dịch hay lỗi do datasheet hả các bác.
                                lúc thiết kế cứ nhìn datasheet mà vẽ thui giờ chẳng biết làm sao nữa
                                xin chia buồn là AN4 không có chức năng analog ( ADC ) đâu.
                                Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X