Thông báo

Collapse
No announcement yet.

[Khó hiểu quá] XC8 lỗi hay key lậu ???

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

  • [Khó hiểu quá] XC8 lỗi hay key lậu ???

    Mình debug đoạn chương trình ngắn với XC8 và MPLAPX.
    Code:
    #include <pic16f887.h>
    
    unsigned char x=9;
    
    void main()
    {
        TRISB=0xFE;
        TRISD=0x00;
        while(1)
        {
            PORTB=0xFF;
            x=PORTB;
            PORTD=x;
        }
    }
    Complier không lỗi, không warning.
    Kết quả chạy thử: RB0 = 1; PORTD = 0x00 ????
    Khi thay đoạn :
    Code:
    PORTB=0xFF;
    x=PORTB;
    bằng đoạn
    Code:
    x++;
    thì chạy đúng @@.
    Các bác thử vụ này xem kết quả thế nào chứ ko thế này em chết .

  • #2
    Ko hiểu bác định làm gì nhưng:
    Bác config PORTB là INPUT trừ PORTB.0 (xFE) thì nó chỉ có read đc từ pin thôi vì output driver high impedance (bác check datasheet)
    Thanh ghi PORTB ko ghi đc bằng đoạn code của bác.
    Khi thay = x++ thì x = 9 và cứ ++ nên PORTD ko có lý do gì ko làm việc cả
    => kết luận của mình là XC8 và MPLABx ko có vấn đề gì cả.

    Comment


    • #3
      Nguyên văn bởi htc2k14 Xem bài viết
      Ko hiểu bác định làm gì nhưng:
      Bác config PORTB là INPUT trừ PORTB.0 (xFE) thì nó chỉ có read đc từ pin thôi vì output driver high impedance (bác check datasheet)
      Thanh ghi PORTB ko ghi đc bằng đoạn code của bác.
      Khi thay = x++ thì x = 9 và cứ ++ nên PORTD ko có lý do gì ko làm việc cả
      => kết luận của mình là XC8 và MPLABx ko có vấn đề gì cả.
      Có lẽ bạn chưa hiểu ý mình lắm.
      Mình thắc mắc tại sao khi đọc PORTB lưu vào x thì x lại có giá trị =0 ( kết quả PORTD = x =0)
      Trong khi PORTB.0 = 1, PORTB.1 -> PORTB.7 đang là Input và mình có cấp điện áp 5V vào PORTB.1 ??? Lẽ ra x và PORTD phải >=3 ????

      Comment


      • #4
        Nguyên văn bởi duong_act Xem bài viết
        Có lẽ bạn chưa hiểu ý mình lắm.
        Mình thắc mắc tại sao khi đọc PORTB lưu vào x thì x lại có giá trị =0 ( kết quả PORTD = x =0)
        Trong khi PORTB.0 = 1, PORTB.1 -> PORTB.7 đang là Input và mình có cấp điện áp 5V vào PORTB.1 ??? Lẽ ra x và PORTD phải >=3 ????
        1. PORTB.0 của bạn là output (TRISB = 0xFE)
        2. Mà tại sao ko dùng mấy TRIS khác, sao phải là B khi B liên quan đến LVP (bạn config PORTB có mấy port để program thế này chắc gì nó đã vào programming mode)
        3. Debug từng dòng code rồi xem mấy thanh ghi xem?

        Comment


        • #5
          1. PORTB.0 là output nhưng PORTB.1 > PORTB.7 đang là Input mà bạn ? Không lẽ có 1 pin trên PORT là output thì không đọc được giá trị của thanh ghi PORT ?
          2. "bạn config PORTB có mấy port để program thế này chắc gì nó đã vào programming mode" cái này chưa hiểu ý bạn. Nếu như các PORT khác đã dùng bắt buộc phải dùng PORTB thì ko lẽ ... thay chip ??

          Comment


          • #6
            Nguyên văn bởi duong_act Xem bài viết
            1. PORTB.0 là output nhưng PORTB.1 > PORTB.7 đang là Input mà bạn ? Không lẽ có 1 pin trên PORT là output thì không đọc được giá trị của thanh ghi PORT ?
            2. "bạn config PORTB có mấy port để program thế này chắc gì nó đã vào programming mode" cái này chưa hiểu ý bạn. Nếu như các PORT khác đã dùng bắt buộc phải dùng PORTB thì ko lẽ ... thay chip ??
            2. Theo datasheet
            Three pins of PORTB are multiplexed with the In-Circuit Debugger and Low-Voltage Programming function: RB3/PGM, RB6/PGC and RB7/PGD.
            Mình chưa check kỹ datasheet của cái này nhưng nếu bạn config dính đến mấy PORTB thì mấy pin này sẽ bị config, lúc đó làm sao push software vào đc???
            Bạn program bằng gì?

            Comment


            • #7
              Mình nói mình dùng XC8 + MPLAPX + Pickit2 .
              "Push software" là cái gì hả bạn ??

              Khi nạp chương trình thì trước đó chip bị reset ( dự đoán ) nên các chân PGC, PGD, PGM trở về mặc định rồi.
              Còn LVP trên RB3 thì mình đã để OFF rồi ( mà trong trường hợp là Input thì ON hay OFF có ảnh hưởng gì không nhỉ ?)
              Xin lỗi cả nhà lâu ngày không đụng quên mất cụ ADC

              Comment


              • #8
                Nguyên văn bởi duong_act Xem bài viết
                Mình nói mình dùng XC8 + MPLAPX + Pickit2 .
                "Push software" là cái gì hả bạn ??

                Khi nạp chương trình thì trước đó chip bị reset ( dự đoán ) nên các chân PGC, PGD, PGM trở về mặc định rồi.
                Còn LVP trên RB3 thì mình đã để OFF rồi ( mà trong trường hợp là Input thì ON hay OFF có ảnh hưởng gì không nhỉ ?)
                Xin lỗi cả nhà lâu ngày không đụng quên mất cụ ADC
                PICKIT2 à? Vậy chắc ko line debug được.
                À mà lúc config input có config Digital input ko?

                Comment


                • #9
                  Debug dành cho project lớn bạn nhé. Mấy cái IO thì không cần đâu.
                  Config bit của XC8 cho 16F887 không có Digital Input. Mình phải tự tắt Analog Input.

                  Comment


                  • #10
                    Cổng B còn có chức năng analog input. Chân cổng là analog input hay digital input quyết định bởi thanh ghi ANSELH. Khi chip mới khởi động, ANSELH = xx111111 nên tất cả chân cổng PB0-PB5 đều là analog input, giá trị khi đọc về đều là 0. Muốn chân cổng là digital input, người lập trình cần tắt cái bit tương ứng về 0.

                    Tất cả chi tiết trên đều được ghi rõ ở trang 28 và 30 của datasheet phiên bản G. IC chạy đúng, XC8 không sai, key cũng không liên quan gì; chỉ do người lập trình quên một ít tiểu tiết.
                    Phần mềm tự do hoặc không dùng máy tính nữa !.

                    Comment


                    • #11
                      Nguyên văn bởi bqviet Xem bài viết
                      Cổng B còn có chức năng analog input. Chân cổng là analog input hay digital input quyết định bởi thanh ghi ANSELH. Khi chip mới khởi động, ANSELH = xx111111 nên tất cả chân cổng PB0-PB5 đều là analog input, giá trị khi đọc về đều là 0. Muốn chân cổng là digital input, người lập trình cần tắt cái bit tương ứng về 0.

                      Tất cả chi tiết trên đều được ghi rõ ở trang 28 và 30 của datasheet phiên bản G. IC chạy đúng, XC8 không sai, key cũng không liên quan gì; chỉ do người lập trình quên một ít tiểu tiết.
                      Tại em lâu không đụng, ngồi một lúc mới nhớ ra ANSEL,ANSELH @@.
                      Làm món này lâu lâu không đụng y rằng quên ngay

                      Comment


                      • #12
                        Nguyên văn bởi duong_act Xem bài viết
                        Debug dành cho project lớn bạn nhé. Mấy cái IO thì không cần đâu.
                        Config bit của XC8 cho 16F887 không có Digital Input. Mình phải tự tắt Analog Input.
                        config = software zzz. Đã đc chưa? còn bị lỗi nữa ko?

                        Nguyên văn bởi bqviet Xem bài viết
                        Cổng B còn có chức năng analog input. Chân cổng là analog input hay digital input quyết định bởi thanh ghi ANSELH. Khi chip mới khởi động, ANSELH = xx111111 nên tất cả chân cổng PB0-PB5 đều là analog input, giá trị khi đọc về đều là 0. Muốn chân cổng là digital input, người lập trình cần tắt cái bit tương ứng về 0.

                        Tất cả chi tiết trên đều được ghi rõ ở trang 28 và 30 của datasheet phiên bản G. IC chạy đúng, XC8 không sai, key cũng không liên quan gì; chỉ do người lập trình quên một ít tiểu tiết.
                        ý mình là thế này đây.

                        Comment


                        • #13
                          Nguyên văn bởi htc2k14 Xem bài viết
                          config = software zzz. Đã đc chưa? còn bị lỗi nữa ko?



                          ý mình là thế này đây.
                          Mình đã thêm :
                          Code:
                          ANSEL=0x00;
                          ANSELH=0x00;
                          Kết quả đã chạy đúng

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X