1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Học lập trình Micro Controller 8051

Chủ đề trong 'Điện - Điện tử - Viễn thông' bởi wayttstar, 17/07/2004.

  1. 1 người đang xem box này (Thành viên: 0, Khách: 1)
  1. wayttstar

    wayttstar Thành viên mới

    Tham gia ngày:
    07/06/2004
    Bài viết:
    357
    Đã được thích:
    0
    Học lập trình Micro Controller 8051

    thấy nhiều người hỏi nên post bài tuto này riêng ra đây cho dễ tìm
    lý do chọn họ vi diều khiển MCS51 để học về lập trình micro controller là vì:
    - dễ học
    - có sẵn, giá rẻ
    - tính năng cũng khá mạnh đủ dùng cho nhiều ứng dụng

    học lập trình ho MCS51 cần có ít nhất như sau:
    lí thuyết: sách HỌ VI ĐIỀU KHIỂN 8051 có bán ở nhà sách nguyễn văn cừ (tiếng việt học cho nó dễ)
    công cụ thực hành: bao gồm phần cứng và phần mềm
    phần mềm: trình biên dịch SIM51. dich từ ngôn ngữ assemble của ho 8051 ra các file.bin hoặc file.hex để nạp vào bộ nhớ chương trình (có trong đĩa chương trình điện tử bán ở nhật tảo. đĩa này gồm rất nhiều chương trình nhưng xem trong list thấy có 8051 là được)
    phần cứng: một board mạch 8051 (tự ráp lấy )
    tất nhiên là cần có máy PC
    sau đó có thể nghiên cứu lí thuyết và bắt tay vào thực hành
    sẽ rất là thú vị
    những người mới bắt đầu sẽ rất bỡ ngỡ với những vấn đề sau:
    - cần ráp một board mạch như thế nào
    - làm thế nào để lập trình, biên dịch, nạp vào board
    tôi sẽ hướng dẫn cách làm đơn giản và nhanh nhất dựa theo kinh nghiệm bản thân:
    - ráp board mạch: họ 8051 gồm 8031, 8051 89c51, 89c52, 89c55. tất cả đều chung một ngôn ngữ assemble. khác nhau là 8051, 8031 thì chay chương trình bộ nhớ ngoài. nghĩa là phải nạp rom. từ 89c51 trở đi thì có thể chạy chương trình ngoài hoặc nạp chương trình ngay trên chip (4k,8k 20k tuơng úng với 3 loai sau). kết luận rút ra là ràp một board mạch dùng 89c51 có sẵn 4k bộ nhớ chương trình bên trong để khỏi phải dùng eprom tốn kém.
    board này chỉ cần 1 số chức năng tối thiểu và cần nhất 1 dãy led để cho ta thấy kết quả khi chạy thử chương trình (hãy chọn một sơ đồ đơn giản trong sách )
    - lập trình, biên dịch, nạp chương trình và ...chạy
    + lập 1 chương trình đơn giản(vd như sáng led 1 lúc rồi tắt...)bằng cách soạn thảo trong note pad hoặc NC và save lại thành file.asm
    + dùng lệnh asm cua sim51 để tạo ra file.obj từ file.asm
    +dùng lệnh oh của sim51 để tạo ra file.hex từ file.obj
    +dùng lệnh hexbin của sim51 để tạo ra file.bin từ file.hex
    + lưu file.bin vào đĩa mềm
    + mang đĩa mềm và ic 89c51 ra nhật tảo để nạp(giá 3 đến 5 nghìn thôi)
    + mang ic 89c51 về cắm vào board. nối nguồn cho chạy thử
    còn nếu muốn tự nạp 89c51 thì làm một board nạp như sau:
    + vào trang web
    http://chaokhun.kmitl.ac.th/~kswichit/easy2/easy2.htm
    có sơ đồ mạch nạp 89c51,89c52,89c55 rất rẻ tiền. down load : 1.chương trình cho 89c51 (EZ52.hex) và 2.chương trình cho PC (EZ uploader v3.1 for windows)
    + vào trang web
    http://chaokhun.kmitl.ac.th/~kswichit/easy2puiu/easyp52.htm
    hướng dẫn cách làm mạch in một mặt cho mạch trên
    + vì lần đầu tiên làm nên vẫn phải đem chương trình cho 89c51(đã dịch sẵn) ra nhật tảo nạp cho 89c51 gốc(master) rồi cắm vào board ở vị trí master
    + sau đó dùng board này để lập trình cho 89c51 khác cắm ở vị trí slave
    tôi đã tự làm board lập trình 89c51 theo hướng dẫn từ 2 trang web đó. mạch chạy rất tốt. có thể ngồi nhà tự nạp chương trình cho 89c51 và tha hồ thực hành
    thông tin thêm: sau khi làm xong mạch nạp này tôi mới tìm thấy 1 thông tin là ở Kim sơn (tp HCM) có bán board mạch in cho bộ nạp này. giá rẻ chỉ 10000 VND (vì họ đã có làm trước). như vậy chỉ cần mua board mạch in này và linh kiện về ráp.
    chúc các bạn thành công
    ( lần sau tôi sẽ nói kĩ về cách dùng chương trình sim51 và sự khác nhau giữa file.bin và file.hex )
    [
    Chương trình sim51 dùng để làm gì?
    Sim51 = simulator 8051 = mô phỏng 8051. nó dùng để tạo ra một 8051 ảo trên PC. Sau khi đã có chương trình viết bằng assemble, ta có thể dùng lệnh sim51 để mô phỏng 8051. chạy thử chương trình đã viết. trong sim51 ta có thể thiết lập nhiều điểm dừng trong khi chạy chương trình. tạI đó chương trình dừng lại và ta có thể kiểm tra giá trị các thanh ghi, bộ nhớ trong, các port của 8051 để xem chương trình có hoạt động đúng ý đồ không. Có thể cho chạy từng lệnh? tóm lạI là đủ các chức năng để có thể kiểm soát hoàn toàn một chương trình chạy trên 8051 ảo. đây chắc chắn là một công cụ tuyệt vờI để học lập trình 8051. nhưng xin báo trước để xài được nó không phảI là quá khó nhưng cũng không phảI ngon ăn đâu.
    Sau khi biết rằng chương trình mình viết ra có thể chạy như thế nào. chắc chắn là bạn muốn thấy một cách cụ thể hơn. tức là chạy trên board mạch thật. muốn thế thì cần biên dịch chương trình assemble ra dạng file.hex hoặc file.bin để nạp vào bộ nhớ chương trình. Đó là các lệnh asm51, oh, hexbin như đã nói ở phần trước. chỉ nói thêm là lệnh asm51 tạo ra các file.obj và file.list từ file. asm. Các file.obj thì dùng để tạo file.bin. còn các file.list thì liệt kê các lỗI cú pháp phát hiện trong khi biên dịch. Như vậy trước khi tạo ra file.bin cần kiểm tra file.list và quay lạI sửa file. asm cho đến khi hết lỗI cú pháp (no error found) thì thôi.
    Trong sim51 còn 1 số lệnh nữa sẽ dùng đến khi dịch các chương trình lớn hơn mà được viết theo kĩ thuật lập trình modul. Ví dụ lệnh RL51. trong sách ?ohọ vi điều khiển 8051? (sách này thực ra là dịch từ cuốn 8051 Micro controller tiếng Anh) bạn sẽ thấy có một chương trình monitor ở cuốI sách. Nó được viết trong 10 modul riêng. Có dạng 10 file.src. sau khi dùng lệnh asm51 để tạo 10 file.obj từ các file.src này(đừng quên sửa lỗI nghe), thì dùng RL51 để xử lí 10 file.obj này thành 1 fileX duy nhất. cuốI cùng mớI dùng lệnh oh để tạo ra file.hex từ fileX đó.(nếu bạn hiểu và làm chạy được chương trình monitor này thì bạn khá siêu rồI đó)
    Chú ý rằng để xử lí 10 file.obj một lần thì nên tạo 1 file.bat để thực thi công việc này. dạng của file.bat này có thể xem trong sách ở trên đầu của file tạo ra sau khi dùng lệnh RL51(Tôi cũng không rõ sách tiếng việt có in khúc này không. ). hãy tìm hiểu và tự tạo 1 file.bat cho mình khi cần thiết.
    Trên đây tôi đã nói về sim51 để các bạn có thể hiểu công dụng của nó và ứng dụng trong khi viết chương trình cho 8051
    hãy bắt tay vào viết 1 chương trình assemble đầu tiên thật đơn giản. debug nó bằng sim51. biên dịch và chạy thử trên board thực tế. nếu bạn biết sử dụng sim51, như vậy là bạn đã biết lập trình 8051.
    File.bin và file.hex khác nhau thế nào?file.bin thì đơn thuần là 0 và 1. còn file.hex thì đã được tạo format thuận tiện để nạp chương trình. Mã máy được chuyển thành dạng số hex, insert thêm địa chỉ vùng bộ nhớ, thêm checksum để kiểm tra khi nạp. còn lí do khác để tạo file.hex nhưng chỉ có thể hiểu khi đã có 1 số kinh nghiệm lập trình
    (lần sau tôi sẽ gửI 1 chương trình assemble đơn giản, phân tích nó và nói về cách học để viết những chương trình phức tạp hơn)


    Căn bản thực hành vi điều khiển 89c51

    Hình 1: sơ đồ mạch điện

    Linh kiện cần thiết:
    IC 89c51
    IC 7805
    TA: thạch anh 12 Mhz
    T1: Transistor
    D1: Led
    C1= c2= 30pF
    C3=10 microF
    R1=r2=r3=10 kOhm
    R4=100 Ohm
    S W: switch
    J1 : jack cắm nguồn DC

    IC 7805 tạo nguồn 5v ổn áp
    TA, c1, c2 tạo clock cho 89c51
    c3, r1 t ạo xung dương để reset 89c51 khi mới mở nguồn
    chân 40 cấp nguồn, chân 20 cấp mass
    Chân 31 nối lên Vcc để 89c51 thực hi ện chương trình bên trong chip
    SW nối vào chân 1 để nhận lệnh điều khiển
    mạch kéo led nối vào chân 2 để hiển thị

    ;chương trình assembler đơn giản cho 89c51
    ;có chức năng đọc vào từ port1.0 (chân 1) và xuất ra port1.1(chân 2)
    ;khi SW nốI lên Vcc thì LED sáng, SW nốI xuống mass thì LED tắt
    org 0000h ; chương trình được đặt từ địa chỉ 0000(số hex)
    ljmp main ; nhảy qua vùng địa chỉ ngắt(chưa sử dụng ở đây)
    ; vùng
    ; địa chỉ ngắt
    ; chưa sử dụng
    main: ; chương trình chính
    mov c, p1.0 ; đọc giá trị bit trên port1.0 vào cờ(flag) C
    mov p1.1,c ; xuất giá trị bit trong cờ C ra port1.1
    sjmp main ; trở lại từ đầu
    end ; kết thúc chương trình

    giảI thích:
    mỗI lệnh viết trên một dòng
    những phần sau dấu ?o;? là chú thích
    bắt đầu bằng khai báo org, kết thúc bằng khai báo end
    chương trình chính bắt đầu từ nhãn ?omain:?(có dấu hai chấm)
    mov là lệnh di chuyển, ở đây chỉ di chuyển 1 bit(tham khảo tập lệnh 89c51)
    cờ C là một bit bên trong 89c51 (tham khảo cấu trúc 89c51)
    ljump là long jump= lệnh nhảy vớI địa chỉ dài(nhảy được xa hơn)
    sjump là short jump= lệnh nhảy vớI địa chỉ ngắn(nhảy gần)
    phảI biên dịch để tạo file mã lệnh nạp cho 89c51
    chương trình trên tương vớI lưu đồ sau:
    hình 2: lưu đồ chương trình

  2. mr_fool

    mr_fool Thành viên mới

    Tham gia ngày:
    14/05/2004
    Bài viết:
    11
    Đã được thích:
    0
    Bài của bác rất thực tế và bổ ích cho nhiều bạn trẻ ham học hỏi! em hoan nghênh bác nhiệt liệt và vote cho bác 1 sao (hạng 5) oké? Tiếp tục phát huy bác nhé!
    Chân thành
  3. wayttstar

    wayttstar Thành viên mới

    Tham gia ngày:
    07/06/2004
    Bài viết:
    357
    Đã được thích:
    0
    cảm ơn bác mr_fool đã động viên khuyến khích. em phấn khởi lắm.
    chắc bác cũng là người ham học hỏi, lại có lòng rộng rãi, hào phóng. em cũng chả tiếc gì bác 5 sao
    winner takes it all

Chia sẻ trang này