PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > MPASM

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ...

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 02-09-2010, 11:12 PM   #8
unisa
Đệ tử 2 túi
 
Tham gia ngày: May 2005
Bài gửi: 27
:
hehe, sau một hồi ngồi lọ mọ tìm giải thuật 1 byte Hex sang 3 số BCD không có hoặc có mà đọc không hiểu gì ??? mình đã tự code ngon lành, share lên cho mọi người dùng chung và bug giúp mình, đã test tốt bằng proteus để chế độ xem PIC CPU memory Data để xem kết quả đạt được trong các ô nhớ, kết quả rất tốt

Code:
SOCHIA        EQU        21H
SOBICHIA    EQU        22H
SOBICHIA1    EQU        23H
KQ_TAM        EQU        24H
H_TRAM        EQU        25H
H_CHUC        EQU        26H
H_DV            EQU        27H

MAIN
    MOVLW    0x0AB
    MOVWF    SOCHIA
    CALL    HEX2BCD
    GOTO    $

HEX2BCD
    BCF    STATUS,C
    MOVLW    .100
    MOVWF    SOBICHIA
    MOVLW    .10
    MOVWF    SOBICHIA1
    CLRF    H_TRAM    
    CLRF    H_CHUC
    CLRF    H_DV    
;------ CHIA LAY HANG TRAM -----------------------
CHIA1
    MOVF    SOCHIA,W
    MOVWF    KQ_TAM
    MOVF    SOBICHIA,W
    SUBWF    SOCHIA,F
    BTFSC    STATUS,C
    GOTO    BD_CHIA1
    GOTO    CHIA2
BD_CHIA1
    INCF    H_TRAM,F
    GOTO    CHIA1
;------- CHIA LAY HANG CHUC & HANG DON VI --------
CHIA2
    MOVF    KQ_TAM,W
    MOVWF    H_DV
    MOVF    SOBICHIA1,W
    SUBWF    KQ_TAM,F
    BTFSC    STATUS,C
    GOTO    BD_CHIA2
    RETURN
BD_CHIA2
    INCF    H_CHUC,F
    GOTO    CHIA2

Hướng dẫn sử dụng:

- Nạp giá trị hex cần đổi sang BCD vào biến SOCHIA
- Kết quả sau khi chuyển đổi được lưu vào 3 biến H_TRAM, H_CHUC, H_DV từ đó bạn có thể xuất ra Led 7 đoạn ...

Giải thuật

- PIC không có hàm nhân/chia nên ta sẽ làm phép chia 100, chia 10 từ phép trừ (như hùi học mẫu giáo hay cấp 1 í )
++ giả sử có số chia = 23, số bị chia = 10
- lấy số chia - số bị chia = 23 - 10 = 13, lấy kq gán vào số chia
- thương ban đầu = 0
- thương = thương + 1 = 1
- kiểm tra cờ C trong status, nếu cờ C = 1 thì phép trừ có kết quả dương => tiếp tục lặp lại phép trừ: 13 - 10 = 3
- thương = 1 + 1 = 2
- kiểm tra cờ C, vẫn = 1 do kết quả trừ là dương 3
- tiếp tục trừ, 03 - 10 = F3 (-7), đây là kết quả âm, cờ C = 0 => dừng phép trừ, gán số 3 trước đó vào hàng đơn vị
====> vậy ta có hàng chục = 2, hàng đơn vị = 3

Giải thuật hơi dài nhưng dễ hiểu
unisa vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 04:40 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam