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

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

    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

  • #2
    Có sự nhầm lẫn đâu đó giữa PIC và 8051.
    Chỉ có PIC mới có khái niệm định nghĩa cổng/bit vào ra mà thôi.
    Nhưng cũng chỉ với dòng PIC16, còn dòng PIC18 hình như không cần!
    Việc để PORT8051 là port nhập người ta cần làm thao tác:
    mov A,#FFh là có nhiều lý do để có thể giải thích. Điều đó không có nghĩa là không thể làm thao tác sau khi xem PORT 8051 là PORT nhập: MOV A,#00H

    Comment


    • #3
      Tớ không phải cao nhân nhưng cũng xin có chút ý kiến !

      Đây là một cổng vào ra cơ bản không điều khiển hướng.Các tín hiệu như W :ghi dwx liệu,R đọc dữ liệu,A:là đường chọn (đầu ra của mạch giải mã dịa chỉ) và dường dữ liệu DB.
      Như vậy khi các bạn muốn lấy dữ liệu vào(cổng vào ) từ cổng này thì D flip flop có đầu ra Q=Hight.
      Nếu Q=Low khi đó dữ liệu vào từ PIN là H hay L thì VXL đều nhận được là L.
      Trong trường hợp bạn dugf nó là cổng ra thì tất nhiên bạn chỉ cần ghi mức logic tương ứng vào FF thì khi đó mức logic của PIN =Q (không xét đến tải bên ngoài)
      .
      Last edited by vutricongbka; 26-02-2006, 00:27.

      Comment


      • #4
        Nguyên văn bởi MicroDuyphi
        Có sự nhầm lẫn đâu đó giữa PIC và 8051.
        Chỉ có PIC mới có khái niệm định nghĩa cổng/bit vào ra mà thôi.
        Nhưng cũng chỉ với dòng PIC16, còn dòng PIC18 hình như không cần!
        Việc để PORT8051 là port nhập người ta cần làm thao tác:
        mov A,#FFh là có nhiều lý do để có thể giải thích. Điều đó không có nghĩa là không thể làm thao tác sau khi xem PORT 8051 là PORT nhập: MOV A,#00H
        PIC18 cũng y như PIC 16 về việc định nghĩa cổng vào hoặc ra.

        Với 89: để định nghĩa lối vào thì buộc phải có lệnh cổng đó = #FF, nếu ko sai và có thể dẫn tới cháy cổng(Có thể ko cần viết lệnh đó sau khi reset do mặc định).
        Nếu có lệnh gán cổng đó =0, sau đó đọc thì kết quả sai(cũng = 0), bởi vậy cần 1 lệnh gán = 1 đã.

        Comment


        • #5
          PIC và AVR là cổng vào ra hai chiều có định hướng !

          Comment


          • #6
            Vì 8051 có mức tích cực là mức "0", khí đó dòng vào của nó lên đến 20-25mA. Còn nếu với mức 1 thì dòng ra chỉ khoảng(source current) 1mA.(Do cổng của 8051 được chế tạo theo kỹ thuật TTL).
            Chuyện gì sẽ xảy ra nếu một chân I/O nào đó của 8051 là đang ở mức"0" lại làm nhiệm vụ INPUT. Khi đó nếu có một tín hiệu vào ở mức 1(và có dòng lớn) thì tức khắc cổng I/O của 8051 sẽ bị xung đột và sẽ gây "cháy-nổ" chuyện này thường gặp.

            Trong một tình huống khác, giả sử chúng ta muốn kiểm tra một phím nhấn tích cực mức"0" và dĩ nhiên có một điện trở kéo dương 10k chẳng hạn. Thì khi đó chân I/O của 8051 xem như làm nhiệm vụ INPUT, khi đó bạn có thể khai báo một chân INPUT như sau mà vẫn không hề ảnh hưởng gì hết:
            MOV A,#00H
            MOV P1,A ; P1 IMPUT MODE
            Sau đó đọc giá trị nhận về:
            MOV A,P1
            Không ảnh hưởng gì cả!
            Nếu phím nhã thì điện trở 10k tạo mức 1
            Khi phím nhấn thì là mức 0( sẽ không bị xung đột mức mặc dù lỡ dùng lệnh MOV A,#00h-->P1 hay MOV P1,#00h)

            Như đã nói, do 8051 có mức tích cực của nó lại là mức "0", vì vậy để an toàn chúng ta sẽ làm thao tác sau khiử dụng PORT 8051 ở mode input:
            MOV A,#0FFH
            MOV P1,A ; P1 IMPUT MODE

            Thật ra là tùy vào mạch thiết kế của bạn!
            Last edited by MicroDuyphi; 03-03-2006, 10:10.

            Comment


            • #7
              Nguyên văn bởi MicroDuyphi
              Trong một tình huống khác, giả sử chúng ta muốn kiểm tra một phím nhấn tích cực mức"0" và dĩ nhiên có một điện trở kéo dương 10k chẳng hạn. Thì khi đó chân I/O của 8051 xem như làm nhiệm vụ INPUT, khi đó bạn có thể khai báo một chân INPUT như sau mà vẫn không hề ảnh hưởng gì hết:
              MOV A,#00H
              MOV P1,A ; P1 IMPUT MODE
              Sau đó đọc giá trị nhận về:
              MOV A,P1
              Không ảnh hưởng gì cả!
              Bạn nào check hộ mình thông tin này với, có lẽ tớ nhớ nhầm cũng nên

              Comment


              • #8
                Mình nhớ nếu viết:
                P1=0;
                sau đó đọc giả trị cổng P1
                x=P1;
                thì kết quả x sẽ bằng 0; còn anh DP nói kết quả sẽ bằng giá trị đọc vào cổng P1(nên có thể khác 0).
                Hiện tại mình ko có 89, nên ko test được. Lâu rồi ko làm, vậy nhờ ai đó test hộ mình với

                Comment


                • #9
                  Cô THÁI kiem tra di, bat cai Simulator thu xem nao! Phi cung ko nho nua!?

                  Comment


                  • #10
                    Thôi được rồi, Phi sẽ test cho! hôm sau THÁI vào xem nha!

                    LƯU Ý;******************************************
                    Nếu phím nhã thì điện trở 10k tạo mức 1
                    Khi phím nhấn thì là mức 0
                    ;******************************************

                    Comment


                    • #11
                      Hehe...cãi nhau vụ này vui đây.
                      Trước hết tui khẳng định 3T đúng.
                      Để đọc giá trị của cổng 8051 thì phải xét nó lên 1:
                      mov A,#0x0FF
                      mov P1,A
                      Bởi vì, khi set cổng nào đó của 8051 lên 1 thì sơ đồ tương đương của chân đó được treo lên nguồn. Khi bạn mắc chân đó vào nguồn ngoài, nếu chân nào đó được mắc lên Vcc thì giá trị là 1, ngược lại chân đó bị nối xuống đất thì giá trị của nó là 0.
                      Khi set cổng nào đó là 0x00 thì sơ đồ tương đương là chân đó được nối xuống đất, dù bạn nối cái gì vào port đó thì cũng là 0 mà thôi.
                      Nếu tôi nhớ không nhầm thì các cổng của 8051 trừ port 0 là open-collector còn port 0 là open-drain. Các chân của 8051 khả năng xuất dòng ra rất kém, một con led nếu cắm vào cũng sáng mờ mờ thôi. Còn khả năng hút dòng vào của nó rất lớn.
                      Còn việc set P1.1 hay P1.0 là 1 hay 0 thì tùy thuộc vào compiler, chẳng qua dùng mask and và or mà thôi.

                      Comment


                      • #12
                        Ủa lạ nhỉ!?
                        Sao nếu có thể cho:
                        mov A,#0x0FF
                        mov P1,A

                        là đúng thì cái này
                        mov A,#0x00
                        mov P1,A

                        là sai nhỉ?!
                        Nên nhớ khi đọc về ta dùng lệnh MOV thanhghi,PORT nha
                        Thêm nữa, xem lại cái mạch kết nối ngoài Phi đã minh họa.

                        Comment


                        • #13
                          phamthaihoa đợi phi 3 phút để down cái phần mềm test chương trình rồi nói tiếp, chứ nhớ với quên ì xèo hết!

                          Comment


                          • #14
                            Em ở nhà cũng không còn con 89 nào, mai mua 1 con về check lại ngay.

                            Comment


                            • #15
                              ORG 00H
                              MOV A,#00H
                              MOV P1,A

                              LOOP: MOV A,P1
                              MOV P2,A
                              LJMP LOOP
                              END
                              Last edited by MicroDuyphi; 26-02-2006, 12:09.

                              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