Thông báo

Collapse
No announcement yet.

Lớp 1 chưa qua ,lớp 3 đã tới vi điều khiển ATMEL - 8051

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

  • Lớp 1 chưa qua ,lớp 3 đã tới vi điều khiển ATMEL - 8051

    Tôi thấy bạn giaosucan viết về dòng 8051 Philips . Quế Dương cũng mạo muội mở cái topic này để các newbie về vi điều khiển bắt đầu với những chú " giá sinh viên ".
    Hãy bắt đầu từ lớp một rồi tới lớp 3 , đừng như tôi , nhảy lên lớp 3 rút cục mất căn bản . Tôi dần hoàn toàn mù tịt về cái này, bắt đầu học lại cơ bản từ đầu, từ cái nhỏ nhặt nhất : bit ( mong tất cả tận tình chỉ giúp ).
    + Khi bắt đầu học lập trình Vi điều khiển điều đầu tiên bạn phải có công cụ:
    - Để thao tác trên vi điều khiển và có thể làm ra các ứng dụng ta phải đưa chương trình vào trong nó. Chẳng có con vi điều khiển nào chạy được
    có nghĩa mà không phải thông qua lập trình. Vậy thì ta cần nhất là phải có công cụ để lập trình. Công cụ để lập trình là các phần mềm lập trình , sau đó là các trình để biên dịch .Trình biên dịch sẽ dịch các chương trình của bạn ra "mã máy" sau đó mã này được đưa vào chip vi diều khiển thông qua mạch nạp ( hay còn gọi là Programmer ).
    // Mã máy : là ngôn ngữ của phần cứng sử dụng . Một vi điều khiển không bao giờ hiểu được trực tiếp ngôn ngữ của con người mà chỉ hiểu được 2 trạng thái ( 1 và 0 ; có hoặc không ; cao hoặc thấp , tắt hoặc bật...)
    - Có rất nhiều phần mềm để lập trình cũng như cũng có rất nhiều trình biên dịch ( bộ dịch ) . Mỗi phần mềm có ưu khuyết điểm riêng . bạn nên chọn theo một hướng đầu tiên để dễ dàng về sau.
    + Tôi chọn ngôn ngữ C ( chuẩn ansi c) vì theo tôi nó là ngôn ngữ bậc cao, hỗ trợ nhiều tính năng mạnh , câu lệnh và cú pháp rất gần gũi với ngôn ngữ con người. Nhiều người cho rằng ngôn ngữ C khi dịch ra rất tốn nhiều tài nguyên của CHip nhưng theo riêng tôi thì cái này không phải lo lắng bởi với công nghệ hiện nay đã tạo được nhiều chip tích hợp có bộ nhớ lớn nên không đáng ngại.
    // Tôi đã từng học ASM nhưng quả thực nó khó nhớ và khi tìm lại sửa lỗi có khó khăn. Nếu có điều kiện các bạn cứ tham khảo song hành bởi vì đôi khi ngôn ngữ bậc cao có khi cũng không giải quyết được thành ra phải đưa thêm các ngôn ngữ cấp thấp vào ( ví dụ : nhúng , chèn mã ASM vào chương trình C ).
    ( mời các bạn viết tiếp )
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

  • #2
    moi mot ngon ngu no deu co nhung uu nhuoc diem rieng
    Ngon ngu C la ngon ngu bac cao ,co cau truc nen de debug loi
    de doc chuong trinh ,tuy nhien khi bien dich thi dung luong file hex lon
    ma sinh ra nhieu ,ton tai nguyen cua chip .Do do ngon ngu nay phu hop
    khi viet nhung chuong trinh lon ,thuat toan phuc tap
    Ngon ngu ASM la ngon ngu phi cau truc ,tap lenh co tinh goi nho
    ( gan giong ngon ngu STL cho PLC ) ,cho nen kho doc ,kho debug
    loi ,tuy nhien khi bien dich khong sinh nhieu ma ,ko ton tai nguyen cua chip
    , giup nguoi lap trinh hieu sau ve cau truc phan cung cua VDK hon
    moi loai chip lai can mot phan mem bien dich rieng
    8051 : (KEIL C ,READ51)
    AVR avr studio ,code vision avr)
    PIC : css C
    Psoc : con nay dung trinh bien dich gi nhi ,loai chip nay kha moi ,tuy cung chua
    duoc tiep xuc bao gio
    SHARE KHO PHIM LỚN

    Comment


    • #3
      Nếu bước đầu học vi điều khiển thì việc chọn được ngôn ngữ lập trình thực sự quan trọng, ví dụ như tôi trước khi học MSC 8051 tui đã biết về Pascal,C,Basic vì vậy lúc đầu tui nghĩ mình sẽ chọn C để viết cho VDK, nhưng sau khi học một thời gian tui lại nghĩ việc chọn ngôn ngữ lập trình thực sự không quan trọng lắm.
      Ngôn ngữ lập trình là công cụ để người lập trình diễn đạt ý tưởng của mình để giải quyết bài toán, nếu có ý tưởng đúng thì ngôn ngữ nào cũng giống nhau mà thôi, lúc này (tui đang học 8051) tui chọn ASM, về lý do bạn có thể đọc bài viết này của falleaf bên PICVIETNAM, link: http://www.picvietnam.com/download/Vai%20diem%20ve%20vi%20dieu%20khien.pdf
      Cái gì cũng có hai mặt của nó, ASM được cái mã HEX của nó khá ngắn, ví dụ để hiển thị trên led7seg 3 số 123, mã hex tôi viết = ASM (complier: READS51) hơn 110 bytes (hiển thị trên proload) còn chương trình tương tự trên Keil C mất hơn 500 bytes, nhưng chương trình viết bằng C tường minh hơn nhiều, đọc phát hiểu ngay !!! hehe
      Nói như thế không có nghĩa là tui khuyên dùng ASM để giải quyết mọi vấn đề, nên tận dụng ưu điểm của các chương trình dịch khác. Ví dụ viết một cái đồng hồ báo thức cho 89c52 thì tui khuyên viết bằng C, cái này khó mà có thể hơn 8K được, lập trình cho LCD tui lại đề cử BASCOMAVR...
      Tóm lại, bạn thích ngôn ngữ nào bạn dùng cái đó không bó buộc phải dùng ngôn ngữ lập trình nào, quan trọng bạn hiểu bạn đang làm gì.

      Comment


      • #4
        Lập trình LCD dùng keil C cũng ngon mà
        biếu bác motđoạn code demo
        sfr LCDdata = 0x80;
        sbit BF = 0x87;
        sbit RS = P2^2;
        sbit RW = P2^1;
        sbit EN = P2^0;

        void wait(void)
        {
        long n = 0;
        EN=1;
        RS=0;
        RW=1;
        LCDdata=0xFF;
        while(BF){n++; if(n>100) break;}
        EN=0;
        RW=0;

        }

        void LCDcontrol(unsigned char x)
        {
        G_LCD=0;
        EN=1;
        RS=0;
        RW=0;
        LCDdata=x;
        EN=0;
        wait();
        G_LCD=1;

        }

        void LCDinit(void)
        {
        LCDcontrol(0x30);
        LCDcontrol(0x30);
        LCDcontrol(0x30);
        LCDcontrol(0x38);
        LCDcontrol(0x0C);
        LCDcontrol(0x06);
        LCDcontrol(0x01);
        }

        void LCDwrite(unsigned char c)
        {
        G_LCD=0;
        EN=1;
        RS=1;
        RW=0;
        LCDdata=c;
        EN=0;
        wait();
        G_LCD=1;
        }
        void LCDputs(unsigned char *s,unsigned char row)
        {
        unsigned char len;
        if(row==1) LCDcontrol(0x80);
        else LCDcontrol(0xC0);
        len=strlen(s);
        while(len!=0)
        {
        LCDwrite(*s);
        s++;
        len--;
        }
        }

        void LCDwrites(unsigned char d)
        {
        unsigned char i,j;
        i=d%10;
        d=d/10;
        j=d%10;
        d=d/10;
        LCDwrite(48+d);
        LCDwrite(48+j);
        LCDwrite(48+i);
        }
        void LCDwritei(int d)
        {

        unsigned char i,j,k,l;
        i=d%10;
        d=d/10;
        j=d%10;
        d=d/10;
        k=d%10;
        l=d/10;
        LCDwrite(48+l);
        LCDwrite(48+k);
        LCDwrite(48+j);
        LCDwrite(48+i);

        }
        SHARE KHO PHIM LỚN

        Comment


        • #5
          Nguyên văn bởi phamthaihoa
          Nếu bước đầu học vi điều khiển thì việc chọn được ngôn ngữ lập trình thực sự quan trọng, ví dụ như tôi trước khi học MSC 8051 tui đã biết về Pascal,C,Basic vì vậy lúc đầu tui nghĩ mình sẽ chọn C để viết cho VDK, nhưng sau khi học một thời gian tui lại nghĩ việc chọn ngôn ngữ lập trình thực sự không quan trọng lắm.
          Ngôn ngữ lập trình là công cụ để người lập trình diễn đạt ý tưởng của mình để giải quyết bài toán, nếu có ý tưởng đúng thì ngôn ngữ nào cũng giống nhau mà thôi, lúc này (tui đang học 8051) tui chọn ASM, về lý do bạn có thể đọc bài viết này của falleaf bên PICVIETNAM, link: http://www.picvietnam.com/download/Vai%20diem%20ve%20vi%20dieu%20khien.pdf
          Cái gì cũng có hai mặt của nó, ASM được cái mã HEX của nó khá ngắn, ví dụ để hiển thị trên led7seg 3 số 123, mã hex tôi viết = ASM (complier: READS51) hơn 110 bytes (hiển thị trên proload) còn chương trình tương tự trên Keil C mất hơn 500 bytes, nhưng chương trình viết bằng C tường minh hơn nhiều, đọc phát hiểu ngay !!! hehe
          Nói như thế không có nghĩa là tui khuyên dùng ASM để giải quyết mọi vấn đề, nên tận dụng ưu điểm của các chương trình dịch khác. Ví dụ viết một cái đồng hồ báo thức cho 89c52 thì tui khuyên viết bằng C, cái này khó mà có thể hơn 8K được, lập trình cho LCD tui lại đề cử BASCOMAVR...
          Tóm lại, bạn thích ngôn ngữ nào bạn dùng cái đó không bó buộc phải dùng ngôn ngữ lập trình nào, quan trọng bạn hiểu bạn đang làm gì.
          Tôi đồng ý với bác là viết bằng ngôn ngữ nào ko quan trọng cái. Cái quan trọng theo tôi là phải hiểu rõ cấu trúc phần cứng và thuật toán hợp lý.
          Còn bác bảo viết chương trình hiển thị Led7seg 3 số bằng C mất những 500bytes ko biết bác có nhầm không chứ tôi viêt hiển thị động 3 số bằng Keil mất 153bytes (có thể giảm được nữa vì tôi viết để test)
          |

          Comment


          • #6
            Gửi biếu các bạn một đoạn chương trình asm:
            "khó nhớ và khi tìm lại sửa lỗi có khó khăn"
            Last edited by qmk; 24-12-2005, 03:04.
            Vẫn biết mỗi lần xa là một lần về lại...

            Comment


            • #7
              Đoạn trên đầu tiên vào kiểm tra cờ, nếu bit =1 thì nhãy vào kiểm tra, =0 thì thoát, vì không có phím nhấn.
              Dùng R0 lưu lại địa chỉ trước đó. vì trong quá trình làm việc, địa chỉ này có thể bị thay đổi.
              Nếu trong quá trình kiểm tra, mà gặp phím cuối cùng thì thôi, còn nếu như là một phím hợp lệ thì lấy data của phiims đó với địa chỉ như đã lưu trong R0.
              Trước khi thoát cần xóa cờ nhằm lần sau, phát hiện cho phím tiếp theo.
              Theo mình, cách lập trình có hay ở chổ là sau khi kiểm tra phím nhấn xong đồng thời trả lại data của phím đó.
              Giả sử phím số 9, có địa chỉ là 09h, khi trả về ta được nội dung của ô nhớ 09h chính là maled 7 seg luôn, vậy sau khi kiểm tra xong, ta được data 7 seg của phím đó chẳng hạn.
              ;-----------------------------------------------------------------------;
              ; Ngoài lề: Cho hỏi có phải đàn anh: qmk = quenmangkinh đó không !? ;
              ;-----------------------------------------------------------------------;

              Comment


              • #8
                Thất vọng . Đây là đoạn chương trình lấy một sự kiện trong bộ đệm ra thôi. Ghi rất rõ ở phía trên còn gì.

                Công nhận assembler khó học.
                Thế mà mình cứ thích. Đơn giản vì muốn kiểm soát mọi thứ.

                Chỉ muốn nói là nếu tổ chức chương trình tốt thì cũng không đến nỗi.
                Giống như bác gì nói là viết theo sơ đồ giải thuật chẳng hạn.

                Mới ra phiên bản 0.2. (Power of Macro)
                Last edited by qmk; 28-12-2005, 20:52.
                Vẫn biết mỗi lần xa là một lần về lại...

                Comment


                • #9
                  còn gì phải nói nữa: "assembler muôn năm......................"

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X