Thông báo

Collapse
No announcement yet.

[Thắc mắc] Lỗi lập trình Keil C

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

  • [Thắc mắc] Lỗi lập trình Keil C

    Không hiểu sao chương trình em viết như thế này, vậy mà khi biên dịch Keil C lại báo lỗi như thế này, các anh xem giúp em nha, em thử code đơn giản nhất nó cũng báo lỗi giống như vậy
    Click image for larger version

Name:	loi.png
Views:	1
Size:	8.4 KB
ID:	1414526

    đây là code em test thử nhưng vẫn báo lỗi như trên.
    Code:
    	
    #include<at89x51.h>				 
    // Ham Delay
    void delay(int time)
    {    
       while(time--)
            { 
        int temp = 121;   
        while(temp--);   
            }
    }  
    
    void main ()
    {			
        P0=0; 
        P0=P1=P2=P3=0; 
    }


  • #2
    Có cảnh báo chứ ko có lỗi cú pháp gì,ở đây bạn xây dựng hàm delay nhưng ko dùng nên trình dịch nhắc nhở thôi
    vanduc0211@gmail.com

    Comment


    • #3
      Nhưng sao em khi xuất file code này ra file hex, rồi dùng Protues để mô phỏng thì nó không chạy ????
      lẽ ra 4 Port phải chuyển sang mức thấp (0) hết nhưng nó lại ở mức 1 hết...

      em gửi file anh xem giúp em có lỗi gì không ạ !
      http://dl.dropbox.com/u/23155150/Testcode.rar

      Comment


      • #4
        chương trình bị lỗi là đúng rồi chứ gì nữa
        bạn phải thêm 1 dòng lệnh while(1); ngay trước khi kết thúc chương trình

        Comment


        • #5
          Cú pháp thì ko có lỗi,Tại vì bạn ko dùng vòng lặp,hàm delay nên thực hiện chương trên trong vỏn vẹn có vài chục us,mỗi lệnh cách nhau 8us sau đó thì ngừng,bạn chỉ thấy được kết quả cuối cùng là tất cả led sáng thôi(đoạn : P0=P1=P2=P3),thêm while(1) thì chương trình luôn chạy lặp lại,thêm hàm delay nữa để thấy được rõ từng hiệu ứng trong code
          #include<at89x51.h>
          // Ham Delay
          void delay(int time)
          {
          while(time--)
          {
          int temp = 121;
          while(temp--);
          }
          }
          //B?t d?u thân chuong trình luôn này
          void main ()
          {
          while(1)
          {

          P0=0;delay(300); // 8 chân trên c?ng P0 sáng
          P0=P1=P2=P3=0; // 32 chân trên 4 c?ng sáng h?t
          }
          }
          Last edited by viboyth.haui; 11-10-2012, 13:46.
          vanduc0211@gmail.com

          Comment


          • #6
            Em đã thử sữa lại theo các anh, những sao nó vẫn không chạy anh !??
            Nó vẫn cứ có 2 cái cảnh báo:
            Code:
            *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
                SYMBOL:  ?C_START
                MODULE:  STARTUP.obj (?C_STARTUP)
            *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
                SYMBOL:  ?C_START
                MODULE:  STARTUP.obj (?C_STARTUP)
                ADDRESS: 080AH
            Program Size: data=9.0 xdata=0 code=15
            creating hex file from "vidu6"...
            "vidu6" - 0 Error(s), 2 Warning(s).

            Comment


            • #7
              Bó tay với bạn,đoạn code mình post ở trên mình đã thử,ko có lỗi gì,cũng ko có cảnh báo gì cả,chạy đúng.bạn post cái đoạn code mới kia của bạn xem.
              Bạn có thể tham khảo thêm code này của mình,dùng hàm và mảng: led.c
              vanduc0211@gmail.com

              Comment


              • #8
                Nguyên văn bởi viboyth.haui Xem bài viết
                Bó tay với bạn,đoạn code mình post ở trên mình đã thử,ko có lỗi gì,cũng ko có cảnh báo gì cả,chạy đúng.bạn post cái đoạn code mới kia của bạn xem.
                Bạn có thể tham khảo thêm code này của mình,dùng hàm và mảng: led.c
                Cảm ơn anh nhiều nha, em thấy chỗ sai rồi ! hi...mà anh có thể giải thích giúp em cách tính hàm trễ 1s với thạch anh 12MHz là như thế nào anh?

                Comment


                • #9
                  @@ 2 cảnh báo chứ k phải lỗi nhá...cái này xem cách lập trình chứ k phải do phần mềm nhá
                  hình như lỗi bảng mã Unicode..chắc viết có dấu hả.?

                  Comment


                  • #10
                    Nguyên văn bởi tan0710 Xem bài viết
                    @@ 2 cảnh báo chứ k phải lỗi nhá...cái này xem cách lập trình chứ k phải do phần mềm nhá
                    hình như lỗi bảng mã Unicode..chắc viết có dấu hả.?
                    không anh ! em bị lỗi ở bước add file code. mà anh cho em hỏi hàm delay 1s với từng con thạch anh 12MHz, 24MHz ..tính như thế nào ạ ??

                    Comment


                    • #11
                      -Phần chú thích sau dấu "//" thì ko được biên dịch,bạn muốn viết trời đất gì vào đấy cũng được (nhưng chỉ trên 1 dòng đấy thôi)
                      -Cách tình như sau: Thạch anh 12MHz thì tần số của 89xx sẽ bị chia 12 lần còn 1MHz,tức là chu kì máy là 1us,mỗi 1 lệnh (bất kì) thì sẽ mất 8 chu kì,tức là mất 8us
                      mình lấy ví dụ với hàm delay đơn vị 1ms ( delay(1)=1ms )
                      void delay(int ms)
                      {
                      int o,q;
                      for(o=0;0<ms;o++)
                      {
                      for(q=0;q<125;q++)
                      {}
                      }
                      }
                      Mỗi lần lặp của q mất 8 (us),nếu lặp 125 lần sẽ mất 125*8=1000 (us)=1(ms),mỗi vòng lặp của o gồm 125 vòng lặp của q (mất 1(ms)) => có ms vòng lặp của o thì sẽ mất
                      ms (ms) => muốn trễ n (ms) thì gọi hàm : delay(n) ,ví dụ: muốn trễ 1(s)=1000 (ms) thì gọi delay(1000)
                      Tất nhiên bạn có thể xây dựng hàm delay tùy theo ý muốn,tùy vào từng mạch cụ thể với yêu cầu trễ khác nhau mà xây dựng cho phù hợp
                      vanduc0211@gmail.com

                      Comment


                      • #12
                        Nguyên văn bởi viboyth.haui Xem bài viết
                        -Phần chú thích sau dấu "//" thì ko được biên dịch,bạn muốn viết trời đất gì vào đấy cũng được (nhưng chỉ trên 1 dòng đấy thôi)
                        -Cách tình như sau: Thạch anh 12MHz thì tần số của 89xx sẽ bị chia 12 lần còn 1MHz,tức là chu kì máy là 1us,mỗi 1 lệnh (bất kì) thì sẽ mất 8 chu kì,tức là mất 8us
                        mình lấy ví dụ với hàm delay đơn vị 1ms ( delay(1)=1ms )

                        Cảm ơn anh rất nhiều ! em hiểu cách tính rồi !
                        Anh cho em hỏi thư viện "#include<intrins.h>" có chức năng gì anh ?

                        Em có đoạn code sau:
                        Code:
                        void hieu_ung_7(void)
                        {
                        unsigned char M[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,
                        0x80,0x00};
                        unsigned char N[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,
                        0x01,0x00};
                        P0=P1=P2=P3=0xff;
                        for(i=0;i<8;i++)
                        {
                        P0=M[i];
                        delay2(300);
                        }
                        for(i=0;i<8;i++)
                        {
                        P2=N[i];
                        delay2(300);
                        }for(i=0;i<8;i++)
                        {
                        P3=N[i];
                        delay2(300);
                        }for(i=0;i<8;i++)
                        {
                        P1=N[i];
                        delay2(300);
                        }
                        }
                        Có phải code trên gồm 2 mảng M,N khổng anh ??
                        các phần tử "0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,
                        0x80,0x00",....là địa chỉ hay sao ạ?? làm sao biến đổi nó (mã Hex)

                        Comment


                        • #13
                          Bạn phải post đầy đủ code thì mới biết được người ta lấy ra cái gì từ thư viện intrins.h chứ,nhưng theo mình thì có lẽ là chèn cái thư viện này vào để lấy hàm _nop_()
                          hàm này cũng có thể dùng kiểu như hàm trễ,nó sẽ tạm dừng trong 3 chu kì máy
                          Trong code bạn đưa ra thì M,N là 2 mảng,nhưng khai báo trong thân hàm "hieu_ung_7" thì chỉ dùng được trong phạm vi hàm này,nếu muốn dùng được trong cả chương trình thì ko được đặt khai báo chúng trong bất kì hàm nào cả
                          Phần mã code 0x80,0x00,.... thì xem tại đây: http://www.dientuvietnam.net/forums/...11/#post610346
                          vanduc0211@gmail.com

                          Comment


                          • #14
                            Nguyên văn bởi viboyth.haui Xem bài viết
                            Bạn phải post đầy đủ code thì mới biết được người ta lấy ra cái gì từ thư viện intrins.h chứ,nhưng theo mình thì có lẽ là chèn cái thư viện này vào để lấy hàm _nop_()
                            hàm này cũng có thể dùng kiểu như hàm trễ,nó sẽ tạm dừng trong 3 chu kì máy
                            Trong code bạn đưa ra thì M,N là 2 mảng,nhưng khai báo trong thân hàm "hieu_ung_7" thì chỉ dùng được trong phạm vi hàm này,nếu muốn dùng được trong cả chương trình thì ko được đặt khai báo chúng trong bất kì hàm nào cả
                            Phần mã code 0x80,0x00,.... thì xem tại đây: http://www.dientuvietnam.net/forums/...11/#post610346
                            rồi em hiểu luôn !
                            mình có thể lập trình cho ngõ ra sao cho LED sáng với cường độ khác nhau không anh??? (nghĩa là độ sáng của LED ấy)
                            em thấy cái phàn mềm LEDimm làm được điều này hok biết mình có thể lập trình được như thế không anh >?

                            Comment


                            • #15
                              Có thể thay đổi,xem tại đây : http://www.dientuvietnam.net/forums/...den-led-78519/
                              vanduc0211@gmail.com

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X