8051 Assembly Language Disciplina Microcontroladores Prof Remy Eskinazi
8051 Assembly Language Disciplina: Microcontroladores Prof. Remy Eskinazi, MSc Microcontroladores - Prof. Remy Eskinazi
Modos de endereçamento 8051 (1) • Imediato (Direto) - (Label ou Número) MOV PSW, 05 ; M(PSW) R 5 MOV A, 04510 ; Acc M(4510) • Constante Imediata – (# Label ou Número) MOV R 6, #14 ; R 6 14 10 MOV A, #0 CAh ; Acc CA 16 MOV DPTR, #loc ; DPTR Valor associado a “loc” • Registrador – (Rn) MOV R 1, A MOV B, R 3 ; R 1 ; B Acc R 3 2 Microcontroladores - Prof. Remy Eskinazi
Modos de endereçamento 8051 (2) • Indireto por Registrador - @R 0, @R 1, @DPTR MOV @R 0, #250 MOV A, @R 1 MOVX @DPTR, A • ; M(R 0) 250 10 ; A M(R 1) ; 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, EX 0 SETB 07 Fh SETB 2 F. 7 ; cy bit 0 do IE reg. (EX 0) ; identico ; Bit 7 F 1 ; identico 3 Microcontroladores - Prof. Remy Eskinazi
Modos de endereçamento 8051 (3) • Saltos e desvios (controle de programa) Exemplos: Salto Incodicional: JMP (Address 16) AJMP (Address 11) SJMP (Address 8) LJMP (Address 16) Salto condicional: JC (Address 8) JNC (Address 8) JB (Address 8) JNB (Address 8) 4 Microcontroladores - Prof. Remy Eskinazi
Exemplo de Programa Assembly ; ; **** Programa Exemplo **** Objetivo: Explicar campos de um programa assembly 8051 **** Valor: equ 02 h org 0 h ; Reset sjmp inicio org 03 ; Int. Externa 0 sjmp ext 0 Inicio: mov A, #0 FFh mov R 1, #valor DB 02 h 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 l MOVE MOV A, #n Direct R @Ri A A MOV Rn, # Rn Immediate Direct Register Indirect Immediate … Direct A MOV Direct, MOV @Ri, # Direct R @R A # Direct Immediate … M(Ri) Direct Microcontroladores - Prof. Remy Eskinazi A Immediate … 7
Instruções 8051 – Movimentação de Dados l l l 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) Rom(A+PC) SP SP+1, m(SP) D D m(SP), SP SP - 1 SWAP Acc Rn 8 Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Aritméticas l 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-Immediate-Carry 9 Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Aritméticas l Inc/Dec INC • DEC l Mul/Div MUL DIV A D R @R DPTR Acc+1 A D R @R Acc-1 AB AB B: A A B Acc * B (unsigned) Quo ( A/B ) (unsigned) Rem( A/B ) 10 Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Lógicas l AND, OR, XOR AND ORL XRL • Outras CLR CPL SWAP A, # D R @R D, A D, # A Acc 0 Acc Acc(7 -4) Acc(3 -0) 11 Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Lógicas l Rotações RL 7 A 0 Acc 7 RLC A C 0 Acc 7 RR 0 Acc A 7 RRC A 0 Acc C 12 Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Manipulação de Bits l l 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, C Carry 0 bit 0 Carry AND bit 13 Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Manipulação de Bits l Saltos JC label Jump if Carry set JNC JB JNB JBC 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) 14 Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Controle do Programa l Saltos AJMP LJMP SJMP JZ JNZ l Compara e Salta CJNE label-A label-L label @A+DPTR label Absolute Jump- 11 bits(2 K) Long Jump - 16 bits (64 K) Short Jump Indirect PC (A+DPTR) Jump if zero Jump if not zero A, #, label A, D, label R, #, label @R, #, label Compare 1 st op to 2 nd op and jump to label if not Equal 15 Microcontroladores - Prof. Remy Eskinazi
Instruções 8051 – Controle do Programa l l Decrementa e Salta DJNZ R, label D, label Subrotinas (Chamadas de Funções) ACALL label-A LCALL label-L RETI Rn = Rn-1 , Jump if not zero Absolute Call - 11 bits (2 K) Long Call - 16 bits (64 K) Return from Subroutine 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 se em um range de memória existe um byte 0 A M(DPTR) A=0 ? S F 0 1 N DPTR+1 N FIM? S 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 0000 h a 01 FFh de um byte 0. ; Se existir, sinalizamos com flag F 0=1 e saímos do programa com DPTR=Posição ; do byte 0. INICIO: MOV DPTR, #0 h CLR F 0 REPETE: MOVX A, @DPTR CJNE A, #0 h, CONTINUA ACHOU: SETB F 0 SJMP FIM ; CONTINUA: INC DPTR MOV A, DPH CJNE A, #02 h, REPETE FIM: RET END ; Inicia Ponteiro ; Limpa Flag F 0 ; Poe o dado da posição indicada pelo DPTR no ; Acumulador ; Pula para CONTINUA se A=! 0 ; Sinaliza o encontro do valor zero com F 0=1 ; Se não encontrou byte zero, aponta para proxima posicao ; ; Se DPTR<0200 h pula para REPETE ; FIM ; Fim de Arquivo p/ compilação 18 Microcontroladores - Prof. Remy Eskinazi
INICIO Programa Acha Maior Ponteiro <-- pos. inicial ( DPTR <-- 0 ) Ent. : DPTR = End. Inicial B <-- 0 Subrotina Acha. Maior Acc <-- (Ponteiro) (Acc <-- ( DPTR )) S Acc > B ? Saída. : Acc = Maior valor DPTR = End. Maior dado Preserva dado e end. ( B <-- Acc ) ( R 1 R 0 <-- DPTR ) N Próxima posição (DPTR <-- DPTR + 1) Acc <-- DPh N DPh = 01 H ? S Acc <-- B DPTR <-- R 1 R 0 RET 19 Microcontroladores - Prof. Remy Eskinazi
- Slides: 19