You are on page 1of 9

HBK Tp HCM

Khoa TBMT
GVPT: H Trung M
Cc TD minh ha tp lnh 8051 (phn c thm ca VXL-chng 3)
Ch : Cc TD sau s trnh by theo th t gii thiu cc nhm lnh trong sch VXL, nh arith01.asm ch
TD 1 vi nhm lnh s hc, v 1 nhm lnh c th c nhiu TD minh ha.
TD 1: Minh ha cc php ton s hc trn s nh phn: ADD, ADDC, SUBB, INC, DEC, MUL, v DIV
; TD: arith01.asm
; nh ngha cc hng s dng trong chng trnh
NUM1
NUM2
NUM2M
BIN16_1
BIN16_2
SUM16M
DIFF16M
TEST
; Th

; Thu

; Thu

; Th

; Th

; Th

EQU
EQU
EQU
EQU
EQU
EQU
EQU

25
-17
20h
2578
1289
22H
24H

; = 19H
; = EFH
; a ch IRAM (RAM ni) c tr s bng NUM2
; = 0A12H
; = 0509H
; a ch IRAM cha tng 2 s nh phn 16 bit
; a ch IRAM cha hiu 2 s nh phn 16 bit
; = BIN16_2 - BIN16_1 = -1289 = FAF7H
EQU 1289-2578 ; = FAF7H
org 0
lnh ADD vi ton hang 8 bit ( ton hng th 2 la hng s)
MOV A,#NUM1
ADD A,#NUM2
; A <- A + NUM2 = 25 + (-17) = 8 = 0000 1000
; nh hng n cc c:
; lc ny PSW = C1h = 1100 0001 (tng ng cc bit C,AC,F0,RS1,RS0,OV,-,P)
; Khi cng nh phn cho C = 1, AC =1 (c nh bit 4), RS1=RS0=0 sau khi RESET
; OV = C XOR CMSB = 1 XOR 1 = 0, P = 1 do so bit 1 trong ACC l l
; Ch : Chng trnh m phng TS Controls Emulator 8051 tnh sai OV!!!
lenh ADD voi toan hang 8 bit ( toan hang thu 2 la thanh ghi B)
MOV A,#NUM1
MOV B,#NUM2
ADD A,B
; A <- A + B = 25 + (-17) = 8
lenh ADD voi toan hang 8 bit ( toan hang thu 2 la thanh ghi da dung Rn)
MOV A,#NUM1
MOV R0,#NUM2
ADD A,R0
; A <- A + R0 = 25 + (-17) = 8
lnh ADD vi ton hang th 2 l 1 byte trong b nh ni
MOV NUM2M,#NUM2
MOV A,#NUM1
ADD A,NUM2M ; A <- A + (NUM2M) = 25 + (-17) = 8
lnh ADD vi ton hang th 2 l 1 byte trong b nh ni c pointer l R0
MOV R0,#NUM2M
MOV A,#NUM1
ADD A,@R0 ; A <- A + Mem(R0) = 25 + (-17) = 8
lnh ADD vi ton hang th 2 l 1 byte trong b nh CODE (b nh chng trnh)
MOV DPTR,#NUM2C ; Lay dia chi cua bien NUM2C
CLR A
MOVC A,@A+DPTR
ADD A,#NUM1 ; A <- NUM2 + NUM1 = -17 + 25 = 8

; Th lnh ADD va ADDC -> cng 2 hng s 16 bit


; Kt qu ct vo nh d liu ni SUM16M theo big endian
MOV A,#LOW BIN16_1
; Ly byte thp ca hng s 16 bit
ADD A,#LOW BIN16_2
MOV SUM16M+1,A
MOV A,#HIGH BIN16_1
; Ly byte cao ca hng s 16 bit
ADDC A,#HIGH BIN16_2 ; Phai tinh den Carry cua phep cong truoc
MOV SUM16M,A ; (SUM16M) = 3987 = 0F1BH ( nghia la (22H)=0FH va (23H)=1BH
; Thu lenh SUBB voi 2 toan hang hang so 8 bit
MOV A,#NUM1
MOV B,#NUM2
CLR C
SUBB A,B
; A <- A - B = 25 - (-17) = 42 = 2AH

Cc TD minh ha tp lnh 8051 trang 1

; Thu lenh SUBB voi 2 toan hang hang so 16 bit


; hieu 2 so nhi phan 16 bit = BIN16_2 - BIN16_1 = -1289 = FAF7H
; cat vao bien DIFF16M (24H)theo big endian
MOV A,#LOW BIN16_2
; Lay byte thap cua hang so 16 bit
CLR C
SUBB A,#LOW BIN16_1
MOV DIFF16M+1,A
MOV A,#HIGH BIN16_2
; Lay byte cao cua hang so 16 bit
SUBB A,#HIGH BIN16_1
; Phai tinh den Carry cua phep cong truoc
MOV DIFF16M,A
; (DIFF16M) = 1289 - 2578 = -1289 = FAF7H
;(nghia la (24H)=FAH va (25H)=F7H
; Hiu ng ca lnh INC
INC A ; A <- A + 1
INC B ; B <- B + 1
MOV R0,#30H
INC @R0
; Tng byte vi contr R0 ln 1 (30H) = (30H) + 1
INC R0
INC @R0
; (31H) = (31H) + 1
INC 0
; 1 cach khac de co R0 <- R0 + 1
INC @R0
; (32H) = (32H) + 1
INC DPTR
; Hieu ung cua lenh DEC
DEC A ; A <- A - 1
DEC B ; B <- B - 1
MOV R0,#30H
DEC @R0 ; Giam o nho duoc chi boi R0 di 1 (30H) = (30H) - 1
INC R0
DEC @R0 ; (31H) = (31H) - 1
DEC 0; 1 cach khac de co R0 <- R0 - 1
DEC @R0 ; (30H) = (30H) - 1
; Khong co lenh DEC DPTR !!!
; Do do ta phai dung doan chuong trinh sau de giam noi dung DPTR di 1
DEC
DPL
; Giam byte thap cua DPTR di 1
MOV
R7, DPL
; chp vo R7
CJNE R7, #0FFH, SKIP ; Neu tran duoi thnh FF th phai muon
DEC
DPH
; do d cung phai giam byte cao di 1
SKIP:
; Thu lenh nhan MUL voi 2 toan hang 8 bit: A x B
MOV A,#25
MOV B,#56
MUL AB ; B:A = 25 x 56 = 1400 = 478H ( B = 04H va A = 78H)
; Thu lenh chia DIV voi 2 toan hang 8 bit: A/B
MOV A,#255
MOV B,#7
DIV AB; A/B = 255/7 = 36 du so la 3 ==> A = 36 = 24H va B=03H
SJMP $
; Nhy ti ch
NUM2C: DB NUM2 ; Hng s trong b nh CODE
END

TD 2: ; Minh ha cc php ton s hc trn s BCD nn: ADD, ADDC


; TD: arith02.asm
BCD1_1
EQU 25H
BCD1_2
EQU 17H
BCD1_2M
EQU 20h ; Dia chi o IRAM co tri so bang BCD1_2
BCD4_1
EQU 3456H
BCD4_2
EQU 6789H
SUM4M
EQU 40H ; Dia chi o IRAM chua tong 2 so BCD 4 digit
org 0
; Thu lenh ADD voi toan hang BCD 2 digit ( toan hang thu 2 la hang so)
MOV A,#BCD1_1
ADD A,#BCD1_2
; A <- A + BCD1_2 = 25H + 17H = 3CH
DA A
; A = 42H

Cc TD minh ha tp lnh 8051 trang 2

; Thu lenh ADD voi toan hang BCD 2 digit ( toan hang thu 2 la thanh ghi B)
MOV A,#BCD1_1
MOV B,#BCD1_2
ADD A,B
; A <- A + B = 25H + 17H = 3CH
DA A
; A = 42H
; Thu lenh ADD voi toan hang BCD 2 digit ( toan hang thu 2 la thanh ghi da dung Rn)
MOV A,#BCD1_1
MOV R0,#BCD1_2
ADD A,R0
; A <- A + R0 = 25H + 17H = 3CH
DA A
; A = 42H
; Thu lenh ADD voi toan hang thu 2 la so BCD 2 digit trong bo nho noi
MOV BCD1_2M,#BCD1_2
MOV A,#BCD1_1
ADD A,BCD1_2M
; A <- A + (BCD1_2M) = 25H + 17H = 3CH
DA A
; A = 42H
; Thu lenh ADD voi toan hang thu 2 la 1 byte trong bo nho noi co pointer la R0
MOV R0,#BCD1_2
MOV A,#BCD1_1
ADD A,@R0
; A <- A + Mem(R0) = 25H + 17H = 3CH
DA A
; A = 42H
; Thu lenh ADD voi toan hang thu 2 la byte trong bo nho CODE
MOV DPTR,#BCD1_2C ; Lay dia chi cua bien BCD1_2C
CLR A
MOVC A,@A+DPTR
ADD A,#BCD1_1
; A <- BCD1_2 + BCD1_1 = 25H + 17H = 3CH
DA A
; A = 42H
; Thu lenh ADD va ADDC -> cng 2 s BCD 4 k s
; Ket qua cat vao o nho du lieu noi SUM16M
MOV A,#LOW BCD4_1 ; Lay byte thap cua hang so 16 bit
ADD A,#LOW BCD4_2
DA A
MOV SUM4M+1,A
MOV A,#HIGH BCD4_1 ; Lay byte cao cua hang so 16 bit
ADDC A,#HIGH BCD4_2 ; Phai tinh den Carry cua phep cong truoc
DA A
MOV SUM4M,A
; Ket qua la 10245H voi C=1, (40H)=02H, va (41H) = 45H
; Chu y la DA A chi co
; TD sau cho thay DA A
MOV A,#25H
MOV B,#17H
CLR C
SUBB A,B
; A
DA A
; A
SJMP $
BCD1_2C: DB BCD1_2
END

tac dung sau lenh cong (ADD hay ADDC) ma thoi


voi lenh SUBB cho ket qua sai!

<- A - B = 25H - 17H = 0EH


= 14H ==> Cho ket qua sai voi phep toan tru!!!

TD 3: Minh ha cc lnh ANL, ORL, XRL (AND, OR, XOR vi cc ton hng 8 bit)
; TD: logic01.asm
NUM1 EQU 15H ; 00010101B
NUM2 EQU 3AH ; 00111010B
; Thu lenh ANL voi toan hang 2 la hang so
MOV A,#NUM1
ANL A,#NUM2 ; A = 15H AND 3AH = 10H
; Thu lenh ANL voi toan hang 2 la byte o bo nho du lieu noi
MOV 20H,#24 ; (20H) = 24 = 18H
ANL A,20H ; A = 10H AND 18H = 10H
; ANL tuong tu voi cac toan hang 2 co dinh dia chi la REG, INDIRECT
; Ap dung
;(AND voi
MOV
ANL

ANL de giu lai cac bit can thiet (AND voi 1) va xoa cac bit khong can thiet
0)
A,#NUM2 ; A =3AH
A,#0FH ; A = 0AH = 4 bit thap

Cc TD minh ha tp lnh 8051 trang 3

; Thu lenh ORL voi toan hang 2 la hang so


MOV A,#NUM1
ORL A,#NUM2 ; A = 15H OR 3AH = 3FH
; Ap dung ORL de dat 1 bit len 1 neu OR no voi 1 va giu tri cu neu OR voi 0
MOV A,#NUM1 ; A = 15H
ORL A,#0F0H ; A = F5H
; Thu lenh XRL voi toan hang 2 la hang so
MOV A,#NUM1
XRL A,#NUM2 ; A = 15H XOR 3AH = 2FH
; Ap dung XRL de lay NOT bit neu XOR no voi 1 va giu tri cu neu XOR voi 0
MOV A,#NUM1 ; A = 15H
XRL A,#0F0H ; A = E5H
MOV A,#NUM2 ; A = 3AH
XRL A,#0FFH ; A = bu 1 cua 3AH = C5H
INC A
; A = bu 2 cua 3AH = C6H
; Xoa noi dung thanh ghi A
CLR A ; A <- 0
; Cac cach khac de xoa A (khong hieu qua bang CLR)
MOV A,#0 ; hay
ANL A,#0
; Ly b 1 ni dung trong thanh ghi A
MOV A,#NUM2
; A = 3AH
CPL A
; A = b 1 ca 3AH = C5H
XRL A,#0FFH
; A = b 1 ca C5H = 3AH (XRL khng hiu qu bng CPL)
sjmp $
END

TD 4: Minh ha cc lnh xoay bit (Rotate) v hon i 4 bit (SWAP)


; TD: logic02.asm
NUM1 EQU 15 ; 0000_1111B
NUM2 EQU -12 ; 1111_0100B
; Thu lenh RR A
MOV A,#NUM1
RR A
RR A
; Thu lenh RL A
MOV A,#NUM1
RL A
RL A

; A = 0000_1111B = 0FH = 15
; A = 1000_0111B = 87H
; A = 1100_0011B = C3H
; A = 0000_1111B = 0FH = 15
; A = 0001_1110B = 1EH = 30 = 15 x 21
; A = 0011_1100B = 3CH = 60 = 30 x 2 = 15 x 22

; Xoay phai voi co C


MOV A,#NUM1 ; A
SETB C
RRC A
; A
; Xoay trai voi co C
MOV A,#NUM1 ; A
SETB C
RLC A
; A

= 0000_1111B = 15
; C <- 1
= 1000_0111B = 87H va C = 1
= 0000_1111B = 15
; C <- 1
= 0001_1110B = 1EH va C = 0

; Ap dung dich phai de chia nguyen khong


MOV A,#NUM1 ; A = 0000_1111B = 0FH
RR A
; A = 1000_0111B = 87H
CLR ACC.7
; A = 0000_0111B = 07H
; Chia nguyen khong dau 1 so o A cho 2^n
; n duoc dat trong thanh ghi R7
MOV R7,#2
MOV A,#00011111B ; A = 31
CALL DIV2EXPN
; A = 0000_0111B =
; Mot cach khac la dung lenh chia
MOV A,#31
MOV B,#4
DIV AB
; A = 31/4 = 7

dau A cho 2
= 15
= 7 = 15/2
voi n = 1 -> 8

7 = 31 div 4

Cc TD minh ha tp lnh 8051 trang 4

; Ap dung
MOV
MOV
RRC

dich phai voi C de chia nguyen co dau A cho 2


A,#NUM2 ; A = -12 = F4H = 1111_0100B
C,ACC.7
; C = bit dau cua A
A
; A = 1111_1010B = FAH = -6 va C=0

; Th lnh SWAP
MOV A,#47H
SWAP A
sjmp $

; A = 74H

DIV2EXPN:
; Chng trnh con chia nguyn khng du cho 2^n
RR A
CLR ACC.7
DJNZ R7, DIV2EXPn
RET
END

TD 5: Minh ha cc lnh chuyn d liu: MOV, PUSH, POP, XCH, XCHD


; TD: mov01.asm
CONST1
EQU 15H
CONST2
EQU 27H
CONST3
EQU 36H
; in 16 byte trong vng d liu ni t a ch 30H voi tri so la CONST1
MOV A,#CONST1
MOV R0,#30H
MOV R1,#16
L1:
MOV @R0, A
INC R0
DJNZ R1, L1
; Dien 32 byte trong vng d liu ngoi t a ch 20H voi tri so la CONST2
MOV A,#CONST2
MOV DPTR,#20H
MOV R1,#32
L2:
MOVX @DPTR, A
INC DPTR
DJNZ R1, L2
; Dien 16 byte trong vung du lieu ngoai tu 40H voi tri so la CONST1
MOV A,#CONST3
MOV R0,#40H
MOV R1,#16
MOV P2,#0
; Xuat byte cao dia chi
L3:
MOVX @R0, A
INC R0
DJNZ R1, L3
; Hon i (<-->)ni dung
; R1 <--> R7 bank 0
MOV R1,#CONST1
;
MOV R7,#CONST2
;
PUSH 07
PUSH 01
POP 07
;
POP 01
;

2 nh trong RAM ni
R1 = 15H
R7 = 27H

R7 = 15h
R1 = 27H

; Mt cch khc hon i R1 va R7


XCH A,01H
XCH A,07H
XCH A,01H
; Hoan doi digit thap cua 2 so hex 2 ky so o A va 1 byte trong RAM noi voi con tro la R0
; hay R1
MOV A,#24h
MOV 20h,#53h
MOV R0,#20h
XCHD A,@R0 ; A = 23h va (20h) = 54h

Cc TD minh ha tp lnh 8051 trang 5

sjmp $
END

TD 6: Minh ha cc lnh chuyn d liu: MOVC


; TD: mov02.asm
; c lin tc d liu X t P0 v xut ra P1 gi tri X2
; Xut dng BCD 4 digit P2 (2 digit cao) va P3 (2 digit thap)
MOV P0,#0FFH
; t cu hnh cho P0 l INPUT
MOV DPTR,#X2_BCD
L1:
MOV A,P0
ANL A,#0FH
; Bo m ch tnh ti a l 15^2 = 225
PUSH ACC
; Lu tr cho ln gi sau
CALL SQUARE
; Assembler t i sang ACALL hay LCALL
MOV P1,A
POP ACC
CALL SQ_BCD
SJMP L1
; Chng trnh con tnh X^2 bng cch tra bng vi thanh ghi nn l PC
SQUARE:
INC A
; iu chnh ly s liu ng!!
MOVC A,@A+PC
RET
TABLE_X2: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225 ; X^2
; Chng trnh con tra kt qu X^2 vi biu din BCD 4 digit
; Tra bng bng thanh ghi nn DPTR
SQ_BCD:
CLR C
RL A
; A <-- 2 x A v mi phn t ca bng di 2 byte
PUSH ACC
MOVC A,@A+DPTR
MOV P2,A ; Xuat 2 ky so BCD cao
POP ACC
INC A
MOVC A,@A+DPTR
MOV P3,A ; Xuat 2 ky so BCD thap
RET
X2_BCD:
DW 0000H, 0001H, 0004H, 0009H, 0016H, 0025H, 0036H, 0049H, 0064H, 0081H; 02 -> 92
DW 0100H, 0121H, 0144H, 0169H, 0196H, 0225H; 102 -> 152
END

TD 7: Minh ha cc lnh vi bin Boole (ton hng 1 bit)


;TD: boole01.asm
; Thuc hien cac phep toan boole co ban NOT, AND, OR, XOR, NAND, va NOR
F1
X
Y
NOTX
XANDY
XORY
XXORY
XNANDY
XNORY
MOV
LOOP: MOV
MOV
MOV
MOV
MOV
CPL
MOV
MOV
ANL

EQU
PSW.1 ; Dng thm bit ny lm bin tm ( c F0)
EQU
P1.0
EQU
P1.1
EQU
P1.2
; NOTX = NOT(X)
EQU
P1.3
; = X AND Y
EQU
P1.4
; = X OR Y
EQU
P1.5
; = X XOR Y
EQU
P1.6
; = X NAND Y
EQU
P1.7
; = X NOR Y
P1,#03H ; Dat cau hinh P1.0 va P1.1 lam INPUT
C,X
F0,C
C,Y
F1,C
C,F0
C
NOTX,C
; NOT X
C,F0
C,F1

Cc TD minh ha tp lnh 8051 trang 6

SKIP:

MOV
CPL
MOV
MOV
ORL
MOV
CPL
MOV
MOV
JNB
CPL
SJMP
END

XANDY,C
; X AND Y
C
XNANDY,C; X NAND Y
C,F0
C,F1
XORY,C
; X OR Y
C
XNORY,C
; X NOR Y
C,Y
X,SKIP
; Neu X=0 thi X XOR Y = Y
C
; Neu X=1 thi X XOR Y = NOT Y
LOOP
; Phi c lp li, nu khng s khng th hin c cng logic!!

TD 8: Minh ha cc php ton logic vi bin Boole (ton hng 1 bit)


;TD: boole02.asm
; nh tr hm Boole: F = (XY'+ WZ)(XZ'W' + X'Z)= tch ca 2 tng Boole
; Gi s cc bin X, Y, Z, W c c vo t P1.0 .. P1.3 v bin ra F P1.7
X
Y
Z
W
F

EQU
EQU
EQU
EQU
EQU
MOV
LOOP: MOV
ANL
JC

P1.0
P1.1
P1.2
P1.3
P1.7
P1,#0FH
C,X
C,/Y
EXP2

MOV
MOV
ANL
ORL
JNC
EXP2: MOV
ANL
ANL
JC
MOV
MOV
ANL
ORL
MOV
SJMP
DONE_0:
SJMP
DONE_1:
SJMP
END

F0,C
C,W
C,Z
C,F0
DONE_0
C,X
C,/Z
C,/W
DONE_1
F0,C
C,Z
C,/X
C,F0
F,C
LOOP
CLR
F
LOOP
SETB F
LOOP

; Dat cau hinh P1.0 .. P1.4 la INPUT


;
;
;
;

C = XY'
Neu C = 1 thi 0 can tinh tiep voi phep toan OR, ma tiep tuc
xet tong thu 2
F0 = XY'

; C = XY' + WZ
; Neu Tong thu 1 = 0 thi F = 0

; C = XZ'W'

; C = ZX' = X'Z
; C = XZ'W' + X'Z
; F = (XY'+ WZ)(XZ'W' + X'Z)
; F = 0
; F = 1

TD 9: Minh ha cc lnh nhy theo tr bin Boole: JB, JNB


;TD: boole03.asm
; M phng mch m ln (m 10): ng ra nh phn 4 bit thp P2, gi s c ni vi mch hin th s
; BCD v xung nhp CK (kch cnh xung) c ni vi chn P3.7
CK

EQU
MOV
MOV
MOV
LOOP: JNB
JB
INC
CJNE
MOV
NEXT: MOV
SJMP
END

P3.7
P3,#80H
R0,#0
P2,#0
CK,$
CK,$
R0
R0,#10,NEXT
R0,#0
P2,R0
LOOP

;
;
;
;
;

Dat cau hinh P3.7 INPUT


So dem ban dau la 0
Dau tien so dem la 0
i CK c mc 1
i CK c mc 0 ==> pht hin c cnh xung

Cc TD minh ha tp lnh 8051 trang 7

; SV c th dng Proteus thy r hn hot ng counter ny

TD 10: Minh ha cc lnh r nhnh khng iu kin: JMP


; TD: branch01.asm
; Chuong trinh doc lien tuc gia tri tu P0 (gia su < 4)
; Nu P0=0 th x l theo CASE_0, = 1 theo CASE_1, . . .
MOV P0,#0FFH
; Dat cau hinh P0 la INPUT
MOV P1,#0FFH
; Dat cau hinh P1 la INPUT
MOV P2,#0FFH
; Dat cau hinh P2 la INPUT
MOV DPTR,#JMP_TABLE
L1:
MOV A,P0
ANL A,#03H
; Bao dam cho gia tri chon < 4 ! , sau lenh nay C =0
RL A
; A = 2 x A
JMP @A+DPTR
JMP L1
; Assembler tu dong chuyen sang SJMP, AJMP hay LJMP
JMP_TABLE:
AJMP CASE_0 ; lenh nay 2 byte
AJMP CASE_1
AJMP CASE_2
; Day la doan phuc vu cho CASE_3
; chia P1 cho P2 va xuat thuong so o 4 bit cao cua P3 va du so o 4 bit thap cua P3
; gia su thuong so va du so <= 15
CALL DIV_P1P2
JMP L1
CASE_0: ; Tinh tong cua P1 va P2, ket qua xuat ra P3
MOV A,P1
ADD A,P2
MOV P3,A
JMP L1
CASE_1: ; Tinh hieu cua P1 va P2, ket qua xuat ra P3
MOV A,P1
CLR C
SUBB A,P2
MOV P3,A
JMP L1
CASE_2: ; Tinh nhan cua P1 va P2, ket qua xuat ra P3
MOV A,P1
MOV B,P2
MUL AB
; gia su ket qua <= 255
MOV P3,A
JMP L1
; Thuc hien P1/P2
DIV_P1P2:
MOV A,P1
MOV B,P2
DIV AB
SWAP A
ORL A,B
MOV P3,A
RET
END

TD 11: Minh ha cc lnh r nhnh chng trnh theo iu kin: JZ, JNZ, DJNZ, va CJNE
; TD: branch02.asm
MOV P0,#0FFH
MOV A,P0
JZ ZERO
MOV P1, #0F0H
; P0 khac 0
JMP NEXT
ZERO: MOV P1,#0FH
NEXT:
; on chng trnh m cc phn t bng 0 trong 1 bng RAM ngoi (a ch u l
; 0000H) vi byte u l s phn t trong bng
; Nu bng c di tr s: 07h 02h 00h 03h 05h 00h 09h 0Ch
; th kt qu thanh ghi B = 2
MOV DPTR,#0

Cc TD minh ha tp lnh 8051 trang 8

MOVX A,@DPTR
MOV R0, A
; So phan tu cua bang dat trong R0
MOV B,#0
L1:
INC DPTR
MOVX A,@DPTR
JNZ SKIP
INC B
SKIP: DJNZ R0,L1
; m tng s cc phn t c tr >=3, kt qu ct vo R1, vi TD ny cho R1 = 3
MOV DPTR,#0
MOVX A,@DPTR
MOV R0, A
; So phan tu cua bang dat trong R0
MOV R1,#0
L2:
INC DPTR
MOVX A,@DPTR
CJNE A,#5,CHECK
CHECK:
JC CONT
; C = 0 co nghia la A >= 5
INC R1
CONT: DJNZ R0, L2
SJMP $
END

TD 12: M phng mch so snh 2 s nh phn 4 bit X v Y (X = P1.7..P1.4, Y = P1.3..P1.0),


mch co 3 ng ra P2.0 = 1 nu X < Y, P2.1 = 1 nu X = Y, v P2.2 = 1 nu X > Y
; TD: branch03.asm
MOV
P1,#0FFh
;
LOOP: MOV
A,P1
;
MOV
B,A
;
ANL
A,#0FH
;
XCH
A,B
;
SWAP A
;
ANL
A,#0FH
CJNE A, B, XNEY ;
XEQY: ; truong hop X = Y
CLR
P2.0
SETB P2.1
CLR
P2.2
SJMP LOOP
XNEY: JC
XGTY
;
XLTY: ; truong hop X < Y
SETB P2.0
CLR
P2.1
CLR
P2.2
SJMP LOOP
XGTY: ; truong hop X > Y
CLR
P2.0
CLR
P2.1
SETB P2.2
SJMP LOOP
END

Dat
A =
Cat
A =
A =
A =

cau
X:Y
tam
0:Y
X:Y
Y:X
; A
so sanh

hinh cho P1 lam INPUT


(A do 2 s 4 bit X va Y hp li)
ACC
va B = 0:Y = Y
= 0:X = X
X voi Y muc dich se dat cac co

Neu X > Y nhay den XGTY

Cc TD minh ha tp lnh 8051 trang 9

You might also like