Thông báo

Collapse
No announcement yet.

cần giúp đỡ về code 8051

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

  • #16
    Cốt

    P1=P1>>1;
    dịch sang phải 1 bít.

    Comment


    • #17
      Mình nhầm

      Sáng lần lượt từ P1.0 đến P1.7 nhá

      Comment


      • #18
        Nguyên văn bởi kimman3 Xem bài viết
        cám ơn bác đã quan tâm tại e ko có học qua trường lớp tự nghiên cứu để viết code thôi ạ à mà bác có cách nào để viết led sáng tuần tự rồi tắt tuần tự ko
        theo mình suy nghĩ thủ công hoặc làm gộp đều được :
        + thủ công: lệnh set và clr lần lượt từng chân ,xen kẽ là các hàm trễ delay(). là có thể làm sáng lần lượt
        + làm gộp: dùng lệnh dịch phải, dịch trái một byte . byte = byte << 1 ; tức là byte = byte được dịch sang trái 1 đơn vị.
        byte = byte >> 1 ; dịch phải 1 đơn vị.
        nếu 2 lệnh dịch này vẫn chưa ổn thì phải đọc tài liệu về lập trình C thêm.

        Comment


        • #19
          Nguyên văn bởi maingochoc Xem bài viết
          Sáng lần lượt từ P1.0 sang P1.2
          While(1)
          {
          P1=0x01;
          For(i=0;i<8;i++) P1=P1>>1;
          }
          Bạn chắc cái này sáng được chứ?
          Code:
          p1=1; => P1=00000001b;
          sau đó
          P1>>=1; => (0000001b>>=1) = 00000000; bit 1 khi nãy sẽ tràn xuống CY giờ P0 sẽ =0 nên các phép dịch bit sau thì P0 vẫn là 0-> chả có đèn nào sáng
          Và quan trọng là nếu code có chạy đi chăng nữa thì cũng không có chuyện nhìn thấy sáng tuần tự đâu vì bạn có làm chậm chuơng trình đâu mà nhìn thấy? nếu có thấy thì nó cũng là sáng đồng thời tất cả.

          Có lẽ do bạn viết nhầm dấu << thành >> cũng nên.

          Comment


          • #20
            Nguyên văn bởi myth-coder Xem bài viết
            Bạn chắc cái này sáng được chứ?
            Code:
            p1=1; => P1=00000001b;
            sau đó
            P1>>=1; => (0000001b>>=1) = 00000000; bit 1 khi nãy sẽ tràn xuống CY giờ P0 sẽ =0 nên các phép dịch bit sau thì P0 vẫn là 0-> chả có đèn nào sáng
            Và quan trọng là nếu code có chạy đi chăng nữa thì cũng không có chuyện nhìn thấy sáng tuần tự đâu vì bạn có làm chậm chuơng trình đâu mà nhìn thấy? nếu có thấy thì nó cũng là sáng đồng thời tất cả.

            Có lẽ do bạn viết nhầm dấu << thành >> cũng nên.
            vậy a có thể giải thích cho e cái này ko ạ unsigned char Mang[10] = {0,1,2,3,4,5,6,7,8,9};
            nếu các số 0,1,2...,9 mỗi số tương ứng với 1 mã hex vậy thì led nó sẽ sáng như thế nào ạ cái phần mảng này nó sẽ chạy làm sao và căn cứ vào đâu thì mình có thể biết dc nó sẽ chạy mã hex nào trong 10 cái mã hex đó ạ giúp e với e vẫn ko hiểu chỗ này

            Comment


            • #21
              vậy cái này e sửa thế này dc ko ạ
              While(1)
              {
              P1=0xff;
              For(i=0;i<8;i++) P1=P1>>1;
              }

              Comment


              • #22
                Nguyên văn bởi kimman3 Xem bài viết
                vậy cái này e sửa thế này dc ko ạ
                While(1)
                {
                P1=0xff;
                For(i=0;i<8;i++) P1=P1>>1;
                }
                Cái này nên sửa thành
                Code:
                While(1)
                {
                    P1=0xff;
                    For(i=0;i<8;i++){
                        P1=P1>>1;
                        delay(x_mini_giay);// x_mini_giay là thời gian bạn muốn làm chậm chưong trình, hàm delay bạn có thể kiếm ở trên diễn đàn có rất nhiều bài về delay
                    }
                }
                với bài như trên thì các bóng đèn sẽ tắt dần từ P1.7 về tới P1.0
                Hoặc bài trên kia của Maingochoc có thể sửa thành
                Code:
                While(1)
                {
                  P1=0x01;
                  For(i=0;i<8;i++) {
                    P1=P1<<1;// Viết ngắn là P1<<=1;
                    delay(x_mini_giay);
                  }
                }
                với cách viết này thì các đèn sẽ sáng(xong tắt) từ P1.0->P1.7.
                Còn đối với
                Code:
                unsigned char Mang[10] = {0,1,2,3,4,5,6,7,8,9};// có thể khai báo là unsigned char Mang[] = {0,1,2,3,4,5,6,7,8,9}; không cần khai báo số phần tử.
                Đối với cái này thì chưa có đèn nào sáng cả mà mình phải code để đưa các giá trị của mảng ra Port ví dụ ở đây là Port P1
                Code:
                unsigned char Mang[10] = {0,1,2,3,4,5,6,7,8,9};
                
                unsigned char x=0;
                while(1)
                {
                	P1=Mang[x%10];// khi x%10 x "chia lấy dư cho" 10 thì các giá trị trả lại có thể có là 0,1,2,3,...9
                	// trường hợp này bạn đưa ra mảng hơi đặc biệt nên rất dễ gây nhầm lẫn thay đổi lại giá trị của mảng Mang[] bằng các  giá trị khác
                	// để dễ giải thích hơn giả sử ( unsigned char Mang[]={10,15,34,68,32,65,32,76,3, 35}; )
                	// Khi x=0 -> x%10=0; nên P1=Mang[0]; -> P1=10; vì 10 là phần tử thứ 0 của mảng Mang[]
                	// Khi x=1 -> x%10=1; nên P1=Mang[1]; -> P1=15; vì 15 là phần tử thứ 1 của mảng Mang[]
                	// ....................................
                	// Khi x=9 -> x%10=9; nên P1=Mang[9]; -> P1=35; vì 35 là phần tử thứ 9 của mảng Mang[]
                	// Đến x=10 thì lặp lại quá trình như trên
                	x+=1;// Viết ngắn của x=x+1;
                }
                Còn đèn nào sáng thì sẽ giải thích như sau:
                Giả sử khi gán P1=23; bạn mở chương trình máy tính của window ra (bằng cách giữ phím window sau đó đè tiếp phím R rồi nhả cả 2 phím ra có 1 hộp thoại hiện lên bạn gõ calc<enter>)
                bạn vào menu "view" chọn Programer
                sau đó nhập vào máy tính giá trị 23 Xem ảnh nhéClick image for larger version

Name:	calc.png
Views:	1
Size:	4.0 KB
ID:	1379024
                bạn để ý cái vùng màu đỏ gồm có 8 số đó tuơng ứng với các bit nhị phân của giá trị 23 bạn đọc giá trị từ phải sang trái thì nó sẽ tưong ứng với P1.0 -> P1.7 của VDK (vì mình đang dùng PORT 1) nếu bit tuơng ứng nào mang giá trị 1 thì đèn ở vị trí đó sẽ sáng.
                đối với P1=23 thì các đèn ở P1.0, P1.1, P1.2, P1.4 sẽ sáng và sáng đồng loạt luôn. Đối với P1=xxx (các giá trị khác thì cũng tưong tự)

                Comment


                • #23
                  có lẽ em nên học assambly trước đi. vì nó có thể giúp em hiểu đc nguyên lý hoạt động của IC.

                  Comment


                  • #24
                    dạ anh myth coder cho e hỏi là thời gian mini giây mình để bao nhiêu cho chuẩn ạ

                    Comment


                    • #25
                      và code e đã viết lại thành như vầy mà khi mô phỏng chạy nhưng ra mạch thật thì tịt ngòi ạ

                      #include <REGX52.H>
                      #include <stdio.h>
                      #include <string.h>
                      unsigned int i;
                      void delay (unsigned int ms)
                      {
                      for(i=0; i<ms; i++)
                      {
                      }
                      }

                      main()
                      {
                      while(1)
                      {
                      P1=0x01;
                      for(i=0;i<8;i++)
                      P1=P1<<1;// Vi?t ng?n là P1<<=1;
                      delay(500);
                      }
                      }

                      Comment


                      • #26
                        Code:
                        #include <REGX52.H>
                        
                        void delay (unsigned int ms)
                        { 
                        unsigned int x,i;
                        for(i=0; i<ms; i++)
                        	{
                                        for(x=0;x<1000;x++);     
                        	}
                        }
                        
                        main()
                        {    
                                unsigned int i;
                                while(1)
                                {
                                          P1=0x01;
                                         for(i=0;i<8;i++) 
                                         {     
                                                 P1=P1<<1;// Vi?t ng?n là P1<<=1;
                                                 delay(500);
                                         }
                                }
                        }
                        bạn thử code này nhé.
                        bạn thêm biến i như vầy nhé
                        Last edited by dt3k4; 20-05-2013, 20:49.

                        Comment


                        • #27
                          Nguyên văn bởi dt3k4 Xem bài viết
                          Code:
                          #include <REGX52.H>
                          
                          void delay (unsigned int ms)
                          { 
                          unsigned int x,i;
                          for(i=0; i<ms; i++)
                          	{
                                          for(x=0;x<1000;x++);     
                          	}
                          }
                          
                          main()
                          {
                                  while(1)
                                  {
                                            P1=0x01;
                                           for(i=0;i<8;i++) 
                                           {     
                                                   P1=P1<<1;// Vi?t ng?n là P1<<=1;
                                                   delay(500);
                                           }
                                  }
                          }
                          bạn thử code này nhé.
                          lỗi anh ạ
                          Build target 'Target 1'
                          compiling man.c...
                          MAN.C(17): error C202: 'i': undefined identifier
                          Target not created

                          Comment


                          • #28
                            Nguyên văn bởi kimman3 Xem bài viết
                            lỗi anh ạ
                            Build target 'Target 1'
                            compiling man.c...
                            MAN.C(17): error C202: 'i': undefined identifier
                            Target not created
                            bạn thêm biến i như mình vừa sửa ở đoạn code trên nhé

                            Comment


                            • #29
                              Nguyên văn bởi dt3k4 Xem bài viết
                              bạn thêm biến i như mình vừa sửa ở đoạn code trên nhé
                              oke e đã xong đã chạy rồi ạ và bây h a có thể chỉ e muốn làm chạy tuần tự từ port0 đến port 3 thì làm sao ạ chạy xong led đó lại sáng ví dụ thế này cho a dễ hiểu nè chỉ cho e cách code như thế nào với loại này :
                              trước khi chạy 00000001
                              sau khi chạy 00000011 rồi tiếp tục cứ thế tăng lên thàh 00000111 tiếp tục lại 00001111 cứ thế đến hết ạ

                              Comment


                              • #30
                                mình làm 1 đoạn tựa theo gợi ý của bạn. ở cổng P1 nhé. đây là dạng thủ công,
                                Code:
                                #include <REGX52.H>
                                
                                void delay (unsigned int ms)
                                { 
                                unsigned int x,i;
                                for(i=0; i<ms; i++)
                                	{
                                                for(x=0;x<1000;x++);     
                                	}
                                }
                                main()
                                {
                                        while(1)
                                        {
                                               P1=0;       // 00000000b
                                               delay(500);
                                               P1=0x01;  // 00000001b
                                               delay(500);
                                               P1=0x03;  // 00000011b
                                               delay(500);
                                               P1=0x07;  // 00000111b
                                               delay(500);
                                               P1=0x0f;   // 00001111b
                                               delay(500);
                                               P1=0xf1;
                                               delay(500);
                                               P1=0xf3;
                                               delay(500);
                                               P1=0xf7;
                                               delay(500);
                                               P1=0xff;
                                               delay(500);
                                        }
                                }

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                • Ng.Phuong.5
                                  Khi in lỗ khoan ra pdf ở Orcad 9.2
                                  bởi Ng.Phuong.5
                                  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.
                                  Không biết có ai sửa được vấn đề này không ạ? Hay đây là mặc định của orcad 9.2 rồi ạ ?
                                  Các cách em xem trên diễn đàn thử rồi nhưng không được ạ...
                                  hôm nay, 19:47
                                • Ng.Phuong.5
                                  Khi 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 ạ.
                                  Không biết...
                                  hôm nay, 19:45
                                • 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 ạ.
                                  Không biết...
                                  hôm nay, 19:45
                                • 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 nay, 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 nay, 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 nay, 00:04
                                • 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, 22:44
                                • 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 ạ....
                                  Hôm qua, 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 ....
                                  Hôm qua, 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 .
                                  Hôm qua, 15:28
                                Đang tải...
                                X