MCS-51 & Assembly language 1
Lp trình Assembly cho
MCS-51
MCS-51 & Assembly language 2
Plan
¸
Tp lnh MCS-51
¸
Ngôn ng Assembly s dng phn mm Keil
¸ Gii thiu Phn mm mô phng mch đin Proteus
¸ Ví d
MCS-51 & Assembly language 3
Tp lnh
¸ Vi x lý đu có mt tp lnh
¸ Các lnh đc đc ct trong b nh chng trình
di dng các mã lnh nh phân
¸ thun tin cho vic lp trình:
̈ Các mã lnh đc quy c vit dng “gi nh”
(mnemonic)
̈ Cn chng trình dch các mnemonic qua mã máy
(Assembler): Hp ng
MCS-51 & Assembly language 4
Chng trình s dng hp ng
EDITOR
PROGRAM
ASSEMBLER
PROGRAM
LINKER
PROGRAM
OH
PROGRAM
Myfile.asm
Myfile.obj
Other obj file
Myfile.lst
Myfile.abs
Myfile.hex
MCS-51 & Assembly language 5
Mt s thut ng
¸ Assembly:
̈ là mt cách th hin các code lnh ca mt CPU di dng các ký
hiu mà con ngi có th d dàng đc
¸ Assembler:
̈ phn mm chy trên máy tính có kh nng dch các file vit bng
Assembly sang dng object file
¸ Object code:
̈ Cha các mã lnh dng binary
¸ Object file:
̈ Object code
̈ Thông tin v “relocation” phc v cho linhker
MCS-51 & Assembly language 6
¸ Linhker
̈ Chng trình có kh nng tp hp các object file đ to
thành mt chng trình duy nht có th “executable”
¸ Segment
̈ Là mt đn v b nh code hoc data.
̈ Có nhiu kiu segment trong mt chng trình Assembly
¸ Absolute segment: c đnh không th thay đi
¸ Relocatable segment: có các thuc tính đi kèm cho phép linker
ghép nhiu segments li vi nhau trc khi to ra mt chng
trình executable
MCS-51 & Assembly language 7
Tp lnh MCS-51
¸ Gm 255 lnh:
̈ 139 lnh 1 byte
̈ 92 lnh 2 byte
̈ 24 lnh 3 byte
¸ c chia thành các nhóm lnh
̈ S hc
̈ Logic
̈ Chuyn data
̈ Kim tra điu kin (Boolean Instructions)
̈ iu khin chng trình
MCS-51 & Assembly language 8
Assembly cho MCS-51 (Standard)
¸ Keil cung cp 4 tools
̈ A51 Macro Assembly (\Keil\C51\Bin\A51.EXE)
̈ BL51 Linker/Locator (\Keil\C51\Bin\BL51.EXE)
̈ LIB51 Library Manager (\Keil\C51\Bin\LIB51.EXE)
̈ OH51 Object-Hex Converter (\Keil\C51\Bin\OH51.EXE)
MCS-51 & Assembly language 9
Các bc to
mt chng
trình s dng
Keil ASM
PL/M – 51: là ngôn ng bc cao đc Intel
phát trin vào nhng nm 1980
MCS-51 & Assembly language 10
Cu trúc mt chng trình ASM
¸ Các lnh (statements) ASM gm
̈ Các t khóa điu khin chng trình assembler (assembler control)
̈ Các t khóa đnh hng cho chng trình dch (assembler directive)
̈ Các lnh máy (instruction)
¸ Mi dòng ch có th cha duy nht mt lnh assembler
control hoc assembler directive hoc mnemonic
¸ Mi lnh phi vit trên mt dòng
¸ Các tham bin hoc các toán hng ca các lnh đc phân
bit vi các lnh ít nht bi mt space
¸ Chng trình assembly phi đc kt thúc bi asm directive
END, các statements sau t khóa END s b b qua
MCS-51 & Assembly language 11
$TITLE (Demo Program #1)
CSEG AT 0000h
JMP $
END
TITLE assembler control
JMP instruction mnemonic
CSEG, END assembler derective
MCS-51 & Assembly language 12
Lnh máy
[;comment][, operand][, operand][operand]mnemonic[label:]
[ ] có ngha rng trng đó là optional
label: nhãn đc dùng đ đánh du đa ch mà ti đólnh đc đt
mnemonic dng gi nh ca lnh máy
operand toán hng
comment li chú thích
MCS-51 & Assembly language 13
Directive
¸ nh hng cho chng trình dch ASM
̈ Cách x lý các lnh mnemonic trong chng trình
̈ nh ngha các ký t, đt trc các ô nh,
¸ Không sinh ra code lnh executable (ngoi tr mt s
directive DB và DW), bao gm các nhóm:
̈ Segment control
̈ Symbol definition
̈ Memory Initialization
̈ Reserving Memory
̈ Program linkage
̈ Address control
̈ Other
MCS-51 & Assembly language 14
Segment control
¸ Generic Segments
̈ Có tên và mt lp các thuc tính đi kèm
̈ Các Generic Segment có cùng tên các object file khác
nhau s đc ghép li thành mt segment khi linhker
̈ Các t khóa: SEGMENT, RSEG
¸ Absolute Segments
̈ Dùng đ đnh ngha các vùng nh xác đnh
̈ Các t khóa: CSEG, BSEG, DSEG, ISEG, XSEG
MCS-51 & Assembly language 15
SEGMENT
segment SEGMENT class reloctype alloctype
segment tên ca segment
SEGMENT t khóa
class ch ra không gian các lp b nh (code, data, idata, xdata )
reloctype xác đnh hot đng relocation cho linker
allotype xác đnh hot đng allocation cho linker
MCS-51 & Assembly language 16
RSEG
RSEG segment
RSEG t khóa
segment tên ca generic segment đã đc đnh ngha trc đóbi
t khóa SEGMENT
RSEG c dùng đ La chn mt generic segment đã đc đnh ngha bi
SEGMENT
Ví d:
MYPROG SEGMENT CODE ; declare a segment
RSEG MYPROG ; select the segment
MOV A, #0
MOV P0, A
MCS-51 & Assembly language 17
BSEG, CSEG, DSEG, ISEG, XSEG
BSEG AT address defines an absolute BIT segment.
CSEG AT address defines an absolute CODE segment.
DSEG AT address defines an absolute DATA segment.
ISEG AT address defines an absolute IDATA segment.
XSEG AT address defines an absolute XDATA segment.
Thông báo vi chng trình linker mt segment ti mt đa ch đnh trc
MCS-51 & Assembly language 18
inh ngha các ký hiu (Symbol directive)
¸ Cho phép s dng các ký hiu đ biu din thanh
ghi. đa ch, các s
¸ Các ký hiu đã đc đnh ngha s không đc đnh
ngha li, ngoi tr lnh SET
MCS-51 & Assembly language 19
EQU, SET
symbol EQU expression
symbol EQU register
symbol SET expression
symbol SET register
symbol tên ca ký hiu
expression biu thc s, có th cha các ký hiu nhng phi đc
khai báo trc đó
register thanh ghi: A, R0-R7
symbol đc đnh ngha vi EQU s không đc đnh ngha li
Không th s dng EQU đ đnh ngha li các symbol đã đnh ngha bi SET và ngc li
MCS-51 & Assembly language 20
Ví d:
LIMIT EQU 1200
VALUE EQU LIMIT – 200 + 'A'
SERIAL EQU SBUF
ACCU EQU A
COUNT EQU R5
VALUE SET 100
VALUE SET VALUE / 2
COUNTER SET R1
TEMP SET COUNTER
TEMP SET VALUE * VALUE
MCS-51 & Assembly language 21
BIT, DATA, CODE, IDATA, XDATA
symbol BIT bit_address defines a BIT symbol
symbol CODE code_address defines a CODE symbol
symbol DATA data_address defines a DATA symbol
symbol IDATA idata_address defines an IDATA symbol
symbol XDATA xdata_address defines a XDATA symbol
symbol is the name of the symbol to define. The symbol name can
be used anywhere an address of this memory class is valid.
bit_address is the address of a bit in internal data memory in the area
20H 2FH or a bit address of an 8051 bit-addressable SFR.
code_address is a code address in the range 0000H 0FFFFH.
data_address is a data memory address in the range 0 to 127 or a special
function register (SFR) address in the range 128 255.
idata_address is an idata memory address in the range 0 to 255.
xdata_address is an xdata memory address in the range 0 to 65535.
MCS-51 & Assembly language 22
Ví d:
DATA_SEG SEGMENT BITADDRESSABLE
RSEG DATA_SEG ; a bit-addressable rel_seg
ENABLE_FLAG BIT 60H ; an absolute bit
DONE_FLAG BIT 24H.2 ; an absolute bit
P1_BIT2 EQU 90H.2 ; a SFR bit
RESTART CODE 00H
INTVEC_0 CODE RESTART + 3
INTVEC_1 CODE RESTART + 0BH
INTVEC_2 CODE RESTART + 1BH
SERBUF DATA SBUF ; redfinition of SBUF
RESULT DATA 40H
RESULT2 DATA RESULT + 2
PORT1 DATA 90H ; a SFR symbol
BUFFER IDATA 60H
BUF_LEN EQU 20H
BUF_END IDATA BUFFER + BUF_LEN – 1
MCS-51 & Assembly language 23
sfr, sbit
sfr sfr_symbol = address;
sbit sfr_symbol = bit-address;
sfr_symbol is the name of the special function register (SFR) symbol to define.
address is an SFR address in the range 0x80 – 0xFF.
bit-address is address of an SFR bit in the format address ^ bitpos or
sfr_symbol ^ bitpos. address or sfr_symbol refers to an bitaddressable
SFR and bitpos specifies the bit position of the SFR bit in the range 0 – 7.
Ví d:
sfr P0 = 0x80;
sfr P1 = 0x90;
sbit P0_0 = P0^0;
sbit P1_1 = 0x90^1;
MCS-51 & Assembly language 24
Khi to b nh (Memory initialization)
¸ Khi to các giá tr trong b nh code
¸ T khóa
̈ DB define byte (8 bits)
̈ DW define word (16 bits)
MCS-51 & Assembly language 25
label: DB expression , expression
label: DW expression , expression …
label: is the symbol that is given the address of the initialized memory.
expression is a byte value. Each expression may be a symbol,
a character string, or an expression.
Ví d:
REQUEST: DB 'PRESS ANY KEY TO CONTINUE', 0
TABLE: DW TABLE, TABLE + 10, ZERO
ZERO: DW 0
MCS-51 & Assembly language 26
Reserving memory
¸ Khai báo dung lng vùng b nh s đc s dng
¸ T khóa
̈ DBIT khai báo vùng b nh bit
̈ DS khai báo vùng b nh byte
MCS-51 & Assembly language 27
DBIT, DS
label: DBIT expression
label: DS expression
label is the symbol that is given the address of the reserved memory. The label
is a typeless number and gets the current address value and the memory
class of the active segment. The label can only be used where a symbol of
this type is allowed.
expression is the number of bit (DBIT) or bytes (DS) to reserve. The expression cannot
contain forward references, relocatable symbols, or external symbols.
ON_FLAG: DBIT 1 ; reserve 1 bit
OFF_FLAG: DBIT 1
GAP: DS (($ + 16) AND 0FFF0H) – $
DS 20
TIME: DS 8
Ví d:
MCS-51 & Assembly language 28
Liên kt chng trình (Program linkage)
¸ S dng các đinh hng liên kt chng trình cho phép
̈ Phân chia mt chng trình thành các module (file) riêng bit
̈ Các module “trao đi” vi nhau thông qua tên và các tham chiu
¸ Có 3 kiu đnh hng
̈ PUBLICđa ra danh sách các ký hiu (symbol) đc dùng bên ngoài
module. Symbol phi đc đnh ngha trong module co t khóa
PUBLIC
̈ EXTRN đa ra danh sách các symbol mà module có th s dng
nhng các symbol này đc đnh ngha trong module khác
̈ NAME ch ra tên ca mudule
MCS-51 & Assembly language 29
PUBLIC
PUBLIC symbol , symbol …
symbol must be a symbol that was defined somewhere within the source file.
Forward references to symbol names are permitted. All symbol names,
with the exception of register symbols and segment symbols, may be
specified with the
PUBLIC directive. Multiple symbols must be separated with a comma (,).
Ví d:
PUBLIC PUT_CRLF, PUT_STRING,
PUT_EOS
PUBLIC ASCBIN, BINASC
PUBLIC GETTOKEN, GETNUMBER
MCS-51 & Assembly language 30
EXTRN
EXTRN class (symbol , symbol …)
class is the memory class where the symbol has been defined and
may be one of the following: BIT, CODE, DATA, IDATA, XDATA, or
NUMBER (to specify atypeless symbol).
symbol is an external symbol name.
Ví d:
EXTRN CODE (PUT_CRLF), DATA (BUFFER)
EXTERN CODE (BINASC, ASCBIN)
MCS-51 & Assembly language 31
NAME
NAME modulename
modulename is the name to use for the object module and can be up to 40
characters long. The modulename must adhere to the rules
for symbol names.
Nu tên ca module không đc ch ra bi directive NAME thì tên file (không có
phn m rng) s đc s dng
Ch đc mt NAME đc s dng trong mt file
MCS-51 & Assembly language 32
Address control
¸ nh hng cho chng trình dch bit đa ch ni s
đt code lnh hoc đa ch ca các thanh ghi s dng
¸ Có 2 kiu
̈ ORG thay đi ni dung ca b đm đa ch đn
mt giá tr mi. Các statements tip theo sau s đc đt
bt đu t đa ch mi đó
̈ USING ch ra bank thanh ghi nào đc s dng
cho R0 đn R7
MCS-51 & Assembly language 33
ORG
ORG expression
expression must be an absolute or simple relocatable expression without
any forward references. Only absolute addresses or symbol
values in the current segment may be used.
Nu ORG xut hin trong mt absolute segment thì giá tr expression là giá tr
tuyt đi
Nu ORG xut hin trong mt relocatable segment thì giá tr ca expression đc
coi là giá tr offset
Ví d:
ORG 100H
ORG RESTART
MCS-51 & Assembly language 34
USING
USING expression
expression is the register bank number which must be a value between
0 and 3.
USING không to ra bt k mt code lnh thay đi register bank, nó ch đn gin
là s dng đa ch tuyt đi ca các thanh ghi
USING 3
PUSH AR2 ; Push register 2 in bank 3
USING 1
PUSH AR2 ; Push register 2 in bank 1
MCS-51 & Assembly language 35
Phn mm Proteus
¸ Phn mm ca hãng Labcenter Electronics Ltd
(
)
¸ Gói phn mm
̈ V mch nguyên lý, mch in
̈ Mô phng s dng SPICE
̈ VSM (Virtrual System Modelling) cho phép mô phng ch đ mixed
gia tng t và s (bao gm c các h thng có s dng các chip vi
điu khin)
¸ Giá phn mm tùy thuc vào tính nng mà khách hàng la
chn
¸ Tài liu tham kho có rt ít, ch yu là các file help đi kèm
MCS-51 & Assembly language 36
MCS-51 & Assembly language 37
Ví d 1
¸ Vit chng trình assembler kim tra cng P1.5, nu
̈ bng 0 thì thit lp P1.6 = 1
̈ bng 1 thì thit lp P1.6 = 0
¸ Quá trình kim tra đclp li cho đn khi tt ngun
MCS-51 & Assembly language 38
Ví d 2
¸ Vit chng trình assembler phát ra xung vuông có
chu k 20ms vi duty cycle 50% ti cng P1.0 (s
dng timer). Bit tn s clock ca MCU là 12MHz