Você está na página 1de 19

8051 Assembly Language

Disciplina: Microcontroladores
Prof. Remy Eskinazi, MSc
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 14 10
MOV A,#0CAh ; Acc CA 16
MOV DPTR,#loc ; DPTR Valor associado a “loc”

• Registrador – (Rn)
MOV R1,A ; R1 Acc
MOV B,R3 ;B R3

2
Microcontroladores - Prof. Remy Eskinazi
Modos de endereçamento 8051 (2)
• Indireto por Registrador - @R0, @R1, @DPTR

MOV @R0,#250 ; M(R0) 250 10


MOV A,@R1 ;A M(R1)
MOVX @DPTR,A ; External data M(DPTR) A

• Indexado (Registrador Indireto) - @A+DPTR, @A+PC

MOVC A,@A+DPTR ; A ROM(A+DPTR)


MOVC A,@A+PC ;A ROM(A+PC)
JMP @A+DPTR ; PC (A+DPTR)

• Bit – Número do bit, label.bit ou bit label

MOV C,IE.0 ; cy bit 0 do IE reg. (EX0)


MOV C,EX0 ; identico
SETB 07Fh ; Bit 7F 1
SETB 2F.7 ; identico

3
Microcontroladores - Prof. Remy Eskinazi
Modos de endereçamento 8051 (3)

• Saltos e desvios (controle de programa)

Exemplos:

Salto Incodicional:
JMP (Address16)
AJMP (Address11)
SJMP (Address8)
LJMP (Address16)

Salto condicional:
JC (Address8)
JNC (Address8)
JB (Address8)
JNB (Address8)
4
Microcontroladores - Prof. Remy Eskinazi
Exemplo de Programa Assembly

; **** Programa Exemplo ***


; **** Objetivo: Explicar campos de um programa assembly 8051 ****

Valor: equ 02h

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

5
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)

6
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Movimentação de Dados

 MOVE
MOV A, #n A Immediate
Direct A Direct
R A Register
@Ri A Register Indirect

MOV Rn, # Rn Immediate


Direct …
A

MOV Direct, # Direct Immediate


Direct …
R
@R
A
MOV @Ri, # M(Ri) Immediate
Direct … 7
A - Prof. Remy Eskinazi
Microcontroladores
Instruções 8051 – Movimentação de Dados

 Move From Program Memory


MOVC A, @A+DPTR Acc Rom(A+DPTR)
A, @A+PC Acc Rom(A+PC)
 Move External Data RAM
MOVX A, @R
A, @DPTR
MOVX @R, A
@DPTR, A
 Others
PUSH D SP SP+1, m(SP) D
POP D D m(SP), SP SP - 1
XCH A, R SWAP Acc Rn
D
@R
8
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Aritméticas

 Add/Subtract
ADD A, # Acc A+Immediate
D
R
@R

ADDC A, # Acc A+Immediate+Carry


D
R
@R

SUBB A, # Acc Acc-Immediate-Carry


D
R
@R
9
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Aritméticas

 Inc/Dec
INC A Acc Acc+1
D
R
@R
DPTR
• DEC A Acc Acc-1
D
R
@R
 Mul/Div
MUL AB B:A Acc * B (unsigned)
DIV AB A Quo ( A/B ) (unsigned)
B Rem( A/B )

10
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Lógicas

 AND,OR,XOR
AND A, #
ORL D
XRL R
@R
D, A
D, #

• Outras
CLR A Acc 0
CPL A Acc Acc
SWAP A Acc(7-4) Acc(3-0)

11
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Lógicas

 Rotações 7 0
RL A Acc

7 0
RLC A C Acc

7 0
RR A Acc

7 0
Acc C
RRC A

12
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Manipulação de Bits

 Clear/Set/Complement
CLR C Carry 0
bit bit 0
SETB C
bit
CPL C
bit
 And, Or, Move
ANL C, bit Carry Carry AND bit
C, /bit Carry Carry AND bit
ORL C, bit
C, /bit
MOV C, bit
bit, C

13
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Manipulação de Bits

 Saltos
JC label Jump if Carry set
JNC label Jump if Carry clear
JB bit, label Jump if bit set
JNB bit, label Jump if bit clear
JBC bit, label Jump if bit set, then clear bit

label = PC relative (+ 127)

14
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Controle do Programa

 Saltos
AJMP label-A Absolute Jump- 11 bits(2K)
LJMP label-L Long Jump - 16 bits (64K)
SJMP label Short Jump
JMP @A+DPTR Jump Indirect PC (A+DPTR)
JZ label Jump if zero
JNZ label Jump if not zero

 Compara e Salta
CJNE A, #, label Compare 1st op to 2nd op and
A, D, label jump to label if not Equal
R, #, label
@R,#, label

15
Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Controle do Programa

 Decrementa e Salta
DJNZ R, label Rn = Rn-1 , Jump if not zero
D, label

 Subrotinas (Chamadas de Funções)


ACALL label-A Absolute Call - 11 bits (2K)
LCALL label-L Long Call - 16 bits (64K)
RET Return from Subroutine
RETI Return from ISR:
PC m(SP), SP SP-2

16
Microcontroladores - Prof. Remy Eskinazi
Programa Acha Zero – Algoritmo

INÍCIO

DPTR  ENDEREÇO INICIAL

Objetivo: Determinar A  M(DPTR)

se em um range de
memória existe um A=0 ?
S F0  1

byte 0 N

DPTR  DPTR+1

N
FIM?

RET

17
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 ; Inicia Ponteiro


CLR F0 ; Limpa Flag F0
REPETE: MOVX A, @DPTR ; Poe o dado da posição indicada pelo DPTR no
; Acumulador
CJNE A, #0h, CONTINUA ; Pula para CONTINUA se A=! 0
ACHOU: SETB F0 ; Sinaliza o encontro do valor zero com F0=1
SJMP FIM ;
CONTINUA: INC DPTR ; Se não encontrou byte zero, aponta para proxima posicao
MOV A, DPH ;
CJNE A, #02h, REPETE ; Se DPTR<0200h pula para REPETE
FIM: RET ; FIM
END ; Fim de Arquivo p/ compilação

18
Microcontroladores - Prof. Remy Eskinazi
INICIO

Ponteiro <-- pos. inicial


( DPTR <-- 0 )
Programa Acha Maior

Ent.: DPTR = End. Inicial


B <-- 0

Subrotina
Acc <-- (Ponteiro) AchaMaior
(Acc <-- ( DPTR ))

Saída.: Acc = Maior valor


S DPTR = End. Maior dado
Acc > B ? Preserva dado e end.
( B <-- Acc )
( R1R0 <-- DPTR )

Próxima posição
(DPTR <-- DPTR + 1)

Acc <-- DPh

N
DPh = 01H ?

Acc <-- B
DPTR <-- R1R0
19
RET
Microcontroladores - Prof. Remy Eskinazi

Você também pode gostar