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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • boyhw
    Thành viên mới
    • Dec 2007
    • 2

    #376
    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

    • hiodong
      Thành viên tích cực
      • Sep 2005
      • 433

      #377
      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

      • Kiên Hoàng
        Thành viên mới
        • Jan 2008
        • 6

        #378
        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

        • Kiên Hoàng
          Thành viên mới
          • Jan 2008
          • 6

          #379
          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

          • phuccuong
            Thành viên mới
            • Nov 2007
            • 3

            #380
            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

            • khachau306
              Thành viên chính thức
              • Dec 2006
              • 34

              #381
              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

              • thu028
                Thành viên mới
                • Jul 2007
                • 3

                #382
                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



                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

                • VNarmy
                  Moderator
                  • Feb 2007
                  • 1413

                  #383
                  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

                  • Kiên Hoàng
                    Thành viên mới
                    • Jan 2008
                    • 6

                    #384
                    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

                    • ngldung
                      Thành viên mới
                      • Oct 2005
                      • 2

                      #385
                      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

                      • VNarmy
                        Moderator
                        • Feb 2007
                        • 1413

                        #386
                        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

                        • trần xuân
                          Thành viên chính thức
                          • Nov 2007
                          • 40

                          #387
                          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

                          • hiodong
                            Thành viên tích cực
                            • Sep 2005
                            • 433

                            #388
                            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

                            • VNarmy
                              Moderator
                              • Feb 2007
                              • 1413

                              #389
                              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

                              • quysatang666
                                Thành viên mới
                                • Feb 2008
                                • 1

                                #390

                                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...