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

                              • tuyennhan
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi tuyennhan
                                Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                                Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                                hôm nay, 07:44
                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Cám ơn những lời chúc tốt đẹp của em.

                                Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                                Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                                hôm nay, 02:00
                              • nhathung1101
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi nhathung1101
                                Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                                Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                                Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                                Hôm qua, 22:18
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                                Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                                Hôm qua, 14:51
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                                Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                                Hôm qua, 14:39
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                                Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                                Hôm qua, 14:28
                              • bqviet
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi bqviet
                                Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                                21-02-2025, 20:26
                              • mèomướp
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi mèomướp
                                Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                                21-02-2025, 12:32
                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                                Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                                20-02-2025, 21:31
                              • bqviet
                                Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                                bởi bqviet
                                Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                                20-02-2025, 17:22
                              Đang tải...
                              X