VXL_Mt s k thut lp trình hp ng 8051 – trang 1/6
ĐHBK Tp HCM – BMĐT
Môn hc: Vi x
GVPT: H Trung M
Mt s k thut lp trình hp ng 8051
1. Hãy trình bày các cách làm cho
a) C Carry bng 1
b) C Carry bng 0
Bài gii (BG). Cách tt nht là cách có đánh du *.
a) C Carry bng 1
Hp ng Mã máy (hex) S chu k máy (MC)
Cách 1 (*) SETB C
D
3
1
Cách 2 SETB CY
D
2 D7
2
Cách 3 CLR C
CPL C
C
3
B3
1
1
b) C Carry bng 0
Hp ng Mã máy (hex) S chu k máy (MC)
Cách 1 (*) CLR C
C
3
1
Cách 2 CLR CY
C
2
D7
2
Cách 3 SETB C
CPL C
D
3
B3
1
1
Chú ý: Ngoài ra các lnh cng/tr/xoay bit cũng làm thay đổi giá tr ca c Carry!
2. Hãy trình bày các cách xóa thanh ghi A và cho biết cách nào tt nht
BG.
Hp ng Mã máy (hex) S chu k máy (MC)
Cách 1 (*) CLR A
E
41
Cách 2 ANL A,#0
5
4 00 2
Cách 3 MOV A,#0
7
4 00 2
Cách 4 XRL A,0E0h XRL A,ACC 65 E0 1
Cách 5 XRL 0E0h,A
X
RL ACC,A
6
2 E0 1
3. Hoán đổi ni dung ca
a) 4 bit cao vi 4 bit thp ca thanh ghi A
b) Thanh ghi R1 và R2 bank 0
c) 2 byte trong RAM ni (TD: 30h và 32h)
BG.
Cách 1 (*) Cách 2 Cách 3
a) Hai na byte ca A SWAP A
R
L A
RL A
RL A
RL A
RR A
RR A
RR A
RR A
b) Thanh ghi R1và R2
( bank 0)
XCH A,R1
XCH A,R2
XCH A,R1
P
USH 1
PUSH 2
POP 1
POP 2
MOV A,R1
MOV 1,2
MOV R2,A
c) 2 byte trong RAM ni
(TD: 30h và 32h)
XCH A,30h
XCH A,32h
XCH A,30h
USH 30h
PUSH 32h
POP 30h
POP 32h
MOV A,30h
MOV 30h,32h
MOV 32h,A
4. So sánh thanh ghi A vi B và kết qu tác động đến phép gán cho thanh ghi R7
Mã gi Chương tr
ì
nh h
p ng
#
1
C
hương trình hp ng
#
2
if A = B then
R7 1
else
R7 2
CJNE A,B, ANEB
MOV R7, #1
SJMP CONT
ANEB: MOV R7, #2
CONT:
X
RL A, B
JNZ ANEB
MOV R7,#1
SJMP CONT:
ANEB: MOV R7,#2
CONT:
VXL_Mt s k thut lp trình hp ng 8051 – trang 2/6
if A > B then
R7 1
else
R7 2
CJNE A,
B
,
ANEB
ALEB: ; khi A <= B
MOV R7,#2
SJMP CONT
ANEB: ; x lý khi A > B
JC ALEB
MOV R7,#1
CONT:
if A < B then
R7 1
else
if A = B then
R7 2
else
R7 3
CJNE A,
B
,
ANEB
AEQB: MOV R7,#2 ; khi A = B
SJMP CONT
ANEB: ; khi A <> B
JC ALTB
AGTB: ; x lý khi A > B
MOV R7,#3
SJMP CONT
ALTB: ; x lý khi A < B
MOV R7,#1
CONT:
Chú ý: SV t viết code cho các trường hp còn li
5. Áp dng lnh so sánh và nhy (CJNE) để cài đặt 1 s cu trúc chương trình
Cu trúc điu khin trong gii thut Chương trình hp ng tương ng
Gi s XVAL và YVAL là các địa
ch trc tiếp
MOV A, XVAL
CJNE A, YVAL, L1
.
. Do something
.
L1: ..
CJNE op1. op2, label
if (op1 < op2)
C 1
else
C 0
MOV A, XVAL
CJNE A,YVAL, L1
L1: JNC L2
.
. Do Something
.
L2: ..
MOV A, XVAL
CJNE A, YVAL, L1
SJMP L2
L1: JNC L3
L2: ...
L3: ..
VXL_Mt s k thut lp trình hp ng 8051 – trang 3/6
Chú ý: Ta có th biến đổi điu kin so sánh, TD như điu kin X<=Y có th đổi thành NOT(Y<X) như sau:
6. Thc hin cu trúc điu khin thc hin vòng lp trong N ln ( N= 1 255)
Mã gi
D
ùng thanh ghi
R
7
làm biến Count
D
ùng thanh ghi
R
7
làm biến Count
Count N
Loop:
. . .
Count Count – 1
if Count 0 goto Loop
Next:
L
D
R
7
,
#
N
LOOP:
. . .
DEC R7
CJNE R7,#0,LOOP
NEXT:
LD R7,
#
N
LOOP:
. . .
DJNZ R7,LOOP
NEXT:
Chú ý:
N là hng s được định nghĩa bng EQU
Trong vòng lp không có thay đổi biến Count ! (tr cui vòng lp)
Trường hp đặc bit nếu N = 0 thì vi cu trúc này nó thc hin lp 256 ln
7. Thc hin cu trúc điu khin repeat … until
Mã gi
C
ondition là các c
hoc t hp các c
C
ondition là
c
ác c
hoc t hp các c
repeat
Loop:
. . .
until codition is true
Next:
;
T
D
:
c
ondition là Carry
CLR C ; c C 0
LOOP: ; trong vòng lp có
; lnh làm c C = 1
. . .
JNC LOOP
NEXT:
;
TD: condition
l
à bit
CLR bit ; bit 0
LOOP:;trong vòng lp có
;lnh làm c bit = 1
. . .
JNB bit. LOOP
NEXT:
Chú ý:
Nếu nhãn LOOP quá xa thì có th dùng AJMP hay LJMP, khi đó JNC LOOP được viết thành 2 lnh
liên tiếp JC NEXT và LJMP LOOP
bit là 1 biến Boole TD như c F0, địa ch bit 00H (là bit 0 ca byte có địa ch 20H), ACC.0, TF0, …
8. Hi vòng kim tra mc ca 1 chân nhp (TD: P1.0) để thc hin công vic cho mc 0 hay 1.
Mã gi Chương trình hp ng
w
hile (1)
{
if P1.0 = 0 then
do task0
else
do task1
}
S
ETB P1.0 ; đ
t cu hình nh
p
LOOP: JB Task_1
Task_0: . . . ; các lnh thc hin task0
SJMP LOOP
Task_1: . . . ; các lnh thc hin task1
SJMP LOOP
VXL_Mt s k thut lp trình hp ng 8051 – trang 4/6
TD: Áp dng cho mch x lý LED sáng chy sang trái hoc phi tùy theo mc logic chân nhp
Vi mch trên chú ý là các công tc ti cng 0 cn có đin tr kéo lên. Hot động ca mch như sau:
Nếu P1.1 = 0 thì 8 LED s sáng t phi sang trái, mi LED sáng trong 25ms.
Nếu P1.1 = 1 thì 8 LED s sáng t trái sang phi, mi LED sáng trong 25ms.
Đèn DS1 th hin trng thái ca phím S1, nếu có nhn S1 thì đèn DS1 sáng.
Đèn DB1 và DB2 th hin trng thái ca phím B1 và B2, nếu có nhn phím B1 và B2 thì đèn DB1 và
DB2 tương ng s sáng.
Chương trình hp ng cho mch trên:
Pattern EQU 0FEh
ORG 0
MOV P0,#03H ; Đặt cu hình nhp cho P0.1 và P0.0
MOV P3,#80H ; Đặt cu hình nhp cho P3.7
MOV P1,#Pattern
Loop:
; Ly trng thái ca các công tc B1,S1 ct vào ACC
MOV A,P0
ANL A,#00000011B ; ch ly P0.1 và P0.0
ORL A,# 10000000B ; Đặt cu hình nhp cho P3.7
; Sao chép bit P3.7 vào bit P3.2
MOV C, P3.7
MOV ACC.2, C
MOV P3, A
; X lý cho LED chy
MOV A, P1
JB P0.1, RoR
; Xoay trái P1
RL A
SJMP Next
RoR: ; Xoay phi P1
RR A
Next: MOV P1, A
; Làm tr 25ms
ACALL DELAY_25MS
SJMP Loop
DELAY_25MS:
; Chương trình này đúng vi XTAL = 12 MHz
MOV R1, #250
L1: MOV R0,#50
DJNZ R0, $
DJNZ R1, L1
RET
END
VXL_Mt s k thut lp trình hp ng 8051 – trang 5/6
9. Hi vòng kim tra cnh xung ca 1 chân nhp (TD: P1.0) khi có thì thc hin công vic (task)
Mã gi Chương trình hp ng
w
hile (1)
{
if P1.0 = then
do task
}
S
ETB P1.0 ; đ
t cu hình nh
p
LOOP: JNB P1.0, $ ; đợi P1.0 = 1
JB P1.0, $ ; đợi P1.0 = 0
Task: . . . ; các lnh thc hin task
SJMP LOOP
TD: Mch sau mô phng b đếm lên nh phân modulo 10 (đếm t 0 đến 9 và lp li) vi hin th LED 7 đon
được gn cng P0 và xung nhp CK được ni vào chân P3.7
Mch Chương trình
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0 39
P0.1/AD1 38
P0.2/AD2 37
P0.3/AD3 36
P0.4/AD4 35
P0.5/AD5 34
P0.6/AD6 33
P0.7/AD7 32
P2.7/A15 28
P2.0/A8 21
P2.1/A9 22
P2.2/A10 23
P2.3/A11 24
P2.4/A12 25
P2.5/A13 26
P2.6/A14 27
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD 10
P3.1/TXD 11
P3.2/INT0 12
P3.3/INT1 13
P3.4/T0 14
P3.7/RD 17
P3.6/WR 16
P3.5/T1 15
U1
80C51
X1
12MHz
CX1
33p
CX2
33p
CRST
10n
RRST
10k
R1
270R
R2
270R
R3
270R
R4
270R
R5
270R
R6
270R
R7
270R
CK EQU P3.7
ORG 0
MOV P3,#80H ; Đặt cu hình nhp cho P3.7
MOV R0,#0 ; S đếm ban đầu là 0
MOV P0,#0C0H; Đầu tiên hin th 0
LOOP:
JNB CK,$ ; Đợi CK o muc 1
JB CK,$ ; Đợi CK o muc 0
INC R0
CJNE R0,#10,NEXT ; kim tra tràn thì v 0
MOV R0,#0
NEXT:
MOV A,R0
ACALL BCD2LED
SJMP LOOP
BCD2LED:
MOV DPTR,#LED_DATA
MOVC A,@A+DPTR
MOV P0,A
RET
LED_DATA:
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H
DB 0F8H, 80H, 90H
RET
END
10. Viết các chương trình con cài đặt các cng logic AND, OR, và XOR 8 ngõ vào (8 bit trong thanh ghi A và
ngõ ra là c C)
AND 8 ngõ vào OR 8 ngõ vào XOR 8 ngõ vào
AND8:
CJNE A,#0FFH, AN_0
SETB C
RET
AN_0:
CLR C
RET
OR8:
CJNE A,#0, OR_1
CLR C
RET
OR_1:
SETB C
RET
XOR8:
MOV C,P
RET
Chú ý:
C P luôn luôn bng XOR ca 8 bit
trong thanh ghi A
11. Cài 1 h tun t đồng b không ngõ vào. TD: Viết chương trình to dng sóng sau (gi có sn chương trình
làm tr 1 giây DELAY_1S)
Bài gii.