Thông báo

Collapse
No announcement yet.

HƯỚNG DẪN LẬP TRÌNH KEIL C CHO 8051-[Chỉ dành post bài hướng dẫn]

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

  • Mấy bạn chỉ giúp mình cái này, mình vừa làm quen với vdk 89v51 nên đọc vài bài mẫu thấy có chỗ chọn cái này(bằng Keil C):
    TH0 = (-1000/256);
    TL0 = (-1000%256);

    có cái lại chọn:
    TH0 = (-1100/256);
    TL0 = (-1100%256);

    cái này là dùng con thạch anh: 12MHz. Mình biết cái này dùng để định thời thằng timer0 nhưng không biết tính toán đổi sao ra đơn vị thời gian rõ ràng.

    Các bạn trả lời giúp mình với. Cảm ơn!

    Comment


    • Nguyên văn bởi khachau306 Xem bài viết
      Các Pro giúp mình với:
      mình muốn viết một đoạn để điều khiển các led sáng dần từ P0_0 ......P3_7 bằng C các bạn thử nghĩ coi mình có thể viết như sau được không nha:
      Ta khai báo một mảng toàn các chân port
      mang [][]={P0_1,P0_2,..............;P0_1,..........,P0_7};
      sau đó dùng vòng for
      for (int i=0;i<4;i++)
      {
      for (j=0;j<8;j++)
      P[i]_[j]=1;
      }
      mình đã làm thử nhưng chắc mình còn chưa biết cái gì đó nên nó báo lỗi, các cao thủ coi có thể làm theo các đó được không vậy nha
      Bạn nên down một số ví dụ về đọc , nhất là topic "Dành cho người mới tìm hiểu 8051" của Quỳnh, viết C cũng loằng ngoằng lắm
      Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....

      Comment


      • Nguyên văn bởi khachau306 Xem bài viết
        Các Pro giúp mình với:
        mình muốn viết một đoạn để điều khiển các led sáng dần từ P0_0 ......P3_7 bằng C các bạn thử nghĩ coi mình có thể viết như sau được không nha:
        Ta khai báo một mảng toàn các chân port
        mang [][]={P0_1,P0_2,..............;P0_1,..........,P0_7};

        mình đã làm thử nhưng chắc mình còn chưa biết cái gì đó nên nó báo lỗi, các cao thủ coi có thể làm theo các đó được không vậy nha
        Bọn mình sẽ giúp bạn làm từng bước STEP by STEP.
        Bạn có biết làm PROTEUS 7.1 không?

        Bạn vẽ hinh này.
        Viết trong KEIL.C51 như sau:

        #include <REGX51.H>
        #define Led P1; //Khai bao den Led noi tai port P1

        void wait (void) { /* wait function */
        ;
        }

        void main (void) {
        unsigned int i; /* Delay var */
        unsigned char j; /* LED var */

        while (1) { /* Loop forever */
        for (j=0x01; j< 0x80; j<<=1) { /* Blink LED 0, 1, 2, 3, 4, 5, 6 */
        P1 = j; /* Output to LED Port P1 */
        for (i = 0; i < 10000; i++) { /* Delay for 10000 Counts */
        wait (); /* call wait function */
        }
        }
        }
        }
        Sau đó piling để tạo ra File.HEX. Nạp cho IC là nháy luôn.Đây là nháy 1 chiều từ trái qua phải.
        Bài tiếp theo là nháy từ trái qua phải rồi lại nháy từ phải qua trái.
        Attached Files

        Comment


        • Bạn viết thêm một đoạn code vào là led nháy 2 chiều.
          Code:
          #include <REGX51.H>
          #define Led P1;
          
          	void wait (void)  {                
            ;                                   
          }
          
          void main (void)  {
            unsigned int i;                   
            unsigned char j;                    
          
            while (1) {                         
              for (j=0x01; j< 0x80; j<<=1)  {   /* Blink LED 0, 1, 2, 3, 4, 5, 6 ,7*/
                P1 = j;                         /* Output to LED Port P1*/
                for (i = 0; i < 10000; i++)  {  /* Delay for 10000 Counts */
                 wait ();                       /* call wait function */
                }
              }
          
              for (j=0x80; j> 0x01; j>>=1)  {   /* Blink LED 7, 6, 5, 4, 3, 2, 1 */
                P1 = j;                         /* Output to LED Port p1 */
                for (i = 0; i < 10000; i++)  {  /* Delay for 10000 Counts */
                 wait ();                       /* call wait function */
                }
              }
            }
          }
          Nếu bạn Nhấn vào chỗ "cám ơn" thì:
          Bài tiếp theo là 16 led nháy tiền, lùi, nháy dâng, nháy tụt..... các kiểu nháy.
          Attached Files
          Last edited by VNarmy; 30-01-2008, 13:23.

          Comment


          • Các ban oi
            Cho minh hoi cai Keil C đó mua ở đâu đó
            mình tìm mãi mà không thấy
            mail: nguyenphuccuong_dh87@yah

            Comment


            • Vô cùng cám ơn bạn Kiên Hoàng mặc dầu không đúng yêu cầu he he
              bạn thử kiểm tra xem bài dưới đây sao mình chạy bị lỗi được không nhé

              Code:
              void main (void)
              {   
                  unsigned char x,y,d,l;
                  unsigned char AA[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
                  while (1)
                  {   P0 = 0x00;
                      P1 = 0x00;
                      P2 = 0x00;
                      P3 = 0x00;
                      for (x=0;x<=3;x++)
                          for (y=0;y<=7;y++)
                          {       
                              if (x==0)
                              P0 = AA[y];
                              if (x==1)
                              P1 = AA[y];
                              if (x==2)
                              P2 = AA[y];
                              if (x==3)
                              P3 = AA[y];
                              delay (1000);
                          } 
                      for (d=3;d>=0;d--)
                          for (l=7;l>=0;l--)
                          {
                              if (d==3)
                              P3 = AA[l];
                              if (d==2)
                              P2 = AA[l];
                              if (d==1)
                              P1 = AA[l];
                              if (d==0)
                              P0 = AA[l];
                              delay (1000);
                          }
                  }
              }
              mình gặp lỗi ở vòng for sau, nếu bỏ vòng for sau thì chạy đúng hoàn toàn, khi dịch không báo lỗi nhưng debug thi nó chạy sai yêu cầu
              Last edited by VNarmy; 30-01-2008, 13:27.

              Comment


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

                Bạn có thể xem chi tiết về cách lập trình, cú pháp, cách thức tại

                http://luckytoki.com/haibac/download...0%20Primer.pdf

                Có lẽ tôi phải viết Toturial về vấn đề này thôi. .
                chào bác! cái link trên die rùi bác à! bác có thể send cho em bản hướng dẫn chi tiết được không?
                Mail của em: Dungtraubket@gmail.com
                cảm ơn bác!

                Comment


                • Nguyên văn bởi khachau306 Xem bài viết
                  Vô cùng cám ơn bạn Kiên Hoàng mặc dầu không đúng yêu cầu he he
                  bạn thử kiểm tra xem bài dưới đây sao mình chạy bị lỗi được không nhé

                  Code:
                  void main (void)
                  {   
                      unsigned char x,y,d,l;
                      unsigned char AA[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
                      while (1)
                      {   P0 = 0x00;
                          P1 = 0x00;
                          P2 = 0x00;
                          P3 = 0x00;
                          for (x=0;x<=3;x++)
                              for (y=0;y<=7;y++)
                              {       
                                  if (x==0)
                                  P0 = AA[y];
                                  if (x==1)
                                  P1 = AA[y];
                                  if (x==2)
                                  P2 = AA[y];
                                  if (x==3)
                                  P3 = AA[y];
                                  delay (1000);
                              } 
                          for (d=3;d>=0;d--)
                              for (l=7;l>=0;l--)
                              {
                                  if (d==3)
                                  P3 = AA[l];
                                  if (d==2)
                                  P2 = AA[l];
                                  if (d==1)
                                  P1 = AA[l];
                                  if (d==0)
                                  P0 = AA[l];
                                  delay (1000);
                              }
                      }
                  }
                  mình gặp lỗi ở vòng for sau, nếu bỏ vòng for sau thì chạy đúng hoàn toàn, khi dịch không báo lỗi nhưng debug thi nó chạy sai yêu cầu
                  Bạn thử đặt biến d l là kiểu char xem nó có báo lỗi không?
                  AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                  Xem thêm tại Online Store ---> Click here
                  Mob: 0982.083.106

                  Comment


                  • Nguyên văn bởi khachau306 Xem bài viết
                    Vô cùng cám ơn bạn Kiên Hoàng mặc dầu không đúng yêu cầu he he
                    bạn thử kiểm tra xem bài dưới đây sao mình chạy bị lỗi được không nhé

                    [/CODE]mình gặp lỗi ở vòng for sau, nếu bỏ vòng for sau thì chạy đúng hoàn toàn, khi dịch không báo lỗi nhưng debug thi nó chạy sai yêu cầu
                    Mình thức đến 1h30 sáng để làm cho bạn đấy...
                    Code: đây
                    Code:
                    #include <REGX51.H>
                     void delay (unsigned int ms)
                     {  unsigned int i;
                         unsigned char j;
                          for(i=0;i<ms;i++)
                           for(j=0;j<30;j++);{}
                       }
                     void main(void)
                    { unsigned int x,y,m,n;
                      unsigned int AA[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
                      unsigned int dd[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
                     while (1)
                    {   
                      P0=P1=P2=P3=0xff;
                       for (x=0;x<=2;x++)
                            for (y=0;y<=7;y++)
                              { if (x==0)P3 = AA[y];
                                if (x==1)P2 = AA[y];
                                if (x==2)P1 = AA[y];
                                delay (1000);}
                      P0=P1=P2=P3=0x00;
                       for (m=0;m<=2;m++)
                          for (n=0;n<=7;n++)
                             { if(m==0)P1 = dd[n];
                               if(m==1)P2 = dd[n];
                               if(m==2)P3 = dd[n];
                               delay (1000);}
                              } 
                    	}
                    Chạy ngon rồi...Ảnh đây.... nhấn nút cám ơn đi....
                    Attached Files
                    Last edited by VNarmy; 31-01-2008, 10:04. Lý do: Vui lòng để đoạn mã chương trình trong tag code

                    Comment


                    • các bạn ơi, cho mình hỏi KEIL C có hỗ trợ lập trình C++ ko??? Đang quen C++, làm bằng C nản lắm.

                      Comment


                      • Nguyên văn bởi ngldung Xem bài viết
                        các bạn ơi, cho mình hỏi KEIL C có hỗ trợ lập trình C++ ko??? Đang quen C++, làm bằng C nản lắm.
                        Viết bằng C thôi.
                        AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                        Xem thêm tại Online Store ---> Click here
                        Mob: 0982.083.106

                        Comment


                        • Nguyên văn bởi khachau306 Xem bài viết
                          Vô cùng cám ơn bạn Kiên Hoàng mặc dầu không đúng yêu cầu he he
                          bạn thử kiểm tra xem bài dưới đây sao mình chạy bị lỗi được không nhé

                          Code:
                          void main (void)
                          {   
                              unsigned char x,y,d,l;
                              unsigned char AA[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
                              while (1)
                          +++++++++++++++++++++++++++++
                                 delay (1000);
                                      }
                              }
                          }
                          mình gặp lỗi ở vòng for sau, nếu bỏ vòng for sau thì chạy đúng hoàn toàn, khi dịch không báo lỗi nhưng debug thi nó chạy sai yêu cầu
                          Bạn thiếu hàm delay......
                          Mình modify hộ bạn đây này.

                          Code:
                          #include <REGX51.H>
                           void delay (unsigned int ms)
                           {  unsigned int i;
                               unsigned char j;
                                for(i=0;i<ms;i++)
                                 for(j=0;j<30;j++);{}
                             }
                           void main (void)
                          {   
                              unsigned char x,y,d,l;
                              unsigned char AA[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
                          	unsigned char A[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
                              while (1)
                              {  P0=P1=P2=P3=0x00;
                                  for (x=0;x<=3;x++)
                                      for (y=0;y<=7;y++)
                                      {       
                                          if (x==0)  P1 = AA[y];
                                          if (x==1)  P2 = AA[y];
                                          if (x==2)  P3 = AA[y];
                                          if (x==3)  P0 = AA[y];
                                          delay (1000);
                                      } 
                                  for (d=0;d<=3;d++)
                                      for (l=0;l<=7;l++)
                                      {
                                          if (d==0)	P0 = A[l];
                                          if (d==1)   P3 = A[l];
                                          if (d==2)   P2 = A[l];
                                          if (d==3)   P1 = A[l];
                                          delay (1000);
                                      }
                              }
                          	}




                          minh gửi cả file.c, HEX, proteu,
                          Attached Files
                          Last edited by VNarmy; 31-01-2008, 12:02.

                          Comment


                          • Nguyên văn bởi hiodong Xem bài viết
                            Tìm ra rồi !
                            trong main :
                            #include <thuvien.h>
                            trong thuvien.h :
                            void abc(void);
                            trong thuvien.c :
                            #include <thuvien.h>
                            void abc(void)
                            {
                            .....
                            }
                            hic, vẫn còn lỗi , làm thế nào dùng đươc biến chung cả trong ct chính và thư viện mà ko báo lỗi nhỉ?
                            vd:

                            trong main.c :
                            #include <thuvien.h>
                            unsigned char xyz
                            trong thuvien.c :
                            #include <thuvien.h>
                            unsigned char xyz
                            Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....

                            Comment


                            • bạn phải dùng từ khóa extern đối với các biến khai báo lại.
                              AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                              Xem thêm tại Online Store ---> Click here
                              Mob: 0982.083.106

                              Comment



                              • em có mạch như hình vẽ bây giờ muốn nó sáng lần lượt 6 nhánh thì phải viết code và nhập vào con chíp có đúng không ah. con chíp này có dễ mua không ah. và làm thế nào để nhập được code vao con chíp
                                thứ 2 em có xem qua topic nói về IC 8951 liệu chíp này có dễ mua không và có dễ làm không. nếu được em sẽ dùng làm phương án 2
                                nói chung là như thế này: em muốn có một hàng bóng LED nhâp nháy sang xuôi ngược hay sóng đều được. sử dụng nguồn 12v ac qui. các anh bảo nên sử dụng phương án nào trong hai phương án trên.
                                nếu được em xin được chỉ giáo bằng điện thoại hoặc qua nick chat quysatang666

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X