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

  • còn một vấn đề nữa mấy bác giải thích giùm em nha

    em có đoạn chương trình như sau:

    Code:
    void main()
    {
        char i = 5;
        P1 = 0xFF;
        delay(50);
        P1 = 0x1;
        while(i--)        //chỗ khó hiểu là ở đây nè mấy bác
        {
            delay(10);    //delay khoảng 0,3 giây
            P1 = 0xF0;;
            delay(10);
            P1 = 0x0F;
        }
    while(1){}
    }//main
    nhưng ko hiểu sao đoạn vòng lặp
    Code:
    while(i--)        //kieu 2
        {
            delay(10);
            P1 = 0xF0;;
            delay(10);
            P1 = 0x0F;
        }
    lại là vòng lặp vô tận, tức là 4 đèn thay phiên nhau chớp liên tục. đủng ra là khi i = 0 thì đèn sẽ ko chớp nữa và 4 led mắc ở P4-P7 phải sáng.
    8 led mắc vào 8 chân của P1 89C51.

    em chạy mô phỏng bằng Protues.

    bác pro nào chỉ bảo em được ko ạ
    Last edited by ttyanhtu; 14-04-2009, 23:25. Lý do: sửa code

    Comment


    • em mới làm quen với kiel, nên bị tắc ngay từ đâu, các bác làm ơn cho em hỏi, em xài con vi điều khiển P89V51RB2FN em lục mãi trong INCLUDE mà cung ko thấy file header nào của nó cả, em có thể add file nào khác được ạ

      Comment


      • Mình mới tập tọe với keil C, mà khi gõ chạy xong rùi, báo không có lỗi, nhưng khi debug thì nó báo lỗi: EVALUATION VERSION running with code size limit : 2k, khi nhấp vào lỗi đó thì nó hiện ra cái bảng thông báo sau: Error:this old version of "S8051.DLL" is incompatible with uVision (UV3.exe) , bác nào biết sửa thì chỉ mình nha, thanks nhiều. 1 bác nói là software của mình chỉ hỗ trợ dưới 2k nhưng cái mình mới có mấy dòng, chương trình led nháy đơn giản sao nó đã báo lỗi vậy rùi

        Comment


        • Nguyên văn bởi ttyanhtu Xem bài viết
          còn một vấn đề nữa mấy bác giải thích giùm em nha

          em có đoạn chương trình như sau:

          Code:
          void main()
          {
              char i = 5;
              P1 = 0xFF;
              delay(50);
              P1 = 0x1;
              while(i--)        //chỗ khó hiểu là ở đây nè mấy bác
              {
                  delay(10);    //delay khoảng 0,3 giây
                  P1 = 0xF0;;
                  delay(10);
                  P1 = 0x0F;
              }
          while(1){}
          }//main
          nhưng ko hiểu sao đoạn vòng lặp
          Code:
          while(i--)        //kieu 2
              {
                  delay(10);
                  P1 = 0xF0;;
                  delay(10);
                  P1 = 0x0F;
              }
          lại là vòng lặp vô tận, tức là 4 đèn thay phiên nhau chớp liên tục. đủng ra là khi i = 0 thì đèn sẽ ko chớp nữa và 4 led mắc ở P4-P7 phải sáng.
          8 led mắc vào 8 chân của P1 89C51.

          em chạy mô phỏng bằng Protues.

          bác pro nào chỉ bảo em được ko ạ
          bộ u tửong khi i = 0 thì i ko giảm dc nữa hả ?
          do đó , ct trên có thể viết lại

          Code:
          void main()
          {
              
              P1 = 0xFF; // tat het led luc RST
              while(1)       
              {
                  delay(10);  
                  P1 = 0xF0;
                  delay(10);
                  P1 = 0x0F;
              }
          }
          Last edited by Zz_Bi_zZ; 16-04-2009, 14:18.

          Comment


          • Nguyên văn bởi ttyanhtu Xem bài viết
            còn một vấn đề nữa mấy bác giải thích giùm em nha

            em có đoạn chương trình như sau:

            Code:
            void main()
            {
                char i = 5;
                P1 = 0xFF;
                delay(50);
                P1 = 0x1;
                while(i--)        //chỗ khó hiểu là ở đây nè mấy bác
                {
                    delay(10);    //delay khoảng 0,3 giây
                    P1 = 0xF0;;
                    delay(10);
                    P1 = 0x0F;
                }
            while(1){}
            }//main
            nhưng ko hiểu sao đoạn vòng lặp
            Code:
            while(i--)        //kieu 2
                {
                    delay(10);
                    P1 = 0xF0;;
                    delay(10);
                    P1 = 0x0F;
                }
            lại là vòng lặp vô tận, tức là 4 đèn thay phiên nhau chớp liên tục. đủng ra là khi i = 0 thì đèn sẽ ko chớp nữa và 4 led mắc ở P4-P7 phải sáng.
            8 led mắc vào 8 chân của P1 89C51.

            em chạy mô phỏng bằng Protues.

            bác pro nào chỉ bảo em được ko ạ
            Chắc tại thằng proteus nó hơi ngu chứ đoạn đó lặp vô tận làm sao đc. Chắc chắn dừng khi i=0. Bạn thử tương vào mạch thật xem sao. Đừng chơi mô phỏng mô phẻo làm giề.
            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 rsbe Xem bài viết
              em mới làm quen với kiel, nên bị tắc ngay từ đâu, các bác làm ơn cho em hỏi, em xài con vi điều khiển P89V51RB2FN em lục mãi trong INCLUDE mà cung ko thấy file header nào của nó cả, em có thể add file nào khác được ạ
              địa chỉ chân họ Philip cung giống như họ ATMEL thui , lấy đại <AT89S53.h> đi , sai chỗ nào , đọc datasheet P89V51RB2FN bổ cung chỗ đó

              Comment


              • Nguyên văn bởi Zz_Bi_zZ Xem bài viết
                bộ u tửong khi i = 0 thì i ko giảm dc nữa hả ?
                đố u , sau khi i về 0 , thì giá trị sau đó của nó là bao nhiu ? đừng nói là -1 nghe ...hehehe ....

                do đó , ct trên có thể viết lại

                Code:
                void main()
                {
                    
                    P1 = 0xFF; // tat het led luc RST
                    while(1)       
                    {
                        delay(10);  
                        P1 = 0xF0;
                        delay(10);
                        P1 = 0x0F;
                    }
                }
                chết ,tui quên là vòng lặp while , khi i=0 thì nó thoát , hix ,sr vì chưa đọc kỹ...

                Comment


                • Giúp mình

                  code mình như sau:
                  #include <REGX51.H>
                  #define bat 1
                  #define tat 0
                  sbit led1=P1^0;
                  sbit led2=P1^1;
                  sbit led3=P1^2;
                  sbit led4=P1^3;
                  sbit led5=P1^4;
                  sbit led6=P1^5;
                  sbit led7=P1^6;
                  sbit led8=P1^7;
                  sbit led9=P2^0;
                  sbit led10=P2^1;
                  sbit led11=P2^2;
                  sbit led12=P2^3;
                  sbit led13=P2^4;
                  sbit led14=P2^5;
                  sbit led15=P2^6;
                  sbit led16=P2^7;
                  void tre(long time);
                  void tre(long time)
                  {
                  long n;
                  for(n=0;n<time;n++)
                  {
                  // thoi ngoi cho` vay
                  }
                  }
                  void main ()
                  {
                  long n;
                  while (1)
                  {
                  P1=0x01;
                  tre(5000);
                  P2=0x01;
                  tre(5000);
                  for (n=0;n<8;n++)
                  {
                  P1=P1>>1;
                  tre(5000);
                  P2=P2<<1;
                  tre(5000);
                  }
                  P1=0x80;
                  tre(5000);
                  P2=0x80;
                  tre(5000);
                  for (n=0;n<8;n++)
                  {
                  P1=P1<<1;
                  tre(5000);
                  P2=P2>>1;
                  tre(5000);
                  }
                  }
                  }
                  làm sao cho 2 port P1 và P2 cùng chạy (đồng thời) được nhỉ, bác nào giúp mình với, mỉnh chỉ xài được P1 chạy và sau đó là P2 àh. thanks

                  Comment


                  • Nếu bạn muốn 2 port chạy đồng thời thì bạn cho 2 đoạn chường trình vào chường trình ngắt timer 0 và timer 1. Thời gian xảy ra ngắt timer 1 là -50 còn timer 0 là -100, bạn có thể chọn tùy ý, mới vào chương trình bạn cho xảy ra ngắt timer 1 trước.

                    Comment


                    • p89v51rd2

                      Nguyên văn bởi rsbe Xem bài viết
                      em mới làm quen với kiel, nên bị tắc ngay từ đâu, các bác làm ơn cho em hỏi, em xài con vi điều khiển P89V51RB2FN em lục mãi trong INCLUDE mà cung ko thấy file header nào của nó cả, em có thể add file nào khác được ạ
                      Hi!
                      U có thể tạo thư viện cho nó bằng cách chép file này <#include ''p89v51rx2.h>vào thư mục //keilC/Phillip/INC//.U có thể tải file đó về tại đây.
                      http://www.dientuvietnam.net/forums/showthread.php?t=1163&page=31[/URL]

                      Comment


                      • các bạn ơi cho mình hỏi. theo mình biết thì trong keilC thì có một số hàm hỗ trợ còn 1 số hàm thì không được hỗ trợ trong thư viện.vậy làm sao mình biết thư viện đã hỗ trợ hàm nào để dùng còn hàm nào không hỗ trợ phải tự viết.ví dụ như trong file "stdio.h" thì mình thấy có nhiều hàm mình ko biết hàm nào mình phải tự viết hàm nào dùng.ví như hàm putchar() phải tự viết trong khi puts() lại dùng mà ko phải viết lại.

                        Comment


                        • Theo mình thì bạn nên viết lại các hàm đó.Vì hàm địa phương (hàm mà mình tự viết) thì dùng thuận tiện hơn nhiều.Khi bạn viết xong bạn có thể lưu nó vào thư viện luc nào cần thì lấy ra dùng.
                          Chúc zui ze.

                          Comment


                          • đúng như bạn nói.nhưng với những hàm đơn giản thì mình có thể tự viết được nhưng với những hàm phức tạp thì mính pó tay.dù sao cũng ghi nhận ý kiến của bạn.

                            Comment


                            • Nguyên văn bởi VNarmy Xem bài viết
                              Chắc tại thằng proteus nó hơi ngu chứ đoạn đó lặp vô tận làm sao đc. Chắc chắn dừng khi i=0. Bạn thử tương vào mạch thật xem sao. Đừng chơi mô phỏng mô phẻo làm giề.
                              Mình nghĩ hay là tại Keil nó dịch file hex sai chứ, mô phỏng có lẽ ko sai đâu bạn, mình thấy có những cái rất là hiển nhiên đúng nhưng mà khi dịch ra file hex thì chạy lung tung ko à, debug cũng vậy, ko biết có nên tin tưởng Keil c ko nữa

                              Comment


                              • Nguyên văn bởi ttyanhtu Xem bài viết
                                Mấy bác cho em hỏi trong C mình viết

                                A = A << 1;

                                có giống với lệnh RL A trong hợp ngữ không.

                                Sao em viết thề này
                                P1 = 0x1; // P1 là Port1 8bit
                                P1 = P1 << 1 thì một vài vòng lặp thì P1 = 0 là sao ạ.

                                mấy bác giải thích giùm em nha, thanks
                                mấy bác giúp em vấn đề trên được ko ạ, xin cảm ơn

                                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