Thông báo

Collapse
No announcement yet.

1 CÂu HỎi NhỎ VỀ I/o 8051

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

  • #31
    thêm 1 vấn đề nữa : em đang dùng con ADC0809 có 8 kênh tương tự nhưng chỉ cần dùng 2 kênh vậy các kênh còn lại không nối với đầu ra ( để treo) thì nếu ta kiểm tra các kênh này thì sẽ nhận được kết quả như thế nào
    hoặc VD như sau: ta dùng cả 8 kênh và lần lượt đọc từng kênh (để hiển thị cả 8 kênh lên máy tính) nhưng có kênh nào đó bị đứt mạch (không có kết nối với ADC) thì lúc kiểm tra kênh này sẽ gây lỗi không , nếu có thì lỗi như thê' nào
    LƯU Ý :đây cũng là 1 vấn đề thực tế (em đang làm con mạch này mà)

    Comment


    • #32
      vậy y' các bác có phải là: đã là cổng ra thì không thể làm cổng vào và tương tự đã là cổng vào thì không là cổng ra
      vậy cũng có nghĩa là trong cùng 1 cổng không thể có bit vào và bit ra(vd:"P1.0 là ra;P1.1 là vào" là sai) mà chỉ có thể là vào hoặc ra giống nhau

      Comment


      • #33
        Nguyên văn bởi MicroDuyphi
        ORG 00H
        MOV A,#00H
        MOV P1,A

        LOOP: MOV A,P1
        MOV P2,A
        LJMP LOOP
        END
        em không hiểu lắm đoạn code này.
        lệnh: MOV A,#OOH
        MOV P1,A
        có nghĩa gì vậy.
        để định nghĩa cổng vào INPUT phải là:
        MOV A,#FFH
        MOV P1,A
        mới đúng chứ

        Comment


        • #34
          em moi' học 8051 co' 1 vấn đề nho nhỏ như sau:
          8051 co' 4 cổng vào/ra : P0,P2,P1,P3 mặc định là cổng ra
          để lập trình làm cổng vào cần đưa giá trị #FFh đến cổng đó
          VD:
          ;................................................. ......
          mov A,#FFh
          mov P1,A ;P1 làm cổng vào
          ;................................................. ....
          vậy khi muốn truyền dữ liệu #FFh ra ( tức là muốn P1 là cổng ra ) thì nó lại được định nghĩa là cổng vào và ta không thể đưa dữ liệu qua cổng đó được nữa
          một vấn đề nữa: liệu có thể định nghĩa từng bit của cổng là vào/ra không(tức là cùng 1 cổng thì co' bit vào và bit ra)
          VD: P1.0 là bit ra
          P1.1 là bit vào
          XIN ĐƯỢC HỌC HỎI CÁC CAO NHÂN
          Bản thân cổng của MSC51 là cổng bi-directional tức là sử dụng mô hình open drain với trở kéo lên có sẵn ở một số cổng.

          Với cổng này kô có trạng thái High Z. Khi CLR cổng nghĩa là dẫn con FET đưa cổng xuống 0, lúc này đọc vào sẽ là 0. Lúc này chập cổng lên nguồn có thể gây hỏng cổng.
          Khi SET cổng sẽ tắt FET. Lúc này mô hình tương đương sẽ là cổng có một trở nối lên nguồn, nếu phía ngoài kô nối gì hoặc một tính hiệu high sẽ đọc về là 1, người lại ở ngoài có tín hiệu 0 sẽ đọc về là 0.
          Tóm lại là xem kỹ cấu trúc cổng vật lý thực sự thế nào bạn sẽ hiểu, chứ hiểu kiểu logic 0 với 1 sẽ có thể nhầm.

          thêm 1 vấn đề nữa : em đang dùng con ADC0809 có 8 kênh tương tự nhưng chỉ cần dùng 2 kênh vậy các kênh còn lại không nối với đầu ra ( để treo) thì nếu ta kiểm tra các kênh này thì sẽ nhận được kết quả như thế nào
          hoặc VD như sau: ta dùng cả 8 kênh và lần lượt đọc từng kênh (để hiển thị cả 8 kênh lên máy tính) nhưng có kênh nào đó bị đứt mạch (không có kết nối với ADC) thì lúc kiểm tra kênh này sẽ gây lỗi không , nếu có thì lỗi như thê' nào
          LƯU Ý :đây cũng là 1 vấn đề thực tế (em đang làm con mạch này mà)
          Nếu để trống ngõ vào ADC thì nó sẽ đọc một giá trị bất kỳ. Thực ra cũng không ngẫu nhiên lắm. Thường xác xuất tập trung khoảng 2.5V trở lên.
          Tóm lại khi kiểm tra phải kiểm tra range của nó mới biết có lỗi hay kô chứ không có tín hiệu gì báo lỗi vật lý cả.
          Vẫn biết mỗi lần xa là một lần về lại...

          Comment


          • #35
            Nguyên văn bởi phidoigabay1
            em không hiểu lắm đoạn code này.
            lệnh: MOV A,#OOH
            MOV P1,A
            có nghĩa gì vậy.
            để định nghĩa cổng vào INPUT phải là:
            MOV A,#FFH
            MOV P1,A
            mới đúng chứ
            Bấy lâu đang tranh luận cách nào mới đúng. Tóm lại, cách
            MOV A,#FFH
            MOV P1,A
            mới đúng.

            Nếu định nghĩa:
            P1=0b10000000;
            thì P1.0-->6 là lối ra(mức 0).
            P1.7 có thể ra/vào tùy ý.
            +Nếu coi là output ra thì ra mức 1
            +Nếu coi là vào thì P1.7=input nếu trở kháng lối ra của tín hiệu đủ bé.
            Bạn tìm hiểu kỹ phần opencolecter.

            Còn phần đọc adc thì chưa hẳn như anh qmk nói, trở kháng lối vào adc0809 bé cỡ gần 10 kilo ôm(nhớ gần gần như thế). Nên có thể khác. Cách tốt nhất bạn nối 1 điện trở đủ bé vào ngay lối vào adc, nếu =0-->rất có thể bị đứt sensor.(tuy nhiên nếu dải sensor chưa 0V thì có thể ko được cách này)

            Comment


            • #36
              Xem ra các bác không hiểu câu hỏi của em:
              cổng P1 đang làm cổng ra và ta đang xuất dữ liệu
              mov A,#giá trị
              mov P1,A
              thế thì điều gì xảy ra khi #giá trị=#FFh (trong khi theo lý thuyết P1=#FFh thi` P1 được định nghĩa làm cổng vào)
              vậy sau đó ta có xuất được dữ liệu qua P1 nữa không hay là ta không được phép xuất giá trị #FFh ra ?????????????????????????????????????????

              Comment


              • #37
                +Nếu coi là vào thì P1.7=input nếu trở kháng lối ra của tín hiệu đủ bé.
                Bạn tìm hiểu kỹ phần opencolecter.


                em không hiểu

                Comment


                • #38
                  có nghĩa là ta có thể định nghĩa từng bit của cổng là lối vào????? với :
                  mov A,#10000000b
                  mov P1,A
                  thi` P1.7 là lối vào ?????

                  Comment


                  • #39
                    Bạn đọc và nghĩ kỹ các câu của mình trên sẽ hiểu.
                    Tốt nhất bạn post 1 sơ đồ cụ thể mình sẽ dễ nói hơn.
                    #giá trị=#FFh --->trường hợp này có thể coi là vao/ra tùy ý. Nếu coi là lối ra thì nó ở mức 1, nếu coi là lối vào thì khi đọc nó phụ thuộc giá trị bạn đặt vào.

                    Comment


                    • #40
                      Nguyên văn bởi phidoigabay1
                      Xem ra các bác không hiểu câu hỏi của em:
                      cổng P1 đang làm cổng ra và ta đang xuất dữ liệu
                      mov A,#giá trị
                      mov P1,A
                      thế thì điều gì xảy ra khi #giá trị=#FFh (trong khi theo lý thuyết P1=#FFh thi` P1 được định nghĩa làm cổng vào)
                      vậy sau đó ta có xuất được dữ liệu qua P1 nữa không hay là ta không được phép xuất giá trị #FFh ra ?????????????????????????????????????????
                      Bạn đọc lại kĩ đi. Vì nếu theo cách hiểu của bạn là khi P1 = 0xFF; nó chỉ có thể là input thì hoàn toàn sai lầm.

                      Tôi ví dụ:

                      P1 = 0x01; thì chân P1.0 sẽ là chân input đúng không? vậy lần sau gửi dữ liệu ra chân này thì vô tác dụng à? Ví dụ: P1 = 0x00; thì mức logic của chân P1.0 là gì? hay là nó không có mức logic ??

                      Nếu bạn trả lời được câu hỏi đó thì sẽ có câu trả lời cho mình.

                      Còn ở đây Trang và anh Phi tranh luận đơn giản là xem có phải là khi muốn nhận tín hiệu trên các chân thì cần set nó lên 1 trước hay không? Đó là việc làm trong 89C51.

                      Còn trình viết ASM thì có thể dùng Keil C, Reads51 (rigelcorp.com).

                      Chúc bạn thành công.
                      Technical sale at WT Microelectronics S'pore
                      Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
                      Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

                      Comment


                      • #41
                        Nguyên văn bởi phidoigabay1
                        có nghĩa là ta có thể định nghĩa từng bit của cổng là lối vào????? với :
                        mov A,#10000000b
                        mov P1,A
                        thi` P1.7 là lối vào ?????
                        Chết mất thôi, tớ nói bằng thừa. Mỏi tay lắm rồi... , có ai giúp bạn ấy đi, tớ nản rồi

                        Comment


                        • #42
                          Thôi Trang ạ. Nói vậy là bạn ấy hiểu rồi. Bạn cần phải tìm hiểu hết những điều căn bản trước đã.

                          Đọc và nghiền ngẫm nha. Ngoài ra bạn cần phải biết lập trình ASM và C nữa thì đọc code mới hiểu nổi.

                          Cố gắng nha. Vì đây là những điều căn bản mà bạn. Đừng để mọi người phí thời gian vào tranh luận có thể gây mất đoàn kết. OK?

                          Trang làm việc khác đi. Cố gắng xây dựng box cho tốt.

                          Chúc thành công.
                          Technical sale at WT Microelectronics S'pore
                          Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
                          Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

                          Comment


                          • #43
                            Nguyên văn bởi thaithutrang
                            Nếu định nghĩa:
                            P1=0b10000000;
                            thì P1.0-->6 là lối ra(mức 0).
                            P1.7 có thể ra/vào tùy ý.
                            +Nếu coi là output ra thì ra mức 1
                            +Nếu coi là vào thì P1.7=input nếu trở kháng lối ra của tín hiệu đủ bé.
                            Bạn tìm hiểu kỹ phần opencolecter.
                            VẬY BẠN NÓI RẰNG 1 cổng được định nghĩa làm cổng vào thì vẫn làm cổng ra được ( vào /ra song song)?????
                            VD: P2.5 nối tới chấn EOC của ADC0809 (chân kiểm tra conver)
                            EOC từ cao xuống thấp báo conver xong tức là EOC luôn là mức cao (1)
                            vậy nếu xuất ra P2.5 mức thấp (0) có gây xung đột không

                            Comment


                            • #44
                              Nguyên văn bởi ngohaibac
                              Thôi Trang ạ. Nói vậy là bạn ấy hiểu rồi. Bạn cần phải tìm hiểu hết những điều căn bản trước đã.

                              Đọc và nghiền ngẫm nha. Ngoài ra bạn cần phải biết lập trình ASM và C nữa thì đọc code mới hiểu nổi.

                              Cố gắng nha. Vì đây là những điều căn bản mà bạn. Đừng để mọi người phí thời gian vào tranh luận có thể gây mất đoàn kết. OK?

                              Trang làm việc khác đi. Cố gắng xây dựng box cho tốt.

                              Chúc thành công.
                              anh nói như vậy nghĩa là trang đúng thế thì có gây xung đột không nếu ta xuất ra ở bit "vào" đó
                              nhân tiện cảm ơn các anh các chị rất nhiều và em xin lỗi nếu gây phiền phức cho anh chị
                              em đã đọc kỹ 2 cuốn về 8051 của tác giả Tống văn on và ...của HVKTQS(quen mất tác giả) nhưng trong đó không có giải quyết được vấn đề của em nên em mới nhờ các anh chị giúp đỡ
                              QUẢ THỰC CHƯA CÓ AI TRẢ LỜI TRỌN VẸN ĐƯỢC CÂU HỎI CỦA EM( HAY CÁC ANH CHỊ KHÔNG HIỂU CÂU HỎI NHỈ)

                              Comment


                              • #45
                                chÁn...........

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X