The AT89LP series of 8051 compatible microcontrollers incor- porates a single cycle 8051 core. The execution time for most instructions equals the number of bytes in the instruction. In- structions that perform address calculations take more cycles. Several members of the AT89LP series have enhancements which may include the MAC AB, ASR M, LSL M, and CLR M instructions which manipulate the 40 bit multiply-accumulate register, a secondary dptr register supporting an additional addressing mode to the INC, MOV, MOVC, and MOVX instructions, a new CJNE addressing op- tion, a new jump indirect relative to PC addressing mode, and a BREAK instruction.
PROCESSOR SPECIFIC DIRECTIVES
.regbnk Directive
Format:
.regbnk 0, 1, 2, or 3
The .regbnk directive informs the assembler about which register
bank (0-3) is currently being used. This effects instructions
like PUSH R0-R7 and POP R0-R7 where the register bank is encoded
into the instruction.
The AS89LP assembler supports many of the AT89LP microcon-
trollers natively. The following table lists the processor
directive, the supported processor, and the
'Special Function Register', SFR, file that should be included
in a project to define the SFR registers.
.lp2052 AT89LP2052 lp2052.sfr
.lp213 AT89LP213 lp213.sfr
.lp214 AT89LP214 lp214.sfr
.lp216 AT89LP216 lp216.sfr
.lp3240 AT89LP3240 lp3240.sfr
.lp4052 AT89LP4052 lp4052.sfr
.lp428 AT89LP428 lp428.sfr
.lp51 AT89LP51 lp51.sfr
.lp51ed2 AT89LP51ED2 lp51ed2.sfr
.lp51ic2 AT89LP51IC2 lp51ic2.sfr
.lp51id2 AT89LP51ID2 lp51id2.sfr
.lp51rb2 AT89LP51RB2 lp51rb2.sfr
.lp51rc2 AT89LP51RC2 lp51rc2.sfr
.lp51rd2 AT89LP51RD2 lp51rd2.sfr
.lp52 AT89LP52 lp52.sfr
.lp6440 AT89LP6440 lp6440.sfr
.lp828 AT89LP828 lp828.sfr
Including the particular processor sfr file invokes the
appropriate processor type directive and defines the SFR values.
The .__.CPU. and .__.$$$. Variables
The assembler variable .__.CPU. is set to indicate the
specific processor selected. The variable .__.$$$. indicates
the specific extended instructions supported by the selected
processor. The encoding for .__.$$$. is:
Bit 0 MAC AB / CLR M / ASR M / LSL M
Bit 1 /DPTR modes for INC, MOV, MOVC, and MOVX
Bit 2 JMP @A+PC
Bit 3 CJNE A,@R0,rel / CJNE A,@R1,rel
Bit 4 BREAK
.__.CPU. .__.$$$.
43210
.lp2052 AT89LP2052 0 ----- 0x00
.lp213 AT89LP213 1 *-*-- 0x14
.lp214 AT89LP214 2 *-*-- 0x14
.lp216 AT89LP216 3 *-*-- 0x14
.lp3240 AT89LP3240 4 ***** 0x1F
.lp4052 AT89LP4052 5 ----- 0x00
.lp428 AT89LP428 6 *---- 0x1E
.lp51 AT89LP51 7 -***- 0x0E
.lp51ed2 AT89LP51ED2 8 -**** 0x0F
.lp51ic2 AT89LP51IC2 9 -**** 0x0F
.lp51id2 AT89LP51ID2 10 -**** 0x0F
.lp51rb2 AT89LP51RB2 11 -**** 0x0F
.lp51rc2 AT89LP51RC2 12 -**** 0x0F
.lp51rd2 AT89LP51RD2 13 -**** 0x0F
.lp52 AT89LP52 14 -***- 0x0E
.lp6440 AT89LP6440 15 ***** 0x1F
.lp828 AT89LP828 16 ****- 0x1E
The variables '.__.CPU.' and '.__.$$$.' are by default de-
fined as local and will not be output to the created .rel file.
The assembler command line options -g or -a will not cause the
local symbols to be output to the created .rel file.
The assembler .globl directive may be used to change the
variable type to global causing its definition to be output to
the .rel file. The inclusion of the definition of the variables
'.__.CPU.' and '.__.$$$.' might be a useful means of validating
that separately assembled files have been compiled for the same
processor type or have the same instruction extensions. The
linker will report an error for variables with multiple non
equal definitions.
AT89LP SERIES REGISTER SET
The following is a list of the standard 8051 registers used by
AS89LP:
a,b - 8-bit accumulators
r0,r1,r2,r3 - 8-bit registers
r4,r5,r6,r7
dptr - data pointer
sp - stack pointer
pc - program counter
psw - status word
c - carry (bit in status word)
The following is a list of the extended registers used by
AS89LP:
ab - source register for MAC instruction
/dptr - alternate data pointer
m - 40-bit multiply-accumulate register
AT89LP SERIES INSTRUCTION SET
The following list specifies the format for each addressing
mode supported by AS89LP:
#data immediate byte or word data
r,r1,r2 register r0,r1,r2,r3,r4,r5,r6, or r7
@r indirect on register r0 or r1
@dptr indirect on data pointer
@/dptr indirect on alternate data pointer
@a+dptr indirect on accumulator
plus data pointer
@a+/dptr indirect on accumulator
plus alternate data pointer
@a+pc indirect on accumulator
plus program counter
addr direct memory address
bitnum selected bit
/bitnum operation performed with
with complement of selected bit
label call or jump label
The terms data, addr, bitnum, and label may all be expressions.
The following tables list all 8051 mnemonics recognized by
the AS89LP assembler. Note that not all addressing modes are
valid with every instruction. Refer to the AT89 series techni-
cal data for valid modes.
Inherent Instructions
nop
Move Instructions
mov a,#data mov a,addr
mov a,r mov a,@r
mov r,#data mov r,addr
mov r,a
mov addr,a mov addr,#data
mov addr,r mov addr,@r
mov addr1,addr2 mov bitnum,c
mov @r,#data mov @r,addr
mov @r,a
mov c,bitnum
mov dptr,#data
movc a,@a+dptr movc a,@a+pc
movx a,@dptr movx a,@r
movx @dptr,a movx @r,a
Single Operand Instructions
clr a clr c
clr bitnum
cpl a cpl c
cpl bitnum
setb c setb bitnum
da a
rr a rrc a
rl a rlc a
swap a
dec a dec r
dec @r
inc a inc r
inc dptr inc @r
div ab mul ab
pop addr push addr
Two Operand Instructions
add a,#data add a,addr
add a,r add a,@r
addc a,#data addc a,addr
addc a,r addc a,@r
subb a,#data subb a,addr
subb a,r subb a,@r
orl a,#data orl a,addr
orl a,r orl a,@r
orl addr,a orl addr,#data
orl c,bitnum orl c,/bitnum
anl a,#data anl a,addr
anl a,r anl a,@r
anl addr,a anl addr,#data
anl c,bitnum anl c,/bitnum
xrl a,#data xrl a,addr
xrl a,r xrl a,@r
xrl addr,a xrl addr,#data
xrl c,bitnum xrl c,/bitnum
xch a,addr xch a,r
xch a,@r xchd a,@r
Call and Return Instructions
acall label lcall label
ret reti
in data
out data
rst data
Jump Instructions
ajmp label
cjne a,#data,label cjne a,addr,label
cjne r,#data,label cjne @r,#data,label
djnz r,label djnz addr,label
jbc bitnum,label
jb bitnum,label jnb bitnum,label
jc label jnc label
jz label jnz label
jmp @a+dptr
ljmp label sjmp label
Extended Instructions
mac ab m <- m + (ax,a) * (bx,b)
asr m shift m right 1 bit arithmetically
lsl m shift m left 1 bit logically
clr m clear 40-bit register m
cjne a,@r,rel conditional branch if a != @r
jmp @a+pc pc <- pc + a
inc /dptr increment the alternate dptr
mov /dptr,#data load alternate dptr with data
movc a,@a+/dptr get code byte relative to
alternate dptr
movx a,@/dptr mov from external with
alternate dptr
movx @/dptr,a mov to external with
alternate dptr
break software break point
THE MACRO LIBRARY
The Macro Library is a collection of macros to perform opera-
tions involving the multiple address spaces of 8051 type proces-
sors. A summary of the macro library is included here. Refer
to the file macros.asm for a complete description of the macro
functions.
Macro Summary
-----------------------------------------------------------
Load | B/W | | Source | | Destination |
------- ---------- ---------------
.lb_r (R) B IDATA DATA/SFR
.lbi_r Indirect (R) B [IDATA] DATA/SFR
.lb_rx (R) B XDATA DATA/SFR
.lbi_rx Indirect (R) B [XDATA] DATA/SFR
.lb_x (X) B XDATA DATA/SFR
.lbi_x Indirect (X) B [XDATA] DATA/SFR
.lb_c (C) B CODE DATA/SFR
-----------------------------------------------------------
Store | B/W | | Source | | Destination |
------- ---------- ---------------
.sb_r (R) B DATA/SFR DATA/IDATA
.sbi_r Indirect (R) B DATA/SFR DATA/IDATA
.sb_rx (R) B DATA/SFR XDATA
.sbi_rx Indirect (R) B DATA/SFR XDATA
.sb_x (X) B DATA/SFR XDATA
.sbi_x Indirect (X) B DATA/SFR XDATA
-----------------------------------------------------------
Inc / Dec / Cmp | B/W | | Source | | Destination |
------- ---------- ---------------
.incb_rx Increment (R) B XDATA
.incb_x Increment (R) B XDATA
.decb_rx Decrement (R) B XDATA
.decb_x Decrament (R) B XDATA
.cmpb_rx Compare (R) B XDATA XDATA
.cmpw_rx Compare (R) W XDATA XDATA
-----------------------------------------------------------
Move | B/W | | Source | | Destination |
------- ---------- ---------------
.mvb_rr 1-Byte (R) B DATA/IDATA DATA/IDATA
.mvw_rr 1-Word (R) W DATA/IDATA DATA/IDATA
.mvb_xx 1-Byte (X) B XDATA XDATA
.mvw_xx 1-Word (X) W XDATA XDATA
.mvb_rx 1-Byte (R) B XDATA XDATA
.mvw_rx 1-Word (R) W XDATA XDATA
.mvb_ix 1-Byte (R) B DATA/IDATA XDATA
.mvw_ix 1-Word (R) W DATA/IDATA XDATA
.mvb_xi 1-Byte (R) B XDATA DATA/IDATA
.mvw_xi 1-Word (R) W XDATA DATA/IDATA
-----------------------------------------------------------
Decrement & Jump != 0 | B/W | | Source | | Destination |
------- ---------- ---------------
.djnz_rx DJNZ != 0 B XDATA
.djnz_x DJNZ != 0 W XDATA
-----------------------------------------------------------
Load / Store DPTR | B/W | | Source | | Destination |
------- ---------- ---------------
.ldptr W DATA/SFR DPTR
.ldptr_r (R) W DATA/IDATA DPTR
.ldptr_rx (R) W XDATA DPTR
.ldptr_x (X) W XDATA DPTR
.sdptr W DPTR DATA/SFR
.sdptr_r (R) W DPTR DATA/IDATA
.sdptr_rx (R) W DPTR XDATA
.sdptr_x (X) W DPTR XDATA
-----------------------------------------------------------
Save and Restore Registers
.pshreg Push Registers dpl, dph, a, b,
r0, r1, r2, r3, r4, r5, r6, and r7 Onto The Stack
.popreg Pop Registers r7, r6, r5, r4, r3, r2, r1, r0,
b, a, dph, and dpl From The Stack
----*****-----*****-----*****-----*****-----*****-----*****
General Macro Argument Nomenclature
dst$ - is a destination argumment
src$ - is a source argument
reg$ - is an optional argument
specifying R0 or R1
ppa$ - is a dumby argument which enables
pushing and popping the a register
ppr$ - is a dumby argument which enables
pushing and popping the r register
ppx$ - is a dumby argument which enables
pushing and popping the dptr/rn register(s)
----*****-----*****-----*****-----*****-----*****-----*****
... Exit the ASxxxx Documentation