Thông báo

Collapse
No announcement yet.

Cổng vào/ra song song, timer/counter của 8051

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

  • Cổng vào/ra song song, timer/counter của 8051

    Hi all,

    Tại đây, các bạn có thể post các bài viết (hướng dẫn, câu hỏi, trả lời) liên quan đến:
    - cổng vào ra song song
    - các timer/counter
    - các thanh ghi SFR liên quan


    Thân mến,
    blackmoon.

  • #2
    Chào các bác, để sử dụng chức năng counter của 8951 ngoài việc thiết lập giá trị cho thanh ghi TMOD, ta có cần phải làm gì nữa không? em làm hoài mà nó không chạy.
    Mạch của em như sau:
    - Ngõ vào xung: đưa đến chân T1.
    - Thạch anh: 24MHz
    - MCU: AT89C4051
    - TMOD = 50h.
    Bác nào có làm rồi thì trả lời giúp em nhé. Cảm ơn.
    Tìm tiên giữa suối mơ
    Rêu xanh, đá trắng bụi lu mờ

    Comment


    • #3
      troài thế còn TR0=1 ko gán cho nó chạy à
      nạp giá trị cho thanh ghi TH ,TL
      mình còn phải sử dụng cả chương trình ngăt nữa chứ
      SHARE KHO PHIM LỚN

      Comment


      • #4
        Hi totite,

        TMOD = 50h ---> counter 16 bit, xung clock được lấy vào từ chân P3.5 (T1).
        Việc nạp giá trị cho TH1 và TL1 là tùy bạn, nghĩa là nếu bạn muốn đếm từ giá trị ban đầu bao nhiêu thì nạp vào đó.

        Đúng như giaosucan nói, sau khi đặt chế độ và khởi tạo giá trị ban đầu (nếu muốn), bạn phải cho counter chạy bằng cách đặt TR1 = 1. Kể từ lúc này, counter 1 sẽ bắt đầu đếm các xung tại chân T1. Chiều đếm là đếm tiến, tức là thêm 1 xung thì tăng thêm 1 giá trị. Khi số xung vượt quá giá trị biểu diễn lớn nhất (trong trường hợp này là 65535) sẽ gây ra sự kiện tràn (overflow). Giá trị counter sẽ được tự động xóa về 0, cờ TF1 trong thanh ghi TCON sẽ tự động đặt = 1 và sẽ xảy ra ngắt nếu bạn cấu hình cho phép xử lý ngắt (các bit ET1 và EA trong thanh ghi IE đều được đặt = 1).

        Lưu ý: xung đưa vào đếm phải được chuẩn hóa để đảm bảo tương thích với đặc tính của cổng vào/ra (tức là mức cao và mức thấp của xung phải trong dải cho phép của cổng vào ra).
        Thân mến,
        blackmoon.
        Last edited by blackmoon; 05-09-2006, 10:28.

        Comment


        • #5
          Hehe, mới hỏi mà đã được trả lời liền rồi. Cảm ơn các bác nhiều lắm. Mình sẽ thử xem sao.
          Tìm tiên giữa suối mơ
          Rêu xanh, đá trắng bụi lu mờ

          Comment


          • #6
            Tuyệt quá, nó chạy rồi các bác ạ. Tại vì em nghĩ lệnh TR1 = 1 là dùng cho chế độ Timer nên em không dùng đến nó. Thật là ngố.
            Tìm tiên giữa suối mơ
            Rêu xanh, đá trắng bụi lu mờ

            Comment


            • #7
              minh muon truyen du lieu tu port 0 ra cong parallel may in

              minh muon truyen du lieu tu port 0 ra cong parallel may in thi phai ket noi ra sao .Xin cac ban chi giup .

              Comment


              • #8
                Nguyên văn bởi duycuong289 Xem bài viết
                minh muon truyen du lieu tu port 0 ra cong parallel may in thi phai ket noi ra sao .Xin cac ban chi giup .
                Ý bạn muốn đưa dữ liệu từ vdk (qua công P0) lên máy tính (qua cổng LPT) phải không?
                Trước hết là đọc về cổng máy in để biết chân nào là vào nào là ra. Rồi, cứ việc nối thẳng P0 đến 8 đường vào LPT (nếu là loại có 8 đường vào của thanh dữ liệu). Nếu dùng loại LPT không có nó thì phải dùng thêm 1 IC dồn kênh có 4 khối 2 sang 1, chân địa chỉ do LPT điều khiển.
                Không biết như vậy đã đúng ý bạn chưa, nếu cần thì nói rõ mọi người mới trao đổi dễ dàng hơn.
                !e

                Comment


                • #9
                  Anh em ơi! xin hỏi 1 câu khá bình thường nhưng cũng khá mù mời với mình là: Port P0 của 8051 để cực thu hở nhằm mục đích chính là gì vậy?
                  Thêm câu nữa, khi muốn đọc dữ liệu từ ngoài vào vdk thì ta thường set pin đó trước khi đọc, vậy nếu pin bị clr thì sao?
                  !e

                  Comment


                  • #10
                    Tại sao cực thu hở

                    Nguyên tắc cực thu hở (Open Collector):
                    -để dễ hình dung mình giả sử trường hợp sử dụng dụng BJT làm ngõ ra (giả sử cực Collector của NPN,thực tế thì dùng MOSFET nhưng mình biết 1 số bạn nói BJT thì biết FET thì có thể không) thì khi active high thì bjt tắt lúc này ngõ ra bằng với điện áp cực C nếu nối cực C với lại 1 trở R nào đó thì nếu đo không tải sẽ có giá trị là high(5V) nhưng khi có tải thì R làm sụt áp ,việc này tùy ứng dụng mà có ảnh hưởng hay không (nếu lớn hay nhỏ).Do đó nhà sản xuất để cho người dùng quyết định xem là cần trở bao nhiêu.
                    Lưu ý là việc này chỉ có ý nghĩa khi dùng các chân này làm Output còn nếu dùng input thì không vấn đề gì cả.

                    Sông dài, Thuyền lớn, Biển rộng bao la.
                    Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

                    Comment


                    • #11
                      Ừ lí do này mình thấy đúng rồi, o biết còn lí do nào khác nữa o? à mà với P2, giả sử là có sẵn điện trở kéo lên là 10k ở trong thì việc mắc thêm điện trở tải kéo lên bên ngoài cũng đâu khác P0 phải không?
                      !e

                      Comment


                      • #12
                        Chào các bác, cho mình hỏi về timer khi thiết lập ở chế độ hỏi vòng với.
                        Bài của mình như sau:
                        -------------------
                        #include<at89x52.h>
                        void main()
                        {
                        TMOD = 0X02;
                        TH0 = 0x47;
                        P2_1 = 1;
                        TR0 = 1;
                        if(TF0 == 1)
                        {
                        TR0=0;
                        P2_1 = 0;
                        TF0 = 0;
                        }
                        }
                        ------------------------
                        Khi cho chạy thì nó chỉ chạy được một vòng là đã bật cờ TF0 lên rồi, và nó cũng không tăng giá trị của TL0 theo ý muốn của mình nữa. Mong được sự giúp đỡ của anh em.

                        Comment


                        • #13
                          Nguyên văn bởi electronic Xem bài viết
                          Chào các bác, cho mình hỏi về timer khi thiết lập ở chế độ hỏi vòng với.
                          Bài của mình như sau:
                          -------------------
                          #include<at89x52.h>
                          void main()
                          {
                          TMOD = 0X02;
                          TH0 = 0x47;
                          P2_1 = 1;
                          TR0 = 1;
                          if(TF0 == 1)
                          {
                          TR0=0;
                          P2_1 = 0;
                          TF0 = 0;
                          }
                          }
                          ------------------------
                          Khi cho chạy thì nó chỉ chạy được một vòng là đã bật cờ TF0 lên rồi, và nó cũng không tăng giá trị của TL0 theo ý muốn của mình nữa. Mong được sự giúp đỡ của anh em.
                          Chả hiểu bác này hỏi gì? ?. Muốn mọi người giúp đỡ thì phải nêu câu hỏi rõ ràng chứ! [-x

                          Comment


                          • #14
                            Nguyên văn bởi electronic Xem bài viết
                            Chào các bác, cho mình hỏi về timer khi thiết lập ở chế độ hỏi vòng với.
                            Bài của mình như sau:
                            -------------------
                            #include<at89x52.h>
                            void main()
                            {
                            TMOD = 0X02;
                            TH0 = 0x47;
                            P2_1 = 1;
                            TR0 = 1;
                            if(TF0 == 1)
                            {
                            TR0=0;
                            P2_1 = 0;
                            TF0 = 0;
                            }
                            }
                            ------------------------
                            Khi cho chạy thì nó chỉ chạy được một vòng là đã bật cờ TF0 lên rồi, và nó cũng không tăng giá trị của TL0 theo ý muốn của mình nữa. Mong được sự giúp đỡ của anh em.
                            Viết như bạn thì chương trình sẽ chạy 1 lèo từ trên xuống dưới, xuống tới đáy code memory luôn.

                            Có lẽ viết như thế này, 89C5x sẽ chạy đúng như ý bạn.

                            #include<at89x52.h>
                            void main()
                            {
                            TMOD = 0X02;
                            TH0 = 0x47;
                            P2_1 = 1;
                            TF0 = 0;
                            TR0 = 1;
                            while(TF0!=1) {};
                            TF0 = 0;
                            TR0=0;
                            P2_1 = 0;

                            while(1){};
                            }
                            Phen này ông quyết buôn băng dính,
                            Vừa bán vừa hm... hm... cũng đắt hàng.

                            Comment


                            • #15
                              Cho em hỏi cái này?
                              Khi timer đang chạy ở chế độ định thời thì xảy ra ngắt vậy trong lúc đó timer vẫn chạy hay dừng lại? 2 timer có thể hoạt động ở chế độ định thời cùng 1 lúc ko?
                              Em còn khờ chưa biết nhìu mong các huynh chỉ giúp tận tình

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X