Thông báo

Collapse
No announcement yet.

Dành cho người mới tìm hiểu 8051

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

  • câu lệnh gọi trễ của bạn có vấn đề rùi đó VĐK ko có câu lệnh đó đâu.Câu lệnh đó chỉ dùng khi lập trình với ngôn ngữ Pascal thui. Bạn phải viết một chưong trình con có tên là delay mức độ làm trể bạn phải viết trong chuong trình con này sau đó dùng câu lệnh (call delay) để gọi trể.

    Comment


    • Quỳnh gửi cho mình xin nhé

      Nguyên văn bởi quynh Xem bài viết
      Đây là quyển sách khá hay về lạp trinh C cho 8051.
      Tui up mãi lên đây ko được.Bạn nào cần thì liên hệ với mình nhé.Quyển này viết bằng tiếng anh, khá cơ bản.Dung lượng gần 5MB
      Chào quỳnh! Mình tìm hiểu và làm về 8051 cũng lâu rồi nhưng trước đây mình chỉ dùng assemble viết chương trình thôi. Mình thấy triên diễn đàn các bạn bàn về cách dùng ngôn ngữ lập trình C để viết chương trình cho 8051 mình thấy hay. Mình muốn bạn gửi cho mình tài liệu lập trình C cho 8051 nhé
      Cảm ơn bạn nhiều
      xuanvudk2@gmail.com
      NGUYỄN XUÂN VŨ
      Mua bán, sửa chữa PLC, biến tần
      Vỉ mạch điện tử công nghiệp các loại
      0978462163

      Comment


      • Cách mắc led như thế nào để led sáng tốt?

        Chào cả nhà.
        Cho D hỏi, hiện nay mình mới mua một cái mạch ráp chử làm sẳn, có 8 nhánh,nguồn 12v. D mua tanpho 12V và 1A để cấp nguồn và đồng thời mình lắp mỗi nhánh song song khoản 150 led. Mạch dùng D8050 . Mình lắp như thế đèn sáng rất yếu. Vậy D phải lắp như thế nào để led sáng hơn? Còn nữa, cho minh hỏi thay con D8050 thành H1061 thì nó không vứa với mạch in vậy có cách nào khác để led sang ốt không vậy.
        Giúp minh với.

        Comment


        • Nguyên văn bởi dientu9 Xem bài viết
          Chào cả nhà.
          Cho D hỏi, hiện nay mình mới mua một cái mạch ráp chử làm sẳn, có 8 nhánh,nguồn 12v. D mua tanpho 12V và 1A để cấp nguồn và đồng thời mình lắp mỗi nhánh song song khoản 150 led. Mạch dùng D8050 . Mình lắp như thế đèn sáng rất yếu. Vậy D phải lắp như thế nào để led sáng hơn? Còn nữa, cho minh hỏi thay con D8050 thành H1061 thì nó không vứa với mạch in vậy có cách nào khác để led sang ốt không vậy.
          Giúp minh với.
          đọc tới chỗ : mỗi nhánh // 150 led , mỗi con cần dòng 10mA để sáng tỏ --> cần 1.5A cũng cấp chỉ cho 1 nhánh . Vậy cái biến thế 12V 1A của u liệu cấp dòng đủ k ta ? hèn j k đủ sáng

          Comment


          • Mắc led song song

            Nguyên văn bởi Zz_Bi_zZ Xem bài viết
            đọc tới chỗ : mỗi nhánh // 150 led , mỗi con cần dòng 10mA để sáng tỏ --> cần 1.5A cũng cấp chỉ cho 1 nhánh . Vậy cái biến thế 12V 1A của u liệu cấp dòng đủ k ta ? hèn j k đủ sáng
            Hi.
            Cho D hỏi thêm tí nữa . Mạch của D làm sẳn có 8 R=390 ôm nối tiếp với 1 led. Có 8 nhánh. D thay con D8050 thành con H1061 và D mắc song song khoản 150 led cho mỗi nhánh . Nếu như Bạn nói thế thì mình phải chọn Nguồn 12V và I=12A . Bạn có cách nào khác không vậy?

            Comment


            • mấy bạn xem dùm mình đoạn code về đọc cờ BF trong giao tiếp LCD dùm mình chút,viết mà nó không chạy,lại không biết sai lỗi j,thank mọi người
              Code:
              void read_BF()
              {
              	RS = 0;
              	RW = 1;
              	//BF = 1;//cho này set hay khong nó deu khong chay het :((
              	E = 1;
              	E = 0;
              	while(BF)
              	{
              	}
              }
              mình đưa cả chương trình lên lun,mấy bác coi thử dùm em chút,dùng delay thay thế cho việc đọc cờ bận thì ok,còn dùng cờ bận thì không chạy

              Code:
              #include "regx52.h"
              #define RS P1_4
              #define RW P1_5
              #define E P1_6
              #define BF P1_3
              
              //--------------------
              #define lcd_data P1
              
              //--------------------
              void delay(unsigned int time);	
              void int_lcd(void);	 			// intialize lcd
              void lcd_putcmd(unsigned char Var);//write lcd commond
              void lcd_putdata(unsigned char Var);//write lcd data
              void read_BF();//check busy flag ( BF )
              
              
              
              //----------------Function delay---------
              void delay(unsigned int time)
              {
              	while(time--)
              	{
              		unsigned int j=100;
              		while(j--)
              		{
              		}
              	}
              }
              //--------------Read busy flag---------
              void read_BF()
              {
              	RS = 0;
              	RW = 1;
              	//BF = 1;
              	E = 1;
              	E = 0;
              	while(BF);
              }
               
              //------------Write Command----------
              void lcd_putcmd(unsigned char Var)
              {
              	read_BF();
              		lcd_data = (Var>>4)&0x0f;
              		RS = 0;
              		RW = 0;
              		E = 1;
              		E = 0;
              		
              	read_BF();
              		lcd_data = (Var&0x0f);
              		RS = 0;
              		RW = 0;
              		E = 1;
              		E = 0;
              	
              }
              //------------Write Data-----------------
              void lcd_putdata(unsigned char dt)
              {
              	read_BF();
              		lcd_data = (dt>>4)&0x0f;
              		RS = 1;
              		RW = 0;
              		E = 1;
              		E = 0;
              	
              	read_BF();
              		lcd_data = (dt&0x0f);
              		RS = 1;
              		RW = 0;
              		E = 1;
              		E = 0;
              }
              //------------Intialize LCD-----------
              void int_lcd()
              {
              	delay(100);
              	lcd_putcmd(0x02);//interface 4bit
              	lcd_putcmd(0x28);// interface 4bit 2line display 5*8
              	lcd_putcmd(0x0f);//display On cursor on cursor blink on
              	lcd_putcmd(0x01);//clear LCD
              }
              
              	
              //***************************************************
              void main()
              {
              	int_lcd();
              	lcd_putcmd(0x80);// line 1
              	lcd_putdata('A');
              	
                      while(1);
              }
              Last edited by vodienDT4; 03-09-2009, 00:45.

              Comment


              • Chương trình kiểm tra BF của chú em chưa đúng sao nó chạy được.
                Dùng thử cái này xem sao:
                PHP Code:
                void wait(void)
                {
                  
                char n=0;
                  
                EN=1// Dua chan chot du lieu len cao
                  
                RS=0// Chon RS la thanh ghi lenh
                  
                RW=1// Doc du lieu tu LCD
                  
                LCDdata=0xFF;
                  while(
                BF)
                   {
                        
                n++;
                     if(
                n>100) break; // Doi n dem den 100 thi thoat ko kiem tra Busy Flag
                  
                EN=0// Dua xung cao xuong thap de chot du lieu
                  
                RW=0// Cho phep dua du lieu len LCD
                   
                }

                Comment


                • Nguyên văn bởi vodienDT4 Xem bài viết
                  mấy bạn xem dùm mình đoạn code về đọc cờ BF trong giao tiếp LCD dùm mình chút,viết mà nó không chạy,lại không biết sai lỗi j,thank mọi người
                  Code:
                  void read_BF()
                  {
                  	RS = 0;
                  	RW = 1;
                  	//BF = 1;//cho này set hay khong nó deu khong chay het :((
                  	E = 1;
                  	E = 0;
                  	while(BF)
                  	{
                  	}
                  }
                  mình đưa cả chương trình lên lun,mấy bác coi thử dùm em chút,dùng delay thay thế cho việc đọc cờ bận thì ok,còn dùng cờ bận thì không chạy
                  Code:
                  #include "regx52.h"
                  #define RS P1_4
                  #define RW P1_5
                  #define E P1_6
                  #define BF P1_3
                  
                  //--------------------
                  #define lcd_data P1
                  
                  //--------------------
                  void delay(unsigned int time);	
                  void int_lcd(void);	 			// intialize lcd
                  void lcd_putcmd(unsigned char Var);//write lcd commond
                  void lcd_putdata(unsigned char Var);//write lcd data
                  void read_BF();//check busy flag ( BF )
                  
                  
                  
                  //----------------Function delay---------
                  void delay(unsigned int time)
                  {
                  	while(time--)
                  	{
                  		unsigned int j=100;
                  		while(j--)
                  		{
                  		}
                  	}
                  }
                  //--------------Read busy flag---------
                  void read_BF()
                  {
                  	RS = 0;
                  	RW = 1;
                  	//BF = 1;
                  	E = 1;
                  	E = 0;
                  	while(BF);
                  }
                   
                  //------------Write Command----------
                  void lcd_putcmd(unsigned char Var)
                  {
                  	read_BF();
                  		lcd_data = (Var>>4)&0x0f;
                  		RS = 0;
                  		RW = 0;
                  		E = 1;
                  		E = 0;
                  		
                  	read_BF();
                  		lcd_data = (Var&0x0f);
                  		RS = 0;
                  		RW = 0;
                  		E = 1;
                  		E = 0;
                  	
                  }
                  //------------Write Data-----------------
                  void lcd_putdata(unsigned char dt)
                  {
                  	read_BF();
                  		lcd_data = (dt>>4)&0x0f;
                  		RS = 1;
                  		RW = 0;
                  		E = 1;
                  		E = 0;
                  	
                  	read_BF();
                  		lcd_data = (dt&0x0f);
                  		RS = 1;
                  		RW = 0;
                  		E = 1;
                  		E = 0;
                  }
                  //------------Intialize LCD-----------
                  void int_lcd()
                  {
                  	delay(100);
                  	lcd_putcmd(0x02);//interface 4bit
                  	lcd_putcmd(0x28);// interface 4bit 2line display 5*8
                  	lcd_putcmd(0x0f);//display On cursor on cursor blink on
                  	lcd_putcmd(0x01);//clear LCD
                  }
                  
                  	
                  //***************************************************
                  void main()
                  {
                  	int_lcd();
                  	lcd_putcmd(0x80);// line 1
                  	lcd_putdata('A');
                  	
                          while(1);
                  }
                  - P1 gửi dữ liệu ra LCD mode 4bit , nhưng u dùng P1.3->P1.6 làm các chân đk LCD , thử hỏi u gửi data ra LCD = các chân nào nữa ?? chẳng lẽ P1.0 , P1.1 ,P1.2 , P1.7 ??
                  - U dùng 89 để giao tiếp thì trong 89 , mún là chân nhập , trước hết ta phải cho chân đó = 1 , cụ thể ở đây là P1.3=1 . P1.3 = 1 k có nghĩa là ta xuất mức 1 ra chân đó , mà là khai báo chân nhập .

                  trong PIC hay AVR , tại 1 thời điểm , chân đó là In hoặc Out , nếu In thì còn có In vào mức 0 hay mức 1 , OUT thì out ra mức 0 hay mức 1 . 89 thì k rõ ràng , dở là ở chỗ đó đó

                  Comment


                  • P1 gửi dữ liệu ra LCD mode 4bit , nhưng u dùng P1.3->P1.6 làm các chân đk LCD , thử hỏi u gửi data ra LCD = các chân nào nữa ?? chẳng lẽ P1.0 , P1.1 ,P1.2 , P1.7 ??
                    em giao tiếp dữ liệu 4b (từ P1.0 -> P1.3 <=> D4-D7) mà LCD nó mặc định cờ bận là chân D7 ( P1.3) nên em đặt tên BF cho P1.3 là cho tiện thôi mà
                    chương trình trên nếu dùng lệnh delay ở mỗi hàm truyền thì nó chạy,còn dùng BF thì nó không,nên nó sai chỉ sai ở hàm kiểm tra cờ BF thôi ah,dữ liệu thì nó vẫn truyền được mà,không bị ảnh hưởng bởi 3 chân RS RW E
                    void wait(void)
                    {
                    char n=0;
                    EN=1; // Dua chan chot du lieu len cao
                    RS=0; // Chon RS la thanh ghi lenh
                    RW=1; // Doc du lieu tu LCD
                    LCDdata=0xFF;
                    while(BF)
                    {
                    n++;
                    if(n>100) break; // Doi n dem den 100 thi thoat ko kiem tra Busy Flag
                    EN=0; // Dua xung cao xuong thap de chot du lieu
                    RW=0; // Cho phep dua du lieu len LCD
                    }
                    }
                    em thay hàm read_BF của em bằng hàm của anh mà nó vẫn không chạy
                    mà anh Multi ơi,giả dụ khi n >100 mà cờ BF vẫn chưa xóa thì làm sao ah,lúc đấy LCD còn bận,đáng lẽ cho lập vô tận đến khi nào nó xoa cờ đi chứ ah
                    em nói thế không biết đúng không
                    Last edited by vodienDT4; 02-09-2009, 20:57.

                    Comment


                    • Nguyên văn bởi vodienDT4 Xem bài viết


                      em thay hàm read_BF của em bằng hàm của anh mà nó vẫn không chạy
                      mà anh Multi ơi,giả dụ khi n >100 mà cờ BF vẫn chưa xóa thì làm sao ah,lúc đấy LCD còn bận,đáng lẽ cho lập vô tận đến khi nào nó xoa cờ đi chứ ah
                      em nói thế không biết đúng không
                      Cái này chắc tránh trường hợp bạn gỡ bỏ LCD ra khỏi mạch hoặc LCD bị hỏng thì chương trình của bạn không bị dừng ở việc kiểm tra cờ bận của LCD, nếu không nó cứ kiểm tra cờ bận mãi mà không làm đc việc khác.

                      Comment


                      • bạn nào có code C cho việc đọc cờ bận thì up cho mình tham khảo chút,tình hình vẫn chưa cải thiện

                        Comment


                        • Việc kiểm tra BF chỉ là thủ tục khởi tạo, đoạn này có thể thay bằng 1 hàm delay vào chục us là được thôi.
                          PHP Code:
                          void Busy()
                          {
                              
                          RS=0;
                              
                          RW=1;
                              
                          BF=1;                          
                              while(
                          BF !=0)
                              {
                                  
                          EN=0;
                                  
                          EN=1;
                              }

                          Comment


                          • Nguyên văn bởi Multi System Xem bài viết
                            Việc kiểm tra BF chỉ là thủ tục khởi tạo, đoạn này có thể thay bằng 1 hàm delay vào chục us là được thôi.
                            Có một số lệnh của LCD cần thời gian trễ đến hơn 1ms, thế nên delay vài chục us là chưa đủ, phải cẩn thận chỗ này

                            Comment


                            • thất ra em biết cái ấy,vấn đề delay sẽ làm tăng thời gian hơn so với cờ bận,mà thấy ct cờ bận cũng đơn giản,có điều không biết sao nó hổng chạy ,đang có gắng có được cái code tốt nhất mà a ,khi xài cờ bận,ta sẽ không cần quan tâm đến thời gian thực hiện câu lệnh của LCD nữa,như thế nó tiện hơn mà,hơi cầu toàn một chút,biết thêm 1 cách cũng tốt mà
                              Last edited by vodienDT4; 06-09-2009, 22:03.

                              Comment


                              • có ai biết tính công suất tiêu thu cùa mạch vi xử lý không, chỉ mình với. Mach của mình bao gồm 89c51 + 8 led 7 đoạn+dalass 887.Mình đang làm đồ án 2 , thầy yêu cầu tính công suất để thiết kế bộ nguồn xung cho phù hợp với mạch (bắt buộc)

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                • mèomướp
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi mèomướp
                                  Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                                  hôm nay, 13:11
                                • tuyennhan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi tuyennhan
                                  Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                                  hôm nay, 09:25
                                • tuyennhan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi tuyennhan
                                  Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                                  Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                                  hôm nay, 09:10
                                • Ng.Phuong.5
                                  Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                                  bởi Ng.Phuong.5
                                  Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                                  Mấy con...
                                  Hôm qua, 19:44
                                • viettinh
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi viettinh
                                  Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                                  Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                                  Hôm qua, 18:12
                                • nguyendinhvan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi nguyendinhvan
                                  Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                                  Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                                  Cách đơn giản...
                                  Hôm qua, 00:04
                                • mèomướp
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi mèomướp
                                  Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                                  08-01-2025, 19:02
                                • tuyennhan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi tuyennhan
                                  Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                                  08-01-2025, 15:43
                                • tuyennhan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi tuyennhan
                                  Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                                  08-01-2025, 15:28
                                • mèomướp
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi mèomướp
                                  Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                                  08-01-2025, 11:44
                                Đang tải...
                                X