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

                              • mansion123
                                Bật mí những điều ít ai biết về thi công gỗ óc chó
                                bởi mansion123
                                Thi công gỗ óc chó giúp không gian trở nên sang trọng, ấm cúng, gần gũi hơn. Sự kết hợp giữa thẩm mỹ và chất lượng cao của gỗ óc chó chắc chắn sẽ mang lại giá trị lâu dài và làm hài lòng ngay cả những khách hàng khó tính nhất. Vậy đằng
                                ...
                                hôm nay, 16:08
                              • tuyennhan
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi tuyennhan
                                Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                                Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                                hôm nay, 07:44
                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Cám ơn những lời chúc tốt đẹp của em.

                                Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                                Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                                hôm nay, 02:00
                              • nhathung1101
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi nhathung1101
                                Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                                Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                                Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                                Hôm qua, 22:18
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                                Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                                Hôm qua, 14:51
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                                Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                                Hôm qua, 14:39
                              • dinhthuong80
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi dinhthuong80
                                Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                                Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                                Hôm qua, 14:28
                              • bqviet
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi bqviet
                                Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                                21-02-2025, 20:26
                              • mèomướp
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi mèomướp
                                Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                                21-02-2025, 12:32
                              • vi van pham
                                Trả lời cho Tiếng Anh cho người Việt
                                bởi vi van pham
                                Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                                Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                                20-02-2025, 21:31
                              Đang tải...
                              X