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