Thông báo

Collapse
No announcement yet.

Dành cho người mới tìm hiểu 8051

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

  • #16
    Cảm ơn các bác đã góp ý.
    Như tui đã nói từ đầu, những bài viết này dành cho những người mới toe tham khảo là chủ yếu, cho nên tui chỉ đưa ra cách giải quyết bài toán 1 cách đơn giản và dễ hiểu nhất.Những bài toán trên giải quyết 1 cách gần như thuần phần mềm, tức là bạn chỉ cần biết sơ sơ về sơ đồ chân của 8051, và 1 chút kiến thức về lập trình cũng có thể hiểu được và làm được.Như thế sẽ tạo ra 1 niềm hưng phấn cho các bạn mới học để đi sâu vào tìm hiểu phần cứng của 8051.Tui chỉ sợ mới đầu đã đưa ra cách giải quyết bài toán thiên nhiều về cấu trúc của 8051 thì các bạn sẽ khó hiểu, như thế dễ dấn đến tư tưởng chán nản và rất dễ bỏ cuộc.
    Ko biết cách giải quyết vấn đề của tui như vậy có ổn ko, nhưng đó là kinh nghiệm, kinh nghiệm thật sự của tui trong quá trình làm quen với 8051.Tất nhiên, các bạn có thể đi theo hướng riêng của mình, mà theo bạn là đúng và phù hợp với khả năng của mình, tui ko rập khuôn ai cả, và cũng ko muốn ai rập khuôn theo mình.
    Một bài toán có rất nhiều cách giải quyết khác nhau, cái quan trọng là bạn phải tối ưu hóa được giải giải thuật đó.
    Cũng lưu ý với các bạn mới làm quen với 8051 rằng, sau khi xem và hiểu được sơ sơ cách lập trình cho 8051, thì các bạn phải đặc biệt tìm hiểu kỹ về cấu trúc phần cứng của 8051, các tính năng của nó.Như thế thì bạn mới hiểu được thật sự về 8051 và tận dụng được hết các tính năng của nó.
    Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

    Comment


    • #17
      Nguyên văn bởi Diemkieu
      Sao không có ai thảo luận cùng bạn Quynh vậy? Tui khoái nó lắm nhưng chẳng có một tý kinh nghiệm nào cả. Nhưng tui sẽ có gắng. Cảm ơn bạn đã tạo ra topic này.
      Bạn cho mình địa chỉ email nhé. Mình cần tài liệu "họ vđk 8051" của thầy Tống Văn Ôn lắm đó
      email của mình:anhquynh_dt1_k47@yahoo.com
      Liên hệ với mình nhé, mình sẽ gửi cho bạn ngay.
      Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

      Comment


      • #18
        Hôm nay chúng ta sẽ bàn đến chương trình con nhé.
        Để đơn giản chúng ta sẽ làm lại vd3:8 led chạy đuổi nhau.
        _____________________________
        Code:
        //8 led sang duoi nhau
        //tai 1 thoi diem chi duy nhat 1 led sang
        #include <REGX51.H>
        #define led0 P1_0
        #define led1 P1_1
        #define led2 P1_2
        #define led3 P1_3
        #define led4 P1_4
        #define led5 P1_5
        #define led6 P1_6
        #define led7 P1_7
        #define sang 1
        #define tat 0
        //---------------
        void delay( unsigned int ms )
        {
          unsigned int i,j;
          for (i=0;i<ms;i++)
            for (j=0;j<120;j++)
        	 {} 
        }
        //--------------
        void display_led(unsigned char number)
        {
          
          switch (number)
          {
           
           case 1:
             led0=sang;
        	 led1=led2=led3=led4=led5=led6=led7=tat;
        	 break;
           case 2:
             led1=sang;
        	 led0=led2=led3=led4=led5=led6=led7=tat;
        	 break;
           case 3:
             led2=sang;
        	 led1=led0=led3=led4=led5=led6=led7=tat;
        	 break;
           case 4:
             led3=sang;
        	 led1=led2=led0=led4=led5=led6=led7=tat;
        	 break;
            case 5:
             led4=sang;
        	 led1=led2=led3=led0=led5=led6=led7=tat;
        	 break;
        	case 6:
             led5=sang;
        	 led1=led2=led3=led4=led0=led6=led7=tat;
        	 break;
        	case 7:
             led6=sang;
        	 led1=led2=led3=led4=led5=led0=led7=tat;
        	 break;
        	case 8:
             led7=sang;
        	 led1=led2=led3=led4=led5=led6=led0=tat;
        	  break;
        	
        	 
          }
        }
        main ()
        {
          unsigned char m;
        while(1)
        {
        for (m=0;m<8;m++)
        {display_led(m);delay(1000);}
        }
        }
        _________________________________________
        các bạn thấy ko, nếu dùng chương trình con, trông hàm main rất sáng sủa, dễ đọc.
        Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

        Comment


        • #19
          bây giờ chúng ta mở rộng vd3 1 chút nhé:sau khi sáng từ led0->led7 thì lại quay ngược lại, từ led7->led0.Để làm việc này chúng ta chỉ cần thêm vào 1 vòng lặp for nho nhỏ.Và chương trình đầy dủ sẽ là:
          ________________________
          Code:
          //8 led sang duoi nhau
          //tai 1 thoi diem chi duy nhat 1 led sang
          #include <REGX51.H>
          #define led0 P1_0
          #define led1 P1_1
          #define led2 P1_2
          #define led3 P1_3
          #define led4 P1_4
          #define led5 P1_5
          #define led6 P1_6
          #define led7 P1_7
          #define sang 1
          #define tat 0
          //---------------
          void delay( unsigned int ms )
          {
          unsigned int i,j;
          for (i=0;i<ms;i++)
          for (j=0;j<120;j++)
          {} 
          }
          //--------------
          void display_led(unsigned char number)
          {
          
          switch (number)
          {
          
          case 1:
          led0=sang;
          led1=led2=led3=led4=led5=led6=led7=tat;
          break;
          case 2:
          led1=sang;
          led0=led2=led3=led4=led5=led6=led7=tat;
          break;
          case 3:
          led2=sang;
          led1=led0=led3=led4=led5=led6=led7=tat;
          break;
          case 4:
          led3=sang;
          led1=led2=led0=led4=led5=led6=led7=tat;
          break;
          case 5:
          led4=sang;
          led1=led2=led3=led0=led5=led6=led7=tat;
          break;
          case 6:
          led5=sang;
          led1=led2=led3=led4=led0=led6=led7=tat;
          break;
          case 7:
          led6=sang;
          led1=led2=led3=led4=led5=led0=led7=tat;
          break;
          case 8:
          led7=sang;
          led1=led2=led3=led4=led5=led6=led0=tat;
          break;
          
          
          }
          }
          main ()
          {
          unsigned char m;
          while(1)
          {
          for (m=0;m<8;m++)
          {display_led(m);delay(1000);}
          for (m=6;m>=0;m--)//Ở vòng lặp này m=6, chứ ko phải 7
          {display_led(m);delay(1000);}
          }
          }
          Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

          Comment


          • #20
            Còn rất nhiều cách để điều khiển led nữa, vd như led chạy 2 đầu vào, led chạy theo cặp 2, cặp 3,....Những cái này tương đối dễ.Các bạn tự xây dựng giải thuật và viết chương trình nhé.Sau đó các bạn tổng hợp các chương trình này lại thành 1 chương trình lớn gồm các kiểu hiển thị led xuất hiện lần lượt.Sau này sau khi biết cách giao tiếp với bàn phím, chúng ta sẽ dùng phím để chọn kiểu hiển thị của led.
            Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

            Comment


            • #21
              Đây là quyển sách khá hay về lạp trinh C cho 8051.
              Tui up mãi lên đây ko được.Bạn nào cần thì liên hệ với mình nhé.Quyển này viết bằng tiếng anh, khá cơ bản.Dung lượng gần 5MB
              Last edited by quynh; 05-11-2005, 11:28.
              Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

              Comment


              • #22
                Chác các bác!
                Tui cũng mới học lập trình VDK nên mới chỉ biết sơ sơ về ngôn ngữ lập trình Asembler chứ chưa biết lập trình C. Vì vậy tui mong các bác có ai hiểu rõ lập trình về ASembler thì chỉ giáo giúp tui như bạn Quỳnh thì tôt quá.
                Cám ơn các bác nhiều!

                Comment


                • #23
                  Hôm nay chúng ta sẽ bắt đầu làm quen với led 7 thanh.
                  Những thứ bạn cần thêm:led 7 thanh(Loại Anode chung), 1 con 74ls(hc)47, 7 con điện trở 1K.
                  Có 2 loại led 7 thanh:A chung và K chung.Ta có thể hiểu nôm na rằng thực ra 7 "thanh" này giống như là 7 con led.A chung tức là anode của 7 con led này nối với nhau,còn các chân K thì riêng.Đối với K chung chũng có thể hiểu tương tự như vậy.Ở đây tui dùng A chung, và con giải mã kèm theo nó là 74ls(hc)47, con này có đầu ra là tích cực mức thấp.Nếu bạn dùng Loại led 7 thanh K chung thì ko thể dùng con giải mã 7447 hình như con giải mã đi kèm với loại này là 74147 thì phải??
                  Tuy nhiên bạn cũng có thể ko dùng con 7447 cũng được, có thể nối trực tiếp các chân led 7 thanh vào 8051 cũng ko sao.Nhưng như thế sẽ tốn chân của 8051(mất 7 chân, trong khi đó dùng thêm con 7447 chỉ mất 4 chân), và chương trình cũng dài hơn.Tui khuyên bạn nên dùng thêm con này(giá khoảng 2-3K/1con).
                  Về sơ đồ chân của 74ls47 bạn có thể tham khảo tại:
                  http://pdf.alldatasheet.com/datashee...LD/74LS47.html
                  Rồi, bây giờ bạn nối các chân a->g của led 7 thanh với các chân a->g của 7447, tất nhiên mỗi cặp chân nối với nhau phải thông qua 1 con điện trở 1K.
                  Các chân từ D0->D3 của 7447 (Có tài liệu ký hiệu là A,B,C,D hay Q0->Q3, những ký hiệu này ko quan trọng, bạn chỉ cần lưu ý 1 điểm thứ tự từ trái qua phải của các ký hiệu trên là từ bit"trẻ nhất đến bit "già" nhất) lần lượt với các chân từ P1.0->P1.3 của 8051.
                  Cách thức hiển hị số trên led 7 thanh cực kỳ đơn giản:
                  Số cần hiển thị // D3-D2-D1-D0
                  0 // 0 0 0 0
                  1 // 0 0 0 1
                  2 // 0 0 1 0
                  3 // 0 0 1 1
                  .. ..........
                  Các bạn thấy ko, thực ra số cần hiển thị trên led 7 thanh, chính là giá trị của
                  bộ D3D2D1D0.
                  Bây giờ ta viết chương trình để hiển thị số 5 trên led 7 thanh.
                  trước tiên ta tính:5=4+1=0101, tức là Q3=0,Q2=1,Q1=0,Q0=1, hay với cách ghép nối với 8051 trên thì:P1.3=0,P1.2=1,P1.1=0,P1.0=1.
                  Chương trình được viết cụ thể như sau:
                  _______________________________________
                  #include<regx51.h>
                  main()
                  {
                  P1=0xff;//Đặt tất cả đầu ra lên mức cao
                  P1_3=0;
                  P1_2=1;
                  P1_1=0;
                  P1_0=1;
                  }
                  ____________
                  Hoặc viết gọn hơn là:
                  ______________________
                  #include<regx51.h>
                  main()
                  {
                  P1=0xf5//f5=11110101
                  }
                  Last edited by quynh; 05-11-2005, 18:04.
                  Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

                  Comment


                  • #24
                    Bây giờ chúng ta sẽ viết 1 chương trình để đếm từ 0->9 trên led 7 thanh
                    _________________________
                    #include <REGX51.H>
                    #define Q0 P1_0
                    #define Q1 P1_1
                    #define Q2 P1_2
                    #define Q3 P1_3
                    //========khai bao ham delay(tao ra do tre bang phan mem)
                    void delay(unsigned int ms)
                    {
                    unsigned int i,j;
                    for (i=0; i<ms; i++)
                    { for (j=0; j<120; j++);

                    }
                    }
                    //======== hien thi ra led 7 thanh
                    void display(unsigned char number)
                    {
                    switch (number)
                    {
                    case 0:
                    Q0=Q1=Q2=Q3=0;
                    break;
                    case 1:
                    Q1=Q2=Q3=0;
                    Q0=1;
                    break;
                    case 2:
                    Q1=1;
                    Q0=Q2=Q3=0;
                    break;
                    case 3:
                    Q0=Q1=1;
                    Q2=Q3=0;
                    break;
                    case 4:
                    Q0=Q1=Q3=0;
                    Q2=1;
                    break;
                    case 5:
                    Q1=Q3=0;
                    Q2=Q0=1;
                    break;
                    case 6:
                    Q3=Q0=0;
                    Q2=Q1=1;
                    break;
                    case 7:
                    Q3=0;
                    Q0=Q1=Q2=1;
                    break;
                    case 8:
                    Q3=1;
                    Q0=Q1=Q2=0;
                    break;
                    case 9:
                    Q3=Q0=1;
                    Q1=Q2=0;
                    break;
                    default:Q0=Q1=Q2=Q3=0;break;
                    }
                    }
                    main ()
                    {
                    unsigned charm;
                    while(1)
                    {
                    for (m=0;m<10;m++)
                    { display(m);delay(1000);}
                    }
                    }
                    Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

                    Comment


                    • #25
                      Bạn có thể phát triển các bài toán dùng 1 led 7 thanh để hiện số, đếm số(Đếm xuôi, ngược), hoặc kết hợp nhiều led 7 thanh theo kiểu như vậy.
                      Lúc khác chúng ta sẽ nói đến phương quét nhiều led 7 thanh.
                      Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

                      Comment


                      • #26
                        Quỳnh mở topic này hay quá, cho mình tham gia tí nhé

                        /* Chương trình hiển thị số chạy từ 0->9 trên 8 led 7seg,led anod chung,tích cực mức[0]
                        Hoạt động: -led0 sáng số 0
                        -led0 tắt, led1 sáng số 1....
                        -led6 tắt, led7 sáng số 7 -led7 tắt, led3 sáng số 8
                        -led3 tắt,led4 sáng số 9
                        Kết nối phần cứng:
                        P1:control ; P2:data
                        */


                        #include <AT89x51.h>
                        void delay();
                        void delaytat();
                        unsigned char code ma7[10]={0xc0,0xcf,0x64,0x46,0x4b,0x52,0x58,0xc7,0x40,0x4 2};//data
                        //0 1 2 3 4 5 6 7 8 9
                        //mảng ma7 tùy thuộc vào cách kết nối các pin của led7seg

                        unsigned char code chonled[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//control
                        //0xfe=11111110 => sa'ng led dau tien


                        void main()
                        { char i;
                        while(1) //lặp vô hạn
                        { for(i=0;i<10;i++) //quét từ 0->9 để hiển thị
                        { P2=ma7[i]; // đưa data vào port 2
                        if(i>=8) //từ số 8 ta cho sáng ở led thứ3
                        { delaytat();
                        P1=chonled[i-5];
                        delay();
                        goto again;
                        }

                        P1=chonled[i];//chọn led hiển thị thông qua Port 1
                        delay(); //thời gain sáng
                        again: delaytat();//thời gian tắt
                        }
                        }
                        }


                        void delay() //led sáng trong (8*250*8*250)us
                        { unsigned char i,j;
                        for(i=0;i<250;i++)
                        for(j=0;j<250;j++);
                        }


                        void delaytat() //tắt trong (8*1*125)us
                        { unsigned char i,j;
                        P1=0xff;
                        for(i=0;i<1;i++)
                        for(j=0;j<125;j++);
                        }

                        (giải thuật không hay lám, mong được các bro giúp đỡ)

                        @MicroDuyPhi: Chào anh Phi, lâu ngày không gặp,vẫn khỏe chứ hả

                        Comment


                        • #27
                          chao quynh,ban that la tot do
                          minh cung dang can quyen sach nay do.
                          mong ban hay goi cho minh qua dia chi mail
                          thanh_tung907@yahoo.com
                          minh cam on rat nhieu nhe
                          mong rang cac thanh vien trong dien dan se doan ket,chia se kinh nghiem voi nhung thanh vien khac,va se giup do het minh cho nhung ban dang can tim hieu ve ho VDK.
                          nhan day minh cung xin hoi cac ban,ban nao co mot mach hoan chinh ve lap trinh giao tiep voi may tinh ko,va nguyen ly hoat dong cua no nhu the nao.Do minh moi di vao tim hieu nen cung chua biet.mong rang cac ban hay giup do cho minh nhe
                          minh xin cam on nhieu

                          Comment


                          • #28
                            chao quynh,ban that la tot do
                            minh cung dang can quyen sach nay do.
                            mong ban hay goi cho minh qua dia chi mail
                            thanh_tung907@yahoo.com
                            minh cam on rat nhieu nhe
                            mong rang cac thanh vien trong dien dan se doan ket,chia se kinh nghiem voi nhung thanh vien khac,va se giup do het minh cho nhung ban dang can tim hieu ve ho VDK.
                            nhan day minh cung xin hoi cac ban,ban nao co mot mach hoan chinh ve lap trinh giao tiep voi may tinh ko,va nguyen ly hoat dong cua no nhu the nao.Do minh moi di vao tim hieu nen cung chua biet.mong rang cac ban hay giup do cho minh nhe
                            minh xin cam on nhieu
                            mach don gian thoi,de minh de tim hieu,xin cam on nhe

                            Comment


                            • #29
                              Hôm nay chúng ta lại tiếp tục với led 7 thanh.
                              Đây là sơ đồ chân của led 7 thanh với hình dạng thực tế của nó.
                              Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

                              Comment


                              • #30
                                Hôm nay chúng ta sẽ làm quen với phương pháp quét nhiều led 7 thanh.
                                Có bài toán đặt ra :thiết kế 1 đồng hồ số dùng led 7 thanh.
                                Để giải quyết bài toán trên, tất nhiên có nhiều cách, chúng ta sẽ dùng vdk 8051 như thế nào nhé.
                                Chúng ta sẽ phải dùng 6 led 7 thanh:2 led hiển thị giây, 2 hiển thị phút, 2 hiển thị giờ.

                                Trước hết chúng ta bàn về cách lắp ghép phần cứng:theo như cách lắp led 7 thanh với 8051 như phần trứoc đây thì chúng ta sẽ cần thêm 6 con giải mã 7447, và số chân vdk phải dùng sẽ là 6x4=24 chân.Nều tính về công suất, mối thanh led của led 7 thanh tiêu tốn khoảng 15-20mA, áp khoảng 2-3V-> 6 led 7 thanh cần tối thiểu (7x15mA)x6led=630mA, 6 con giải mã tiêu tốn khoảng 20mAx6=120mA->riêng về phần hiển thị led chúng ta đã ngốn gần 1A.
                                Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                • mèomướp
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi mèomướp
                                  Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                                  hôm nay, 13:11
                                • tuyennhan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi tuyennhan
                                  Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                                  hôm nay, 09:25
                                • tuyennhan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi tuyennhan
                                  Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                                  Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                                  hôm nay, 09:10
                                • Ng.Phuong.5
                                  Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                                  bởi Ng.Phuong.5
                                  Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                                  Mấy con...
                                  Hôm qua, 19:44
                                • viettinh
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi viettinh
                                  Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                                  Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                                  Hôm qua, 18:12
                                • nguyendinhvan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi nguyendinhvan
                                  Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                                  Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                                  Cách đơn giản...
                                  Hôm qua, 00:04
                                • mèomướp
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi mèomướp
                                  Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                                  08-01-2025, 19:02
                                • tuyennhan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi tuyennhan
                                  Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                                  08-01-2025, 15:43
                                • tuyennhan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi tuyennhan
                                  Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                                  08-01-2025, 15:28
                                • mèomướp
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi mèomướp
                                  Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                                  08-01-2025, 11:44
                                Đang tải...
                                X