Thông báo

Collapse
No announcement yet.

Hướng dẫn sử dụng Keil C cho lập trình họ 8051

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

  • Hướng dẫn sử dụng Keil C cho lập trình họ 8051

    cái này quá cũ rồi nhưng có nhiều bạn vẫn chưa biết cách dùng, mình tạo chủ đề này dành cho cách bạn chưa biết dùng, các cao thủ vào đóng góp cho đầy đủ nhé

    đầu tiên phải có phần mềm trước:
    http://www.mediafire.com/?7sw5jggf6v2bq0z
    đây là link tải Keil C uV3, khi giải nén ra có 2 file
    nhấp đúp vào c51v805 để tiến hành cài đặt, cái này dễ rồi, chắc ko phải hướng dẫn nữa

    sau khi cài đặt xong, mở Keil C lên, chọn File->license management,

    copy phần CID

    nhấp đúp vào Keil_lic-v3.2_2 rồi thiết lập như hình

    paste CID vào external CID code, chọn generate, rồi copy LIC0

    quay lại license management, paste LIC0 vào ô new license ID code, chọn add LIC, như hình dưới là đúng, nếu ko làm bước này, sẽ bị giới hạn chương trình


    thế là xong phần cài đặt vào ***** Keil C
    để tạo project mới:

    sau đó tìm mục data base chọn Atmel rồi thiết lập như hình

    phải chuột vào Target mục output rồi thiết lập như hình

    chọn File-> New rồi lưu file này dưới tên *.c ví dụ test.c

    phải chuột vào Source group 1 rồi chọn add như hình, bước này để add file test.c vừa tạo vào project

    copy đoạn mã sau vào test.c
    PHP Code:
    #include <REGX51.H>
    #define LED1 P1_0          // định nghĩa LED0 gắn vào P1_0
    #define LED2 P1_1
    void delay_ms(int ms)      // hàm tạo trễ
    {
        
    int i,j;                    // ms,i,j phải cùng kiểu dữ liệu
        
    for(i=0;i<=ms;i++)
        for(
    j=0;j<=120;j++)
        {;}
    }
    void main()
    {
        while(
    1)           // vòng lặp vô hạn
        
    {
            
    LED1 1;   // P1_0 có 5V
            
    LED2 0;   // P1_1 có 0V
            
    delay_ms(500);
            
    LED1 0;   // P1_0 có 0V
            
    LED2 1;  // P1_1 có 5V
            
    delay_ms(500);
        }

    đoạn mã này nhấp nháy 2 led luân phiên nhau, sau khoảng thời gian ~0,5s
    nhấn F7 để biên dịch, sau khi biên dịch mà có báo như hình thì có nghĩa là chương trình ko bị lỗi gì cả (có thể có lỗi về mặt thuật toán nhưng dịch ko báo lỗi)

    quay lại thư mục chứa project vừa tạo, tìm file test.hex, đây là file sẽ nạp vào vi điều khiển.

    chúc các bạn thành công

  • #2
    Bác cho 2 ví dụ về timer và ngắt ngoài đi???thanks
    Quang Nhat
    ---------------------------------------
    Yahoo :quangnhat85ls
    Mail :
    Nhận thiết kế và ép nhựa cho đồ điện tử

    Comment


    • #3
      Ví dụ về timer, ngắt ngoài

      Timer0
      PHP Code:
      ///////////////////////////////////////////////
      // test cac ngat cua ho 89C51   ///////////////
      //  timer                        ///////////////
      //  counter                         ///////////////
      ///////////////////////////////////////////////
      #include <AT89x51.H>
      /*-------------------------test timer1 100Hz of wave------------timer1 mode 1,soft gate, CT1=0---------*/
      //#define     TL    0x77;
      //#define    TH    0xEC;
      //void timer1(void) interrupt 3 {
      //    TR1 = 0;
      //    TL1 = TL;
      //    TH1 = TH;
      //    P1_0=!P1_0;
      //    TF1 = 0;
      //    TR1 = 1;
      //} 
      //void init_timer1()
      //{
      //    EA = 0;
      //    TL1 = TL;
      //    TH1 = TH;
      //    TMOD = 0x11; // che do 16 bit
      //    TR1 = 1;
      //    TF1 = 0;
      //    ET1 = 1;
      //    EA = 1;
      //}
      /*--------------------------test timer0 50Hz of wave-----------timer0 mode 1 soft gate, CT0=0-------*/
      #define TL    0x18;
      #define    TH    0xFC; 
      void timer0(voidinterrupt 1 {
          
      TR0 0;     // dung timer0
          
      TL0 TL;     // nap lai TL
          
      TH0 TH;     // nap lai TH

          
      TF0 0;     // xoa co timer0
          
      TR0 1;     //    khoi dong timer0
          
      P1_0=!P1_0;

      void init_timer0()
      {
          
      EA 0;
          
      TL0 TL;
          
      TH0 TH;
          
      TMOD 0x11// che do 16 bit
          
      TR0 1;     // khoi dong timer0
          
      TF0 0;     // xoa co de bat dau dem
          
      ET0 1;     // enable timer0
          
      EA 1;         // enable tat ca cac ngat
      }
      /*-------------------counter0 mode 1, soft gate, CT0=1-----------------------TEST COUNTER0----------*/
      //    GATE    C/T        M1        M0    ||    GATE    C/T        M1        M0
      //                TIMER1            ||           TIMER0
      // test counter0 input P3_4                    
      //void init_counter0()
      //{
      //    TMOD = 0x05;          //--ACTIVE LOW---
      //    TR0 = 1;
      //}
      /*-------------------counter1 mode 1, soft gate, CT1=1----------------------TEST COUNTER1----------*/                      
      //void init_counter1()      //--ACTIVE LOW---
      //{
      //    TMOD = 0x50;
      //    TR1  = 1;
      //}
      //    GATE    C/T        M1        M0    ||    GATE    C/T        M1        M0
      //                TIMER1            ||           TIMER0
      /*--------------------------------test timer0 mode1, hard gate, CT0=0-------------------------------*/
      //void init_timer0_hardgate()
      //{
      //    TMOD = 0x09;
      //    TL0  = 0xEF;
      //    TH0  = 0xD8;
      //    P3_2 = 0;
      //    ET0  = 1;
      //    EA   = 1;
      //    TR0  = 1;
      //}
      //void timer0_hardgate(void) interrupt 1       /******ACTIVE HIGH*****/
      //{
      //    TL0 = 0xEF;
      //    TH0 = 0xD8;
      //    TF0 = 0;
      //    P0  = ~P0;
      //}
      /*-------------------------------test timer1 mode1,hard gate, CT1=0---------------------------------*/
      //void init_timer1_hardgate()
      //{
      //    TMOD = 0x90;
      //    TL1  = 0xEF;
      //    TH1  = 0xD8;
      //    P3_3 = 0;
      //    ET1  = 1;
      //    EA   = 1;
      //    TR1  = 1;
      //}
      //void timer1_hardgate(void) interrupt 3    /******ACTIVE HIGH*****/
      //{
      //    TL1 = 0xEF;
      //    TH1 = 0xD8;
      //    TF1 = 0;
      //    P0  = ~P0;
      //}
      void main()
      {     
      //    init_timer1();
          
      init_timer0();
      //    init_counter0();
      //    init_counter1();
      //    init_timer0_hardgate();
      //    init_timer1_hardgate();
          
      while(1)
          {

          }

      ví dụ này cũng siêu cơ bản

      chúc thành công

      Comment


      • #4
        ok. bài viết dài quá
        bác cần tối ưu hóa thuật toán đi tí nữa

        Comment


        • #5
          Nguyên văn bởi qhhqnavy Xem bài viết
          ok. bài viết dài quá
          bác cần tối ưu hóa thuật toán đi tí nữa
          bài nào dài hả bạn, timer hay hướng dẫn?
          nếu bạn nói bài timer dài quá, cần tối ưu thuật toán thì bạn cần phải xem lại đấy

          Comment


          • #6
            Tốt, cố gắng phát huy hoasua_2011 nhé.
            Bạn nào có cần hỏi gì thì hãy hỏi ở đây. Người đi trước có kinh nghiệm sẽ giúp người đi sau.

            Email:
            Tel: 0983.497.310

            Comment


            • #7
              cảm ơn bạn nhe! mình mới học vdk nên rất cần tài liệu này.
              Nếu chỉ nhìn vào vẻ bề ngoài của một người thì có lẽ bạn sẽ thất vọng, nhưng nếu bạn nhìn một người theo cách mà bạn mong muốn thì nhất định họ sẽ trở thành người như bạn mong đợi.

              Comment


              • #8
                bạn ơi minh hỏi nhé nếu mình muon lập trình cho port 1 nháy 8 led thì mình làm nhu thế nào , bạn có code nháy nhiều kiểu khách nhau không cho minh với nhé .
                bạn siêu thật đấy

                Comment


                • #9
                  muốn lập trình cho cả port cũng có thể dùng cách đã hướng dẫn, hoặc có thể dùng cách này:
                  giả sử nhấp nháy port1

                  PORT1 = 0xF0;
                  delay_ms(500);
                  PORT1 = 0x0F;
                  delay_ms(500);

                  đoạn mã này xuất ra port1 : 1111 0000 trễ 0,5s 0000 1111 trễ 0,5s

                  Comment


                  • #10
                    minh dung 89s52

                    Comment


                    • #11
                      nếu dùng TMODE se ngat sau 10s thì làm sao hả bạn ???

                      Comment


                      • #12
                        Nguyên văn bởi phongxh Xem bài viết
                        nếu dùng TMODE se ngat sau 10s thì làm sao hả bạn ???
                        người ta ko dùng timer để tạo đỗ trế lớn như thế đâu.

                        Comment


                        • #13
                          Cho em hỏi mình mắc Led như nào để quy định mức 1 là Led tắt,còn mức 0 thì Led sáng vậy,anh cho ví dụ về trễ (delay),cách sử sụng hàm char và int thêm được không?!

                          Comment


                          • #14
                            H em điều khiển 6 đèn . muốn lần lượt 2 đèn sáng cùng một lúc theo thời gian 20 s , 3s , 15s ( yêu cầu chuẩn xác ) thì làm thế nào hả các bác . thạch anh 12mhz điều khiển mức 0.

                            Comment


                            • #15
                              bác có thể nói chi tiết hơn không!

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X