8051 Assembly Language
Disciplina: Microcontroladores
Prof. Remy Eskinazi, MSc
Revisão: Alguns Registradores Importantes
User & Stack
7F
A
B
Scratch Pad Area
R0
R1
RAM
R2
R3
R4
30
R5
Bit Addressable RAM
R6
20
R7
DPH
DPL
18
10
SP
PC
08
00
Bank 3
Bank 2
Bank 1
Bank 0
R7
R0
R7
R0
R7
R0
R7
R0
2
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051
• Tipos de instruções
– Movimentação de Dados
– Aritméticas
– Lógicas
– Manipulação de Bit
– Controle de programa (Saltos e Desvios)
3
Microcontroladores - Prof. Remy Eskinazi
Modos de endereçamento 8051 (1)
•
Imediato (Direto) - (Label ou Número)
MOV PSW,05
; M(PSW)
R5
MOV A,04510
; Acc
M(4510)
•
Constante Imediata – (# Label ou Número)
MOV R6,#14
; R6
1410
MOV A,#0CAh
; Acc
CA16
MOV DPTR,#loc
; DPTR
Valor associado a “loc”
•
Registrador – (Rn)
MOV R1,A
MOV B,R3
; R1
;B
Acc
R3
4
Microcontroladores - Prof. Remy Eskinazi
Modos de endereçamento 8051 (2)
•
Indireto por Registrador - @R0, @R1, @DPTR
MOV @R0,#250
MOV
A,@R1
MOVX @DPTR,A
•
; M(R0)
250 10
;A
M(R1)
; External data M(DPTR)
Indexado (Registrador Indireto) - @A+DPTR, @A+PC
MOVC A,@A+DPTR ; A
MOVC A,@A+PC
;A
JMP
@A+DPTR ; PC
•
A
ROM(A+DPTR)
ROM(A+PC)
(A+DPTR)
Bit – Número do bit, label.bit ou bit label
MOV C,IE.0
MOV C,EX0
SETB 07Fh
SETB 2F.7
; cy
bit 0 do IE reg. (EX0)
; identico
; Bit 7F
1
; identico
5
Microcontroladores - Prof. Remy Eskinazi
Modos de endereçamento 8051 (3)
•
Saltos e desvios (controle de fluxo de programa)
Exemplos:
Salto Incodicional:
JMP (Address16)
AJMP (Address11)
SJMP (Address8)
LJMP (Address16)
Salto condicional:
JC (Address8)
JNC (Address8)
JB (Address8)
JNB (Address8)
6
Microcontroladores - Prof. Remy Eskinazi
Exemplo de Programa Assembly
;
;
**** Programa Exemplo ***
**** Objetivo: Explicar campos de um programa assembly 8051 ****
Valor:
equ 02h
; uso da diretiva equate
org 0h
;Reset
sjmp inicio
org 03
; Int. Externa 0
sjmp ext0
Inicio:
mov A, #0FFh
mov R1, #valor
DB 02h
DB ‘A’
; ASCII do caractere A
End
; Fim de programa p/ compilação
7
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Movimentação de Dados

MOVE
MOV
A,
#n
Direct
R
@Ri
A
A
A
A
Immediate
Direct
Register
Register Indirect
MOV
Rn,
#
Rn Immediate
…
Direct
A
MOV
Direct,
MOV @Ri,
#
Direct
R
@R
A
#
Direct Immediate
…
M(Ri)
Direct
Microcontroladores
- Prof. Remy Eskinazi
A
Immediate
…
8
Instruções 8051 – Movimentação de Dados



Move From Program Memory
MOVC
A, @A+DPTR
A, @A+PC
Move External Data RAM
MOVX
A, @R
A, @DPTR
MOVX
@R, A
@DPTR, A
Others
PUSH
D
POP
D
XCH
A, R
D
@R
Acc Rom(A+DPTR)
Acc Rom(A+PC)
SP SP+1, m(SP) D
D m(SP), SP SP - 1
SWAP Acc
Rn
9
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Aritméticas

Add/Subtract
ADD
A, #
D
R
@R
Acc A+Immediate
ADDC
A, #
D
R
@R
Acc A+Immediate+Carry
SUBB
A, #
D
R
@R
Acc Acc-Immediate-Carry
10
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Aritméticas

Inc/Dec
INC
• DEC

Mul/Div
MUL
DIV
A
D
R
@R
DPTR
Acc Acc+1
A
D
R
@R
Acc Acc-1
AB
AB
B:A
A
B
Acc * B (unsigned)
Quo ( A/B ) (unsigned)
Rem( A/B )
11
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Lógicas

AND,OR,XOR
AND
ORL
XRL
• Outras
CLR
CPL
SWAP
A, #
D
R
@R
D, A
D, #
A
A
A
Acc 0
Acc Acc
Acc(7-4)
Acc(3-0)
12
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Lógicas

Rotações
RL
7
A
0
Acc
7
RLC
A
C
0
Acc
7
RR
0
Acc
A
7
RRC
A
0
Acc
C
13
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Manipulação de Bits


Clear/Set/Complement
CLR
C
bit
SETB
C
bit
CPL
C
bit
And, Or, Move
ANL
C, bit
C, /bit
ORL
C, bit
C, /bit
MOV
C, bit
bit, C
Carry 0
bit
0
Carry Carry AND bit
Carry Carry AND bit
14
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Manipulação de Bits

Saltos
JC
label
Jump if Carry set
JNC
JB
JNB
JBC
label
bit, label
bit, label
bit, label
Jump if Carry clear
Jump if bit set
Jump if bit clear
Jump if bit set, then clear bit
label = PC relative (+ 127)
15
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Controle do Programa

Saltos
AJMP
LJMP
SJMP
JMP
JZ
JNZ

Compara e Salta
CJNE
label-A
label-L
label
@A+DPTR
label
label
Absolute Jump- 11 bits(2K)
Long Jump - 16 bits (64K)
Short Jump
Jump Indirect PC (A+DPTR)
Jump if zero
Jump if not zero
A, #, label
A, D, label
R, #, label
@R,#, label
Compare 1st op to 2nd op and
jump to label if not Equal
16
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Controle do Programa


Decrementa e Salta
DJNZ
R, label
D, label
Subrotinas (Chamadas de Funções)
ACALL
label-A
LCALL
label-L
RET
RETI
Rn = Rn-1 , Jump if not zero
Absolute Call - 11 bits (2K)
Long Call - 16 bits (64K)
Return from Subroutine
Return from ISR:
PC m(SP), SP SP-2
17
Microcontroladores - Prof. Remy Eskinazi
Programa Acha Zero – Algoritmo
INÍCIO
DPTR  ENDEREÇO INICIAL
Objetivo: Determinar
se em um range de
memória existe um
byte 0
A  M(DPTR)
A=0 ?
S
F0  1
N
DPTR  DPTR+1
N
FIM?
S
RET
18
Microcontroladores - Prof. Remy Eskinazi
Programa Acha Zero – Código Fonte
; Programa Acha Zero
; Autores: Turma Dispositivos
; Descrição: O Programa faz a busca no range 0000h a 01FFh de um byte 0.
; Se existir, sinalizamos com flag F0=1 e saímos do programa com DPTR=Posição
; do byte 0.
INICIO:
MOV DPTR, #0h
CLR F0
REPETE: MOVX A, @DPTR
CJNE A, #0h, CONTINUA
ACHOU: SETB F0
SJMP FIM
;
CONTINUA: INC DPTR
MOV A, DPH
CJNE A, #02h, REPETE
FIM:
RET
END
; Inicia Ponteiro
; Limpa Flag F0
; Poe o dado da posição indicada pelo DPTR no
; Acumulador
; Pula para CONTINUA se A=! 0
; Sinaliza o encontro do valor zero com F0=1
; Se não encontrou byte zero, aponta para proxima posicao
;
; Se DPTR<0200h pula para REPETE
; FIM
; Fim de Arquivo p/ compilação
19
Microcontroladores - Prof. Remy Eskinazi
INICIO
Programa Acha Maior
Ponteiro <-- pos. inicial
( DPTR <-- 0 )
Ent.: DPTR = End. Inicial
B <-- 0
Subrotina
AchaMaior
Acc <-- (Ponteiro)
(Acc <-- ( DPTR ))
Acc > B ?
S
Saída.: Acc = Maior valor
DPTR = End. Maior dado
Preserva dado e end.
( B <-- Acc )
( R1R0 <-- DPTR )
N
Próxima posição
(DPTR <-- DPTR + 1)
Acc <-- DPh
N
DPh = 01H ?
S
Acc <-- B
DPTR <-- R1R0
20
RET
Microcontroladores - Prof. Remy Eskinazi
Ferramenta Pinnacle
21
Microcontroladores - Prof. Remy Eskinazi
Download

assemb8051