1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

mong mọi người góp ý về lệnh của 1 số chương trình của em,

Thảo luận trong 'ĐỒ ÁN' bắt đầu bởi fermin_t4, 2 Tháng năm 2012.

  1. fermin_t4 New Member

    Số bài viết: 3
    Đã được thích: 0
    Điểm thành tích: 0
    hiện tại em có 1 đoạn code chương trình như sau.em thử giải thick như thế này mong mọi người xem và nhận xét giùm.nếu như có lệnh nào em giải thick có phần hok đúng mong mọi người góp ý và chỉnh sửa giúp em.còn có 1 số câu lệnh phần ???? thì em chưa bjt phải giải thick nó ntn mọi người bjt thì góp ý cho em lun với nha.về sơ đồ giải thuật và code chương trình soa cho hợp lý và phù hợp.tk mọi người nhiều
    DEM SAN PHAM HIEN THI TREN 2 LED

    ORG 000H ; điểm nhập reset hệ thống
    MOV TMOD,#05H ; chọn chế độ định thời 05h = 00000101B, bộ định thời là bộ đếm (counter), chế độ định thời 16 bit
    MOV TH0,#0 ; byte cao của bộ định thời bằng 0 (dùng để lưu giá trị đếm)
    MOV TL0,#0 ; byte thấp của bộ định thời bằng 0 (dung để lưu giá trị đếm)
    CLR TF0 ; xóa cờ TF0
    SETB P3.4 ; cấu hình p3.4 là ngõ vào
    SETB TR0 ; cho timer hoat động
    TD: LCALL HEX_BCD ; gọi chương trình con HEX_BCD
    LCALL BCD_7DOAN ; gọi chương trình con BCD_7DOAN
    LCALL HIEN_THI ; hiện thị ra led
    JMP TD ; khi đếm chạy tới giá trị 99 thì nó sẽ tự chạy lại giá trị ban đầu 00
    ;=====================================================
    HEX_BCD: giải mã HEX sang BCD
    MOV A,TL0 ; sao chép nội dung ô nhớ địa chỉ TL0 vào thanh ghi A
    MOV B,#10 ; nạp giá trị l0 vào thanh ghi B
    DIV AB ; chia số nguyên không dấu 8-bít chứa trong thanh ghi A cho số nguyên không dấu 8-bít chứa trong thanh ghi B
    MOV 10H,B ; sao nội dung của thanh ghi B vào ô nhớ 10H
    MOV B,#10 ; nạp giá trị 10H vào thanh ghi B
    DIV AB ;
    MOV 11H,B ;sao nội dung thanh ghi B vào ô nhớ 11H
    RET
    ;=====================================================
    BCD_7DOAN: giải mã BCD sang mã LED
    MOV DPTR,#500H ; địa chỉ vùng mã 7 đoạn
    MOV R0,#10H ; vị trí hiển thị dữ liệu trong vùng mã
    MOV R1,#20H ;
    BC: MOV A,@R0 ; di chuyển nội dung ô nhớ có địa chỉ chứa trong thanh ghi R0 vào A
    MOVC A,@A+DPTR ; lấy mã hiển thị trong vùng mã theo vị trí
    MOV @R1,A ; di chuyển nội dung thanh ghi A vào ô nhớ có địa chỉ chứa trong R1
    INC R0 ; tăng R0
    INC R1 ; tăng R1
    CJNE R0,#12H,BC ; so sánh nếu R0 = 12 thì quay lại “BC”
    RET
    ;=====================================================
    HIEN_THI:
    MOV R0,#20H ; địa chỉ vùng mã hiển thị
    MOV A,#0FDH ; mã quét
    HT: MOV P0,@R0 ; xuất mã hiển thị
    MOV P2,A ; xuất mã quét
    LCALL DELAY ; gọi lệnh delay
    MOV P2,#0FFH ; tắt led chống lem
    INC R0 ; lấy mã hiển thị kế tiếp
    RL A ; chuyển sang LED kế tiếp
    CJNE A,#0F7H,HT ; kiểm tra đã quét xong chưa
    RET
    ;=====================================================
    DELAY: ; chương trình tạo thời gian trễ 50 us
    MOV 70H,#50 ; nạp giá trị 50 vào ô nhớ thập phân vào ô nhớ 70H
    DJNZ 70H,$ ; giảm ô nhớ 70 đi 1 và nhảy tại chổ nếu 70H chưa bằng 0
    RET

    ORG 500H ; đĩa chỉ lưu mã led 7 đoạn ( 0 => 9)
    DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
    END ; kết thúc




    sơ đồ giải thuật.cái này em chưa bjt lắm chỉ dựa vào chương trình đọc dc và chép lại thử thui mọi người giúp đỡ chỉnh sửa hộ em.cái này em hơi .....:D
    em up hình lên không dc nên đành phải làm kiểu này
    bắt đầu--> nap giá trị đầu bằng 00-->xuất hiện xung chạy qua chân 3.4 thì khởi tạo bộ đếm-->chuyển đổ mã tho và tlo thành mã BCD-->chuyển mã BDC thành mã led 7---->hiển thị giá trị 00 tới 99.nếu >99 thì quay lại giá trị đầu 00
  2. fermin_t4 New Member

    Số bài viết: 3
    Đã được thích: 0
    Điểm thành tích: 0
  3. pro_and_brao Moderator

    Số bài viết: 484
    Đã được thích: 8
    Điểm thành tích: 18
    chương trình viết hơi lộn xộn bạn ạ! bạn ra tiệm photo trong siêu thị trường mình mua quyển TT Vi xử lý của thầy Nguyễn Đình Phú về xem. mấy chương trình này có hết trong đấy.
    ---------------------------------
    DELAY:
    MOV 70H,#50 ;nạp giá trị 50 thập phân vào ô nhớ 70H
    DJNZ 70H,$ ; giảm ô nhớ 70H đi 1 và nhảy tại chổ nếu 70H chưa bằng 0 (không làm gì hết).
    RET
    ----------------------------------
    đay là một chương trình delay trì hoản thời gian thôi bạn!
    chúc vui nhé!
  4. pro_and_brao Moderator

    Số bài viết: 484
    Đã được thích: 8
    Điểm thành tích: 18
    MOV TMOD,#05H ; 00000101B chế độ counter 0 mode 1
    MOV TH0,#0 ; byte cao của bộ định thời bằng 0 (dùng để lưu giá trị đếm)
    MOV TL0,#0 ; byte thấp của bộ định thời bằng 0(dùng để lưu giá trị đếm)
  5. fermin_t4 New Member

    Số bài viết: 3
    Đã được thích: 0
    Điểm thành tích: 0
    cảm ơn anh.hiện tại em vừa sửa lại 1 số chi tiết của bài cũ vì hok dc chuẩn sác cho lắm.và thêm phần của anh nữa.mọi người ai có ý kiến xin góp ý giúp mih nha

Chia sẻ trang này