Thông báo

Collapse
No announcement yet.

Tại sao không xuất dữ liệu ra Led thông qua PORT0 trực tiếp được

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

  • Tại sao không xuất dữ liệu ra Led thông qua PORT0 trực tiếp được

    đây là chương trình của mình.
    Code:
    #include "regx51.h"
    #define Led0 P0
    #define Led1 P1
    #define Led2 P2
    #define Led3 P3
    
    
    void delay(unsigned int time)
    {
    	while (time --)
    	{
    		unsigned char temp = 1000;
    		while (temp --);
    	}
    }
    void main(void)									 
    {
    	while (1)
    	{
    		Led0=0xff;Led2=0xFF;Led3=0xFF;Led1=0xFF;
    		delay(100);
    		Led0=0xff;Led2=0xFF;Led3=0xFF;Led1=0xFF;
    		delay(100);
    	};
    }
    Liệu là do phần cứng của mình làm sai hay do lập trình
    Mình nối Led trực tiếp vào các PIN của port0 thông qua một trở là 220 Ohm
    Mong các bạn giải thích dùm mình, xin cảm ơn nhiều

  • #2
    Re:

    Do phần cứng của 89 thì PORT0 không có điện trở kéo lên bên trong. Để điều khiển được Led thì phải mắc điện trở kéo lên ở mạch ngoài.

    Comment


    • #3
      Đảo chiều lại đi cho nó thành tích cực mức 0 -nhưng coi chừng cháy chân VDK nếu là AT89

      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


      • #4
        mình đã mắc một điện trở 220 Ohm trước khi nối sang LEd nhưng vẫn không được.
        Minh test bằng proteus và thấy PORT 0 chỉ có ở mức 0 và tổng trở cao.
        Em đã đảo chiều nhưng mọi thứ vẫn không thay đổi.
        Cho em hỏi câu thứ 2: Điện trở kéo lên nghĩa là sao ạ?
        Cám ơn anh nhiều !
        Last edited by tatthang_le; 12-02-2009, 22:51.

        Comment


        • #5
          Hoc nua hoc mai

          Nguyên văn bởi tatthang_le Xem bài viết
          mình đã mắc một điện trở 220 Ohm trước khi nối sang LEd nhưng vẫn không được
          Minh test bằng proteus và thấy PORT 0 chỉ có ở mức 0 và tổng trở cao
          vậy anh có thể nêu lên cách nào mà chống lại việc bị cháy không ạ
          Cám ơn anh nhiều
          Hình như bạn nối nối tiếp điện trở thì phải,cách nối như vậy không đúng Bạn cứ hình dung bên trong VDK là con Tranzitor (PNP). Cổng Colecto là đầu ra, đông thời nối qua "điện trở" và nối lên nguồn, cổng eminto nối mass, bạn cấp mức logic 1 vào chân bazo thì đầu ra có mức 0, ngược lại cấp mức 0 vào bazo thi đầu ra có mức 1. Nhưng do P0 là cổng không có cái điện trở treo này;do vậy, khi bạn không nối trở lên nguồn thì cổng ra mãi mãi là mức logic 0.Thường mình vãn dùng điện trở băng. Bác QuocThai nói là cho mức 0 thì được là do vậy.
          Học đến bao giờ mới thành tài?

          Comment


          • #6
            Nguyên văn bởi namth.vp Xem bài viết
            Nhưng do P0 là cổng không có cái điện trở treo này;do vậy, khi bạn không nối trở lên nguồn thì cổng ra mãi mãi là mức logic 0.
            Không phải là mãi mãi logic 0
            phải là hi-z

            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


            • #7
              điện trở kéo

              điện trở kéo có tác dụng làm cho đầu ra ở mức cao còn ở port0 ko có điện trở kéo nên mà là một jfet khi ở chế độ nhập 2 jfet ko dẫn nên có dạng trở kháng cao (xem datasheet) thì bít ,còn các chân khác có R pull-up nên ở chế độ nhập nó ở mức cao chứ ko phải dạng trở kháng cao

              Comment


              • #8
                bạn mắc led kiểu sink đó, nguồn + -> R -> led -> port. nhưng con 89 chỉ chịu dòng tổng các port khoảng 80mA thôi.

                Comment


                • #9
                  Nguyên văn bởi tatthang_le Xem bài viết
                  đây là chương trình của mình.
                  Code:
                  #include "regx51.h"
                  #define Led0 P0
                  #define Led1 P1
                  #define Led2 P2
                  #define Led3 P3
                  
                  
                  void delay(unsigned int time)
                  {
                  	while (time --)
                  	{
                  		unsigned char temp = 1000;
                  		while (temp --);
                  	}
                  }
                  void main(void)									 
                  {
                  	while (1)
                  	{
                  		Led0=0xff;Led2=0xFF;Led3=0xFF;Led1=0xFF;
                  		delay(100);
                  		Led0=0xff;Led2=0xFF;Led3=0xFF;Led1=0xFF;
                  		delay(100);
                  	};
                  }
                  Liệu là do phần cứng của mình làm sai hay do lập trình
                  Mình nối Led trực tiếp vào các PIN của port0 thông qua một trở là 220 Ohm
                  Mong các bạn giải thích dùm mình, xin cảm ơn nhiều
                  Bạn hãy up mạch lên cho cả nhà xem nào! Bạn chọn mức tích cực là 1 thì phải tương ứng với phần cứng đó.
                  Đã gà vô đây còn thấy mình gà hơn!

                  Comment


                  • #10
                    Nguyên văn bởi tatthang_le Xem bài viết
                    mình đã mắc một điện trở 220 Ohm trước khi nối sang LEd nhưng vẫn không được.
                    Minh test bằng proteus và thấy PORT 0 chỉ có ở mức 0 và tổng trở cao.
                    Em đã đảo chiều nhưng mọi thứ vẫn không thay đổi.
                    Cho em hỏi câu thứ 2: Điện trở kéo lên nghĩa là sao ạ?
                    Cám ơn anh nhiều !
                    Bạn mắc trở 10k vào xem nào . OK !!!!!

                    Comment


                    • #11
                      ... dùng R1 làm trở kéo lên dương nguồn, R2 hạn dòng qua LED, níu cần bỏ R2 cũng được, hạn dòng bằng R1, lúc này áp ở mức logic 1 bằng VLed...
                      Attached Files

                      Comment


                      • #12
                        chào bạn tatthang_le!
                        theo minh bạn làm thế này thử nhé .
                        về fần mềm delay của bạn nhanh quá không đủ thời gian để bạn thấy led sáng
                        còn nếu sáng rồi củng không đạt lắm ,nếu bạn muốn led sáng thì tốt nhất bạn nên sử dụng led anot chung bởi vì các potb của 89c hút dòng mạnh hơn đẩy ra..nếu là led 7đoạn
                        chúc bạn thành công....

                        Comment


                        • #13
                          mình vẽ hình minh hoạ thế này nhé
                          Attached Files

                          Comment


                          • #14
                            Chào bạn,

                            Bản thân bên trong 8 chân của port 0 không có điện trở kéo lên. Còn điện trở kéo lên là 1 con điện trở bình thường được nối sẵn lên V+ bên trong con IC. Do đó đối với chác chân của Port 0 bạn nên mắc mạch như sau: Nguồn +5V qua con điện trở 220ohm sau đó qua con LED cuối cùng là vào các chân Port 0 thì được.

                            Lúc này chúng ta sử dụng mức tích cực là mức 0 còn mức 1 là mức không tích cực. Vậy thôi.
                            Học hoài sao thấy mình vẫn cứ ngu

                            Comment


                            • #15
                              Nguyên văn bởi tatthang_le Xem bài viết
                              đây là chương trình của mình.
                              Code:
                              #include "regx51.h"
                              #define Led0 P0
                              #define Led1 P1
                              #define Led2 P2
                              #define Led3 P3
                              
                              
                              void delay(unsigned int time)
                              {
                                  while (time --)
                                  {
                                      unsigned char temp = 1000;
                                      while (temp --);
                                  }
                              }
                              void main(void)                                     
                              {
                                  while (1)
                                  {
                                      Led0=0xff;Led2=0xFF;Led3=0xFF;Led1=0xFF;
                                      delay(100);
                                      Led0=0xff;Led2=0xFF;Led3=0xFF;Led1=0xFF;
                                      delay(100);
                                  };
                              }
                              Liệu là do phần cứng của mình làm sai hay do lập trình
                              Mình nối Led trực tiếp vào các PIN của port0 thông qua một trở là 220 Ohm
                              Mong các bạn giải thích dùm mình, xin cảm ơn nhiều
                              Tôi thấy cả 2 lần xuất ra đều mức 1 hết. Không thấy bạn đảo tín hiệu xuất ra.
                              LED không sáng có 2 nguyên nhân:
                              + Thứ nhất:
                              Trong đoạn code của bạn xuất ra liên tục là mức 1 (Phần tô đỏ trong đoạn trích code của bạn).
                              Nếu bạn nối led theo kiểu +Vcc -> trở 220R -> Anot LED -> Katot LED -> PORT của vi điều khiển thì kiểu gì led sẽ không sáng. Bạn phải đảo như sau:
                              Led0=Led2=Led3=Led1=0xFF;
                              delay(100);
                              Led0=Led2=Led3=Led1=0;
                              delay(100);
                              + Thứ 2:
                              Bạn phân cực cho Led bị ngược -> kiểu gì cũng không sáng. Còn vấn đề có trở kéo hay không, nếu phân cực cho Led đúng thì kiểu gì cũng sáng ( sáng yếu hơn nếu là kiểu đẩy dòng ra).
                              Thông thường hay nối Led như theo phương án thứ nhất - Phương án hút dòng vì với 89XXX dòng hút vào lớn hơn dòng đẩy ra.
                              n
                              ĐT: 0986 492 489

                              Tham khảo:

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X