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

  • Các bạn giúp mình với !!
    Mình cũng đang phải học về 8051 và phải lập trình trên 8051 để điều khiển các đèn LED và phải viết bằng hợp ngữ.Các bạn hướng dẫn cho mình với.
    Mong các bạn trả lời mình.Cảm ơn các bạn trước.

    Comment


    • Muốn viết bằng hợp ngữ thì bạn phải học tập lệnh và phải học sơ qua về cấu trúc của con 8051 đã rồi làm gì thì làm. Tìm file tài liệu học VDK cho người mới bắt đầu của đại hiệp Blackmoon về đọc là dễ hiểu nhất. Trong đây nè:
      http://dientuvietnam.net/forums/showthread.php?t=2962
      Sau đó đọc cuốn của Tống Văn On mới hiểu được trong đó viết gì. Và nếu đọc được tiếng Anh thì đọc datasheet của một con thuộc họ 8051(VD: 89S52) là đầy đủ nhất.
      Chúc bạn thành công

      Comment


      • Nguyên văn bởi vadu2110 Xem bài viết
        Bác nào biết chỗ nào bán KIT nạp Vi xử lý chỉ giùm em với ?
        Địa chỉ của em là: vandung_entertainment@yahoo.com.vn
        bạn đang ở tỉnh nào?nếu ở tp.hcm thì bạn nên mua ở chỗ nào uy tín và chất lượng đó. Mình nghĩ mua ở TME ( Thiên Minh Elec) thì được rồi. Chứ ra mua ngoài chợ mình nghĩ mất công lắm vì chất lượng hên xui thui. Mình đã mua 1 cái ở Nhật tảo mà phải chạy đi chạy lại để đổi mà vẫn nạp không được ( mạch nạp sử dụng nguồn USB) cuối cùng phải mua loại cũ
        Bảo trọng!!!!!!

        Comment


        • Nguyên văn bởi quynh Xem bài viết
          Các bạn thân mến!
          Vào các diễn đàn tui thấy số người hỏi về 8051 khá nhiều, đa số họ toàn là những người lần đầu tiên tiếp xúc với 8051.Vì vậy tui mạo muội mở topic này để giúp đỡ những người mới tiếp xúc với 8051.Thực ra tui cũng mới làm wen với 8051 thôi, nhưng thiết nghĩ ít ra thì cũng giúp chút gì nho nhỏ cho người mới học 8051.
          Đối với những người mới học, theo tôi đây là những vd cụ thể, rõ ràng giúp bạn nắm bắt nhanh nhất về phần cứng, các tính năng của 8051,lập trình, còn những đã học qua 8051 rất mong dc sự góp ý của các bạn, để tui, bạn, tất cả chúng ta cùng tiến bộ.
          bác quynh giới thiệu về giao tiếp nối tiếp đi. tui thấy cái này cũng rắc rối quá, nhiều người làm thấy dễ dàng quá, còn tui làm mà chạy hoài kkhông xong
          tks

          Comment


          • các bạn cho mình hỏi về ngắt 1 chút, khi ta đang thực thi chương trình ngắt (giả sử ngắt ngoài 1) mà điều kiện ngắt lại xảy ra nữa thì VDK sẽ bắt đầu lại chương trình ngắt ngoài 1 hay là tiếp tục thực hiện công việc? mình có viết chương trình để test thử như sau.
            .......
            int1:
            cpl p0.0
            jmp $
            reti
            .......
            và kết quả là khi kích vào ngắt ngoài 1 thì trạng thái chân p0.0 không thay đổi.

            cũng tương tự như vậy nhưng mình thử với ngắt nối tiếp
            ........
            serial:
            clr ri
            cpl p0.0
            jmp $
            reti
            ........
            kết quả là khi có tín hiệu ở ngắt nối tiếp thì p0.0 sẽ đảo trạng thái

            mong các bạn chỉ giáo thêm.

            Comment


            • Nguyên văn bởi newbite Xem bài viết
              bác quynh giới thiệu về giao tiếp nối tiếp đi. tui thấy cái này cũng rắc rối quá, nhiều người làm thấy dễ dàng quá, còn tui làm mà chạy hoài kkhông xong
              tks
              cái này cũng không khó lắm đâu bạn. để thực hiện việc này bạn phải viết chương trình giao tiếp trên VDK,và trên PC (trên pc bạn có thể viết bằng C hoặc VB, chú ý là C sẽ truyền về mã ASCII,còn VB thì bạn có thể chọn kiểu binary,cái này thì bác Ngô Hải Bắc có nói rất là kĩ rồi)

              chương trình trên VDK bạn có thể viết đơn giản như sau:

              $mod51
              org 0h

              main:
              mov a,pcon
              clr acc.7
              mov pcon,a
              mov th1,#0f4h ;2400
              mov tl1,#0f4h
              mov tmod,#20h
              mov tcon,#40h
              mov scon,#50h

              loop:
              jnb ri,$
              clr ri
              mov a,sbuf
              mov p0,a
              jmp loop
              end


              khi có tín hiệu truyền từ cổng com thì VDK sẽ xuất giá trị ra P0.bạn có thể dựa vào đây mà viết cái cao siêu hơn. chúc bạn thành công

              Comment


              • danh cho nguoi moi tim hieu vi dieu khien

                Chao anh Quynh cung nhu cac anh dang huong dan cho nhung nguoi moi lam quen lap trinh Keil cho vi dieu khien,cac loat bai vua roi cac anh huong dan that la bo ich cho tui em,cac anh hay tiep tuc duy tri de tai nay nha.Sau khi quet toi led 7 doan roi cac anh tiep tuc huong dan tui em toi phan phim nhan va ma tran phim cung LCD,em doi hoai ma chua thay anh nap Pót bai moi len ca,cac doan code mong cac anh giai thich chi tiet dum tui em voi,tu de den kho nha cac anh,nhieu khi cac anh viet cao qua tui em theo ko kip .Mong cac anh tiep tuc huong dan
                |

                Comment


                • --------------------------------------------------------------------------------

                  khi tôi dung keilc chèn thử asm vào thì nó cứ cảnh báo và không chay được

                  #include "intrins.h"
                  #include <regx51.h>
                  //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                  void delay_s(unsigned int aaaaaaaaaa,cccccccccc)
                  {
                  aaaaaaaaaa=aaaaaaaaaa*1000;
                  while(aaaaaaaaaa--){
                  unsigned char bbbbbbbbbb = 10*cccccccccc;
                  while(bbbbbbbbbb--);
                  }
                  }
                  //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx
                  void main(void)
                  {
                  P3=0;
                  _nop_();
                  while(1)
                  {
                  P0=P1;
                  P2_0=~P2_0;
                  P3++;
                  delay_s(2,12);
                  P2_1=!P2_1;
                  #pragma asm
                  mov 70h,#0fh
                  nop
                  #pragma endasm
                  }
                  }

                  cảnh báo như sau

                  Build target 'Target 1'
                  compiling dd.c...
                  assembling dd.src...
                  linking...
                  *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
                  SYMBOL: ?C?IMUL
                  MODULE: dd.obj (DD)
                  *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
                  SYMBOL: ?C_STARTUP
                  MODULE: dd.obj (DD)
                  *** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
                  SYMBOL: ?C?IMUL
                  MODULE: dd.obj (DD)
                  ADDRESS: 0009H
                  Program Size: data=9.0 xdata=0 code=68
                  "dd" - 0 Error(s), 3 Warning(s).
                  |

                  Comment


                  • Nguyên văn bởi phong25_2 Xem bài viết
                    các bạn cho mình hỏi về ngắt 1 chút, khi ta đang thực thi chương trình ngắt (giả sử ngắt ngoài 1) mà điều kiện ngắt lại xảy ra nữa thì VDK sẽ bắt đầu lại chương trình ngắt ngoài 1 hay là tiếp tục thực hiện công việc? mình có viết chương trình để test thử như sau.
                    .......
                    int1:
                    cpl p0.0
                    jmp $
                    reti
                    .......
                    và kết quả là khi kích vào ngắt ngoài 1 thì trạng thái chân p0.0 không thay đổi.

                    cũng tương tự như vậy nhưng mình thử với ngắt nối tiếp
                    ........
                    serial:
                    clr ri
                    cpl p0.0
                    jmp $
                    reti
                    ........
                    kết quả là khi có tín hiệu ở ngắt nối tiếp thì p0.0 sẽ đảo trạng thái

                    mong các bạn chỉ giáo thêm.
                    Theo mình biết thì khi chtrình đang thực hiện 1 ngắt mà tiếp tục xảy ra 1 ngắt nữa thì nó sẽ nhảy tới ngắt đó (nếu ngắt này có mức ưu tiên cao hơn), ngược lại sẽ vẫn chạy trong chtrình ngắt cũ
                    chẳng hạn ta đang xlí ngắt ngoài 1 mà xảy ra ngắt nối tiếp (mức ưu tiên thấp hơn) thì chtrình sẽ chạy xong ngắt ngoài 1 rồi mới chạy tới ngắt nối tiếp.
                    Còn khi đang xlí ngắt ngoài 1 mà xảy ra ngắt ngoài 0 (mức ưu tiên cao hơn) thì chtrình sẽ chạy xong ngắt ngoài 0 rồi mới trở về chạy ngắt ngoài 1
                    Còn khi đang xlí ngắt ngoài 1 mã tiếp tục xảy ra ngắt ngoài 1 nữa thì chtrình sẽ chạy xong ngắt ngoài 1 hiện tại, trở về chtrình chính rồi lại chạy trở lại ngắt ngoài 1
                    Còn khi đang xlí ngắt ngoài 1 mà tiếp tục xảy ra ngắt ngoài 1 nữa nhưng ta o muốn chtrình chạy lại lần nữa thì trước khi thoát ngắt ngoài 1 để trở về chtrình chính ta xoá cờ ngắt ngoài 1.
                    !e

                    Comment


                    • Đúng như bác zemen nói đấy các bác ạ. Trong chương trình xử lý ngắt, ta phải xóa cờ ngắt thì có tín hiệu gây ngắt mới VDK nó mới biết là có ngắt mới mà xử lý. Nếu không thì trong quá trình chạy chương trình, mỗi loại ngắt nó chỉ ngắt một lần thôi.

                      Comment


                      • hoi ve hoat dong cua cac ngat

                        #include<reg52.h>
                        //ham delay
                        //khai bao vi tri ham
                        unsigned char i,j=0x01;
                        void delay();
                        void timer0();
                        void delay(unsigned char ms)
                        {
                        while(ms--)
                        {
                        //IE = 0x81;
                        //cho phep ngat va ngat ngoai 0

                        EA = 1; //ngat canh xuong
                        EX0=1;
                        IP =0x01;
                        IT0 = 1;
                        TMOD = 0x01;
                        TH0 = 0xFC;
                        TL0 = 0x18;
                        TR0=1;
                        while(!TF0);
                        TR0 = 0;
                        TF0 = 0;
                        }
                        }
                        //ham ngat
                        void timer_0(void)interrupt 0 using 0
                        {
                        for(i=0;i<=8;i++)
                        {
                        P0 = j<<i;
                        delay(100);
                        }

                        }
                        //ham main
                        void main (void)
                        {
                        while(1)
                        {
                        P2 = 0xff;
                        delay(255);
                        P2 = 0x00;
                        delay(255);

                        }

                        }
                        Cho em hoi co phai sau khi thuc hien xong chuong trinh ngat thi tiep tuc lai tro ve chuong trinh chinh hay ko,va tiep tuc doi ngat tiep theo.Doan code tren la dang thuc hien P2 nhap nhay,khi co ngat ngoai_0 xay ra thi P0 dich led tu phai sang trai,roi tiep tuc tro ve chuong trinh chinh la P2 nhap nhay.Nhung em gap van de la sau khi thuc hien xong ngat thi chuogn trinh lai dung luon va ko quay ve chuong trinh chinh Mong cac anh giup do
                        |

                        Comment


                        • em là thành viên mới ,em thấy bài viết của bác quả là bổ ích .đặc biệt là với những người mới làm quen với vdk như em.

                          Comment


                          • Nguyên văn bởi sun_rise Xem bài viết
                            Đúng như bác zemen nói đấy các bác ạ. Trong chương trình xử lý ngắt, ta phải xóa cờ ngắt thì có tín hiệu gây ngắt mới VDK nó mới biết là có ngắt mới mà xử lý. Nếu không thì trong quá trình chạy chương trình, mỗi loại ngắt nó chỉ ngắt một lần thôi.
                            sun_rise nói như vậy thì chưa đầy đủ cho lắm. "khi một trình phục vụ ngắt được trỏ tới,cờ gây ra ngắt sẽ tự động bị xóa về 0 bởi phần cứng.Các ngoại lệ bao gồm các cờ RI và TI đối với các ngắt do pỏt nối tiếp;TF2 và EXF2 đối với các ngắt do bộ định thời 2.Các nguyên nhân ngắt thuộc 2 ngoại lệ vừa nêu trên do có 2 khà năng tạo ra ngắt nên trong thực tế CPU không xóa cờ ngắt." (trích trang 110_Họ vi điều khiển 8051 của thầy Tống Văn On).

                            Comment


                            • to zemen. theo như những gì bạn nói thì đó chính là ngắt vòng. ngắt nào có mức ưu tiên cao thì sẽ phục vụ ngắt đó trước rồi sau đó mới phục vụ ngắt có mức ưu tiên thấp hơn.tuy nhiên nếu chương trình của ngắt có mức ưu tiên cao chiếm thời gian quá lớn thì sau khi thực hiện xong,VDK sẽ bỏ qua không thực hiện ngắt ưu tiên thấp.
                              vấn đề mà mình hỏi các bạn thì mình cũng tự trả lời được rồi (tuy nhiên gián tiếp cũng nhờ các bạn giúp đỡ.thanks).vấn đề là ở IT0 và IT1.

                              Comment


                              • Hãy giúp mình về tài liệu 8051

                                Trích :
                                ....Nếu ko tìm dc liên hệ với tui, tui send cho.
                                ...Về ngôn ngữ lập trình cho nó, bạn có thể dùng C,asm.Tui ko muốn so sánh 2 ngôn ngữ này, cái này tùy thuộc vào thói quen, sở thích của mỗi ngừơi.Còn tui, tui dùng Kiel C.Phần mền này trên mạng nhiều rùi, ao thích tui send cho...

                                Mình cảm ơn trước nha. Mình đã tìm tài liệu về 8051 như Quynh đã nói nhưng không thấy.Quỳnh có thể send cho mình không?.Còn chương trình dịch VXL thì mình thường dùng asm thôi, ma nghe nói chương trình này là tự viết của các thầy cô mà, nên cũng khó tìm đấy...

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X