CH NG 3 ƯƠ
L P TRÌNH B NG H P NG MCS51
L p trình h p ng (assembly language programming) cho h vi đi u khi n MCS51.
M t ch ng trình vi t b ng h p ng (ch ng trình h p ng )ch ng trình đ c vi t ươ ế ươ ươ ượ ế
b ng vi c s d ng các câu l nh trong t p l nh c a h vi đi u khi n v i các l nh
d i d ng mã g i nh . ướ
Ch ng trình h p ng th ng đ c g i là ch ng trình ngu n hay mã ngu n đ cươ ườ ượ ươ ượ
m t ch ng trình biên d ch (ch ng trình d ch) d ch ra thành ngôn ng máy d i d ng ươ ươ ướ
nh phân đ c n p vào b nh ch ng trình c a vi đi u khi n thông qua m t ượ ươ
máy n p ch ng trình (Programmer). ươ
Hi n nay r t nhi u ch ng trình biên d ch cho h vi đi u khi n MCS51 (Keil ươ
µVision, RCHPSIM….) đã đang đ c s d ng. Tuy nhiên trong ch ng này s sượ ươ
d ng ch ng trình Keil µVision3 đ so n th o biên d ch ch ng trình h p ng . Keil ươ ươ
µVision đ c hình thành và phát tri n t năm 1985, ph n m m biên d ch này h tr choượ
nhi u dòng vi đi u khi n khác nhau v i hai lo i ngôn ng chính h p ng C cho vi
đi u khi n.
3.1 C u trúc ch ng h p ng ươ
3.1.1 Quy t c đ t tên nhãn, tên ch ng trình, bi n, h ng s : ươ ế
Không đ c trùng v i các t khóa ượ
Không dài quá 31 ký t , không phân bi t ch hoa hay ch th ng ườ
Không t n t i các d u cách trong tên và các ký t đ c bi t
Tên th ng b t đ u các ch cái và có tính ch t g i nhườ
Riêng tên nhãn và tên ch ng trình ph i k t thúc b ng d u “:”ươ ế
3.1.2 Khai báo bi n, h ng s :ế
nhi u cách khai báo bi n h ng s trong ch ng trình h p ng s d ng Keil ế ươ
µVision. Tuy nhiên đ d nh ng i l p trình nên s d ng câu l nh khai báo v i cú ườ
pháp:
Tên Bi nếEQU Giá tr ; chú thích
Tên H ng s EQU Giá tr h ng ; chú thích
VD:
Buffer1 EQU 50h ; Bi n Buffer1 đ c gán giá tr 50Hế ượ
Constant_A EQU 10 ; H ng s Constant_A đ c gán 10 (=0AH) ượ
3.1.3 Khai báo ch ng trình con:ươ
Cú pháp:
Tên ch ng trình con:ươ
; Bi n (thanh ghi) vào :…………….ế
; Bi n (thanh ghi) ra: ………………ế
; Bi n (thanh ghi) thay đ i: ………..ế
; -------------------------------------------------
Câu lênh 1
Câu l nh 2
…………
Câu l nh n
Ret
Ví d :
Add2_1byte_Hex:
; Bi n vào: R0, R1ế
; Bi n ra : Acc ,C flagế
; Thanh ghi thay đ i: Acc, C flag
;--------------------------------------------
Mov A, R0
Add A, R1
Ret
3.1.4 C u trúc ch ng trình h p ng : ươ
;===========Tên ch ng trình ============ươ
org 00h
nop
sjmp n ch ng trình chínhươ
org 03h ; Ng t Ex0
nop
reti
org 0bh ; Ng t Timer0
nop
ljmp Tên ct Ph c v ng t / Reti
org 13h ; Ng t Ex1
nop
ljmp Tên ct Ph c v ng t / Reti
org 1bh ; Ng t Timer1
nop
ljmp Tên ct Ph c v ng t / Reti
org 23h ; Ng t serial
nop
reti
;=========Khai báo Bi n H ng s =========ế
Bi n equếgiá tr ; chú thích
……………………………………
H ng s equ giá tr ; chú thích
………………………………….
;=====================================
Vùng khaio các Vector ng t và các ch ng trình ươ
ph c v ng t t ng ng ươ
L u ý: ư
Khi m t ng t nào đó không dùng thì ng i ườ
vi t ch ng trình ph i k t tc b ng l nhế ươ ế
RETI (nh ng t EX0 và ng t Serial)ư
Khi ng t nào đó đ c s d ng thì ng i ượ ườ
dùng ph i vi t l nh ế
Ljmp Tên Ctrình ph c v ng t
(Nh ng t Timer0, Ex1, Timer1)ư
;===================================
Vùng khaio bi n, h ng sế
;===================================
; m a i n p r o g r a m
;===================================
org 50h
n ch ng trình chính:ươ
L nh 1
…………
lcall Ctr_con1
…………
here:
sjmp here
;==========Ctrình_con =============
Ctr_con1:
Câu l nh 1
………….
Lcall Ctr_con2
…………
ret
;================================
Ctr_con2:
Câu l nh a
………….
Câu l nh k
…………
ret
;===============================
Ctrinh _ Ph c v ng t
;===============================
n ct Ph c v ng t1 :
Câu l nh 1
………….
Câu l nh m
…………
Lcall Ctr_con2
…………
Reti
;===============================
n ct Ph c v ng t2 :
Câu l nh a
………….
Câu l nh h
…………
Lcall Ctr_con m
…………
reti
;==============================
End
;===================================
;===================================
L nh đ nh đ a ch đ u c a Ctrình chính trong ROM
L nh goi Ctrình con1 trong Ctrình chính
T o vòng l p vô t n
;====================================
Vùng vi t các Ctrình con ế
L u ý:ư
Trong 1 Ctrình con có th g i các Ctrình con khác
;===================================
Vùng vi t các Ctrình ph c v ng t ế
L u ý:ư
Trong 1 Ctrình ph c v ng t có th g i các Ctrình
con khác
;====================================
Câu l nh k t thúc Ctrình ế
3.2 Qu n lý b ng s li u, phép tính nhi u byte
3.2.1 Qu n lý b ng s li u
B ng s li u (M ng, s nhi u byte) th ng đ c l u tr trong 1 vùng nh n m trong ườ ượ ư
b nh ch ng trình. Khi thao tác v i m t b ng s li u ng i lâp trình s c n ph i bi t ươ ườ ế
cách khai báo b ng s li u, qua đó xác đ nh đ c đ a ch đ u c a b ng s li u, s ượ
l ng byte trong 1 b ng s li u. Đ trên c s đó th c hi n các phép toán trên b ng sượ ơ
li u đó
a. Khai báo b ng s li u:
Cú pháp1 : (theo ki u Byte - DB)
Tên b ng:
DB Gtr 1, Gtr 2, ……, Gtr N
Chú ý :
Các giá tr có th các d ng khác nhau
(DEC, HEX, BIN,ASCII)
th t n t i nhi u b ng khác nhau
trong 1 ch ng trìnhươ
Các giá tr trên cùng m t dòng, n u ế
ph i khai báo nhi u thì ph i khai báo
nh sau: ưTên b ng:
DB Gtr 1
DB Gtr 2
……………..
DB Gtr N
Cách này ng i l p trình khó bi tườ ế
chính xác đ a ch đ u c a b ng s li u
Cách 2: K t h p v i l nh đ nh đ a ch conế
tr
Org Đ a ch
Tên b ng:
DB Gtr 1, Gtr 2, ……, Gtr N
L u ý:ư
Ng i l p trình ph i c n th n trongườ
vi c l a ch n đ a ch đ u c a b ng,
th vùng nh này đang đ c ượ
ch ng trình s d ng . v y thôngươ
th ng ườ b ng hay đ c đ t t i vùng ượ
cu i cùng c a b nh ch ng trình ươ
Cú pháp1:
Ví d 1
Table1:
DB 05, 10, 10H, ‘Abc’, 0F8H, ‘5’
Address_Table1 Gtr (hex)
[ Table1 +00] h 05
[ Table1 +01] h 0A
[ Table1 +02] h 10
[ Table1 +03] h 41
[ Table1 +04] h 62
[ Table1 +05] h 63
[ Table1 +06] h F8
[ Table1 +07] h 35
B ng có tên Table1 có 8 byte trong mi n
nh có đ a ch đ u đ c ch ng trình d ch ượ ươ
t đ ng c p phát
Ví d 2:
Org 8000h
Table2:
DB 05, 10, 10H, ‘Abc’, 0F8H, ‘5’
Address_Table2 Gtr (hex)
[ 8000] h 05
[ 8001] h 0A
[ 8002] h 10
[ 8003] h 41
[ 8004] h 62
[ 8005] h 63
[ 8006] h F8
[ 8007] h 35
Cú pháp2 : (theo ki u Word - DW)
Tên b ng:
DW Gtr 1, Gtr 2, ……, Gtr N
T ng t nh s d ng theo ki u đ nhươ ư
nghĩa theo Byte ch khác m i giá tr
ph i đ c l u vào 2 byte ượ ư
Cú pháp2:
Ví d 1
Table3:
DW 05, 10, ‘5’, 0F8AH,
Address_Table3 Gtr (hex)
[ Table3 +00] h 00
[ Table3 +01] h 05
[ Table3 +02] h 00
[ Table3 +03] h 0A
[ Table3 +04] h 00
[ Table3 +05] h 35
[ Table3 +06] h 0F
[ Table3 +07] h 8A
B ng có tên Table3 có 8 byte trong mi n
nh có đ a ch đ u đ c ch ng trình d ch ượ ươ
t đ ng c p phát (v i)
b. Phép tính nhi u byte:
Khi th c hi n các phép tính (c ng tr ,…) ng i l p trình ph i xác đ nh đ c k t ườ ượ ế
qu s m y byte đ ph ng án xác đ nh vùng nh nào s l u gi k t qu c a ươ ư ế
phép tính. Các thao tác đ i v i m t b ng s li u th ng đ c vi t vào b ng ườ ế
thông qua con tr ( pointer) v i các l nh :
N u b ng trong vùng RAM trong c a MCS51 : ế
L nh đ c t vùng nh Movx A, @Ri ; (Ri là R0, R1)
L nh vi t vào vùng nh ế Movx @Ri, A ; (Ri là R0, R1)
N u b ng trong vùng RAM ngoài c a MCS51 : ế
L nh đ c t vùng nh Movx A, @Dptr
Movx A, @A+Dptr
L nh vi t vào vùng nh ế Movx @Dptr, A
N u b ng trong vùng ROM c a MCS51 : ế
L nh đ c t vùng nh Movc A, @A+Dptr
Movx A, @A+PC
Ví d :
Vi t đo n trình chuy n hai m ng d li u 50 byte. Bi t m ng 1 có đ a ch 50h trong Ramế ế
trong và m ng 2 có đ a ch 1234h RAM ngoài.