Thông báo

Collapse
No announcement yet.

lap trinh c cho vi khien

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

  • #46
    Nguyên văn bởi tramhero
    Theo toi, Keil co chuong trinh Debug rat day du, co the chay mo phong xem thoi gian thuc thi cua cac chuong trinh delay la bao nhieu rat chinh xac, khong chi la chuong trinh delay ma cac chuong trinh con ton bao nhieu tthoi gian chung ta cung co the quan sat.
    Thực ra khi dịch thì Keil sẽ dịch ra asm rồi mới dịch ra file hex, nên trong trường hợp chúng ta cần tính chính xác thời gian của các chương trình con hay đoạn chương trình thì ta có thể chèn thêm đoạn mã asm vào. Dĩ nhiên đoạn asm này chúng ta đã tính toán được rồi. Như thế chúng ta có thể chủ động hơn trong quá trình lập trình. Còn nếu không chúng ta vẫn có thể dùng Keil để tính chính xác thời gian được như bác tramhero nói.
    Nhưng chủ động vẫn hơn bị động phải không bác.

    Comment


    • #47
      Cảm ơn anh em đã giúp đỡ.
      Tôi nghĩ trong chương trình đôi lúc cài thêm đoạn asm cũng đơn giản được đôi chút.
      Nhất là trong trường hợp đang học viết bằng C chưa thạo, bí quá thì táng một đoạn asm vào chữa cháy.
      mà cái kiểu chạy mô phỏng trong keil như thế nào hả bác tramhero, bác có thể hướng dẫn thêm được không?

      Comment


      • #48
        chương trình debug hỗ trợ nhiều chế độ
        như chạy từng lệnh hay chạy cả chương trình
        nó cho phép mô phỏng I/0 timer ,counter tính toán thời gian thực
        hiện chương trình ..vv
        bác vào debug chọn start debug chọn go là chay chương trình
        SHARE KHO PHIM LỚN

        Comment


        • #49
          Các bác ơi cho hỏi trong keilc thì sử dụng ngắt như thế nào vậy.Cách khai báo như thế nào. ví dụ như sau:
          void Ex0Isr(void) interrupt 0
          Có phải là ngắt ngoài 0 không? Số 0 để làm gì vậy?
          Và hàm này nữa
          void timer0(void)interrupt 1 using 1 //ngắt bộ định thời 0 bank 1(bank 1hay MODE 1)
          void Ex1Isr(void) interrupt 1 dùng để làm gì vậy Có phải là khai báo ngắt ngoài 1 không?
          Nhờ các bác chỉ dùm một hàm ngắt cơ bản nha.

          bác nào rảnh xem giùm tại hạ chương trình này tại sao không chạy nha
          #include<AT89X51.h>
          unsigned char so[10]={0x40,0xf9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x1 0};
          unsigned char i,j,k,h;
          unsigned char p1,p2,g1,g2;

          void Ex0Isr1(void) interrupt 1
          {
          P1=0x00;
          P0=0x00;
          //for(i=0;i<100;i++);
          }

          void Ex0Isr(void) interrupt 0
          {
          P1=0xff;
          P0=0xff;
          //for(i=0;i<100;i++);
          }

          void main()
          {

          TMOD=0X21; //TIMER0 CHE DO 1,TIMER1 CHE DO 2
          IE=0X8F; // CHO PHEP NGAT CAC NGAT
          IT0=0;
          IT1=0;

          while(1)
          {
          }
          }
          Mò mẫm cả buổi mà khồn hiểu gì hết
          Last edited by led1312; 27-09-2005, 11:25.
          Ai nên khôn mà chẳng dại đôi lần.

          Comment


          • #50
            Các địa chỉ ngắt trong Keil

            Đây là địa chỉ để sử dụng sau từ khóa interupt
            " Con người nhờ có ước mơ mà trở nên vĩ đại"
            -----------------------------------------------

            Comment


            • #51
              Ngắt trong Keil

              bạn cũng có thể sử dụng số ngắt theo ý muốn
              theo bảng dưới đây, kết hợp với sử dụng từ khóa: INTVECTOR
              " Con người nhờ có ước mơ mà trở nên vĩ đại"
              -----------------------------------------------

              Comment


              • #52
                Nguyên văn bởi led1312
                Các bác ơi cho hỏi trong keilc thì sử dụng ngắt như thế nào vậy.Cách khai báo như thế nào. ví dụ như sau:
                void Ex0Isr(void) interrupt 0
                Có phải là ngắt ngoài 0 không? Số 0 để làm gì vậy?
                Và hàm này nữa
                void timer0(void)interrupt 1 using 1 //ngắt bộ định thời 0 bank 1(bank 1hay MODE 1)
                void Ex1Isr(void) interrupt 1 dùng để làm gì vậy Có phải là khai báo ngắt ngoài 1 không?
                Nhờ các bác chỉ dùm một hàm ngắt cơ bản nha.

                bác nào rảnh xem giùm tại hạ chương trình này tại sao không chạy nha
                #include<AT89X51.h>
                unsigned char so[10]={0x40,0xf9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x1 0};
                unsigned char i,j,k,h;
                unsigned char p1,p2,g1,g2;

                void Ex0Isr1(void) interrupt 1
                {
                P1=0x00;
                P0=0x00;
                //for(i=0;i<100;i++);
                }

                void Ex0Isr(void) interrupt 0
                {
                P1=0xff;
                P0=0xff;
                //for(i=0;i<100;i++);
                }

                void main()
                {

                TMOD=0X21; //TIMER0 CHE DO 1,TIMER1 CHE DO 2
                IE=0X8F; // CHO PHEP NGAT CAC NGAT
                IT0=0;
                IT1=0;

                while(1)
                {
                }
                }
                Mò mẫm cả buổi mà khồn hiểu gì hết
                hề hề ,cái interrupt 1 là ngắt timer có phải ngắt ngoài đâu
                còn chương trình của bác dùng dùng đến ngắt ngoài 0 ,1 thì phải khai báo
                số hiệu ngắt là 0 và 2
                còn bác gán cái TMO=0x21 chả hỉu định làm gì
                nếu dùng timer thì phải có lệnh gán TR0=1 để bật timer chứ và nạp giá trị vho th,tl nửa
                SHARE KHO PHIM LỚN

                Comment


                • #53
                  Bác trả lời sớm chút thì tại hạ khỏi phải vò đầu bứt tai rồi.mò mẫm mãi mới ra Sau khi xem lại số hiệu ngắt mới biết mình ngu.Chương trình trên đúng là không chạy được.Cảm ơn bác GSC nha.
                  Ai nên khôn mà chẳng dại đôi lần.

                  Comment


                  • #54
                    minh dinh wet 2 led the nay bang C:
                    #include <regx51.h>
                    unsigned char i;
                    unsigned char j;
                    unsigned char k;
                    const unsigned char Font[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
                    unsigned char a[]={0x00,0x01,0x02};
                    void delay(unsigned char time)
                    {
                    while(time--)
                    {
                    TMOD=0x01;
                    TR0=0;
                    TH0 = 0xFF;// n?p giá tr? cho timer
                    TL0 = 0x66;
                    TF0=0;
                    TR0 = 1; // Ch?y b? d?nh th?i
                    while(!TF0); // ch? khi nào c? TF0 =1
                    }
                    }
                    void goi()
                    {k=k+1;
                    i=k %10;
                    j=k /10;
                    k=0;}

                    void main()
                    {goi();
                    while(1)
                    {
                    P3=a[1];//led2
                    P2=Font[i];
                    delay(150);
                    P3=a[2];//led1
                    P2=Font[j];
                    delay(5);
                    };
                    }
                    Khó nhất trên đời làm trang nam tử
                    Ý chí vững vàng mà tình cảm lại mênh mang

                    Comment


                    • #55
                      Nhưng tại sao nó cung chạy từ 00->99 nhung mỗi lần hiện một số là nó nhấp nháy!
                      mong các bạn sửa chương trình dùm em!
                      Khó nhất trên đời làm trang nam tử
                      Ý chí vững vàng mà tình cảm lại mênh mang

                      Comment


                      • #56
                        không ở trên hàm gọi đặt cuối cùng!
                        Khó nhất trên đời làm trang nam tử
                        Ý chí vững vàng mà tình cảm lại mênh mang

                        Comment


                        • #57
                          Cái này mình đã giai quyet duoc roi!
                          Khó nhất trên đời làm trang nam tử
                          Ý chí vững vàng mà tình cảm lại mênh mang

                          Comment


                          • #58
                            Đây là code sau khi sữa!
                            #include <regx51.h>
                            unsigned char i;
                            unsigned char j;
                            int tg;
                            const unsigned char Font[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
                            unsigned char a[3]={0x01,0x02};

                            void tang()
                            {
                            i=i+1;
                            if (i==10)
                            {j=j+1;
                            i=0;
                            if (j==10) j=0;
                            };
                            }
                            void delay(unsigned int ms)
                            {
                            unsigned int k,l;
                            for (k=0;k<ms;k++)
                            for (l=0;l<120;l++)
                            {};
                            }
                            void main()

                            {while(1)
                            {
                            tg=121;
                            while(tg--)
                            {P3=a[0];
                            P2=Font[i];
                            delay(3);
                            P3=a[1];
                            P2=Font[j] ;//hi?n th? s? 1 trên led 1
                            delay(3);};
                            tang();
                            }
                            }
                            Khó nhất trên đời làm trang nam tử
                            Ý chí vững vàng mà tình cảm lại mênh mang

                            Comment


                            • #59
                              bác giáo sư cần cho mình hỏi một chút. mình lấy cái chương trình LCD của bác sử dụng nhưng mà mình không hiểu ở chổ, LCD có 8 đường dữ liệu, mình không biết khai báo thế nào, dùng Port nào, có phải dòng lệnh sfr LCDdata = 0x80;này không? như vậy nó dùng Port mấy, LCD của mình sử dụng Port0 để gửi dữ liệu đấy. xin bác vui lòng chỉ rõ cho mình, thanks!
                              hãy cố gắng dù vướn phải thất bại!!!!!!!!

                              Comment


                              • #60
                                bác chipmickey có thể gửi datasheet của LCD1602 cho mình được ko?thank...

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X