Thông báo

Collapse
No announcement yet.

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

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

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

    hiện tại em dg có 1 đoạn code chương trình và em giải thick cho chương trình đó như thế này mọi người có kinh nghiệm xin chỉ giúp em em giải thick câu lệnh của chương trình ntn có chỗ nào sai hok.và chỗ ????? em chưa hiểu mong ai bjt thì giải thick hộ em chỗ đó với thanks mọi người.đoạn code của em viết cho mạch đếm sản phẩm hiện thị led 7 00>99
    mà mọi người lệnh MOV TMOd,#05h. nếu như em thay bằng MOV TMOD,03h. lệnh có khác gì không.tại lệnh đầu 2 con led bằng 00 mới đúng.sao em sửa lại TMOD,#00h hay TMOD,#03h.TMOD,#05h.thì nó vẫn là chọn 00 ở đầu vậy ?



    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
    Last edited by gonsun; 04-05-2012, 00:25.

  • #2
    hĩ hok có ai ư

    Comment


    • #3
      nó hiện 00 là do thanh ghi TL0 đang có giá trị là 00 đây là thanh ghi lưu giá trị đếm của counter, do chưa có xung tác động nên nó là 00, còn việc TMOD là 05 hay 03 thì em xem lại thanh ghi TMOD của kon 89. Đây là mạch đếm sản phẩm nên timer của em phải khởi tạo ở chế độ counter , em xem lại thì rõ tại sao là 05 thôi.

      Comment


      • #4
        em mới học môn này.đoạn lệnh này là thầy cho về nhà nghiên cứu rùi giải thick.em vẫn chưa hiểu lắm anh giải thick rõ hộ em dc hok.TMOD là 05 hay 03 xem lại TMOD của con 89c51.là sao vậy anh.cái này là gí trị của từng con ic ah

        Comment


        • #5
          tức là kêu em đọc kĩ các bit trong thanh ghi tmod ,thì lúc đó em sẽ biết tại sao lại đưa vào 05, 05 tức là set timer0 sang chế độ counter

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X