MOV R7,A ;R7 = TRAM
MOV A,B ;LAY SO HANG CHUC
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
POP B ;LAY SO HANG DON VI TU STACK
ORL A,B ;KET HOP SO HANG CHUC VA SO HANG DON VI
MOV R6,A ;R6 = CHUC - DON VI
POP B POP ACC RET
;***************************************************
Đổi số nhị phân 16 bit thành mã BCD nén:
o Cơng việc thực hiện tương tự như đối với số nhị phân 8 bit là lần lượt chia giá trị cần chuyển đổi cho 10. Tuy nhiên, cần phải tạo ra một chương trình con thực hiện việc chia số 16 bit cho 10 (vì giá trị cần đổi cho 10. Tuy nhiên, cần phải tạo ra một chương trình con thực hiện việc chia số 16 bit cho 10 (vì giá trị cần đổi lúc này là số 16 bit).
o Chương trình mẫu:
;*************************************************** ;CTC CHUYEN DOI SO BINARY 16 BIT (<= 9999) SANG SO BCD. ;NAME: BIN16TOBCD.
;INPUT: R7,R6 = SO BCD 16 BIT (<= 9999).
;OUTPUT: R7,R6 = SO BCD (NGAN - TRAM - CHUC - DON VI). ;***************************************************
BIN16TOBCD:
PUSH ACC PUSH B
MOV B,#10
ACALL DIV16TO8 ;LAY R7,R6 CHIA CHO 10
PUSH B ;CAT SO HANG DON VI
MOV B,#10
ACALL DIV16TO8 ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG CHUC
MOV B,#10
MOV A,R6
DIV AB ;TIEP TUC CHIA CHO 10
PUSH B ;CAT SO HANG TRAM, ACC CHUA SO HANG NGAN
SWAP A ;DUA SO HANG NGAN LEN 4 BIT CAO
POP B ;LAY SO HANG TRAM TU STACK
ORL A,B ;KET HOP SO HANG NGAN VA SO HANG TRAM
MOV R7,A ;R7 = NGAN - TRAM
POP ACC ;LAY SO HANG CHUC TU STACK
SWAP A ;DUA SO HANG CHUC LEN 4 BIT CAO
Bài 4: Chương trình điều khiển biến đổi A/D thơng qua ADC0809 và hiển thị giá trị của bốn kênh ngõ vào (kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp (kênh IN0, IN1, IN2 và IN3) lên bốn LED 7 đoạn (LED3, LED2, LED1 và LED0: theo giá trị điện áp thực, đơn vị là mV), LED7 hiển thị kênh ngõ vào. Việc chuyển đổi kênh biến đổi và hiển thị được thực hiện một cách lần lượt, mỗi lần cách nhau 5s.
ORL A,B ;KET HOP SO HANG CHUC VA SO HANG DON VI
MOV R6,A ;R6 = CHUC - DON VI
POP B POP ACC RET
;*************************************************** ;CTC CHIA SO BINARY 16 BIT CHO SO BINARY 8 BIT. ;*************************************************** ;NAME: DIV16TO8.
;INPUT: R7,R6: SO BINARY 16 BIT ; B: SO BINARY 8 BIT
;OUTPUT: R7,R6: KET QUA CUA PHEP CHIA ; B: SO DU CUA PHEP CHIA
;***************************************************
DIV16TO8:
PUSH 02H ;CAT THANH GHI R2
PUSH ACC ;CAT THANH GHI A
MOV R2,#16 ;CHO PHEP DICH 16 LAN
CLR A
DIVIDE:
XCH A,R6
CLR C ;DICH BIT 7 CU R6 VAO
RLC A ;CARRY, BIT 0 CUA R6
XCH A,R6 ;BANG 0.
XCH A,R7 ;DICH BIT CARRY VAO
RLC A ;BIT 0 CUA R7
XCH A,R7
RLC A ;DICH BIT 7 CUA R7 VAO A.
CJNE A,B,NOT_EQUAL ;XEM SO BIT DA DICH >=
SJMP A_GREATER_EQ_B ;SO CHIA CHUA ?
NOT_EQUAL:
JC BELOW ;N: THUONG SO = 0 TRONG R6.
A_GREATER_EQ_B:
SUBB A,B ;Y: SO DU CAT TRONG A.
XCH A,R6
ORL A,#1 ;THUONG SO = 1
XCH A,R6 ;CAT TRONG R6
BELOW:
DJNZ R2,DIVIDE ;DICH TIEP DEN 16 LAN.
XCH A,B ;SAU 16 LAN DICH TA DUOC B = SO DU.
POP ACC POP 02H
RET