capítulo 5
DESCRIPTION
Capítulo 5 Sub-rotinas e Estruturação da Linguagem de Programação “Assembly” aplicadas a família de microcontroladores MCS-51 da Intel. Capítulo 5. Definição de sub-rotina Programa Principal : instrução 1 : instrução N - PowerPoint PPT PresentationTRANSCRIPT
Prentice Hall Microcontroladores 80511
Capítulo 5Capítulo 5
Sub-rotinas e Estruturação da Sub-rotinas e Estruturação da Linguagem de Programação Linguagem de Programação
“Assembly” aplicadas a família de “Assembly” aplicadas a família de microcontroladores MCS-51 da microcontroladores MCS-51 da
IntelIntel
Prentice Hall Microcontroladores 8051 2
Capítulo 5Capítulo 5
Definição de sub-rotina
Programa Principal: instrução 1 : instrução N rotina que calcula uma expressão matemática(tamanho de 60 bytes, por exemplo) instrução N+1 : instrução M rotina que calcula uma expressão matemática(tamanho de 60 bytes, por exemplo) instrução M+1 : instrução O rotina que calcula uma expressão matemática(tamanho de 60 bytes, por exemplo) etc… END
Prentice Hall Microcontroladores 8051 3
Capítulo 5 Capítulo 5
Sub-rotina: End1: sub-rotina que calcula uma expressão matemática (tamanho de 60 bytes, por exemplo) RETPrograma Principal:ProgP: instrução 1 : instrução N Chamada a sub-rotina que calcula uma expressão matemática (ACALL end1/LCALL end1 – 2 ou 3 bytes) instrução N+1 : instrução M Chamada a sub-rotina que calcula uma expressão matemática (ACALL end1/LCALL end1 – 2 ou 3 bytes) instrução M+1 : instrução O Chamada a sub-rotina que calcula uma expressão matemática (ACALL end1/LCALL end1 – 2 ou 3 bytes) etc… END
Prentice Hall Microcontroladores 8051 4
Capítulo 5Capítulo 5Área de memória de programa 1 ; Área de Memória de Programa das "Sub-rotinas"; Sub-rotina 1:endereço inicial da sub-rotina 1: instrução 1
: instrução N RET; Sub-rotina M:endereço inicial da sub-rotina M: instrução 1 : instrução N RETÁrea de memória de programa 2 ; Área de Memória de Programa do “Programa Principal”endereço inicial do programa principal: instrução 1 : ;chamada a "sub-rotina 1" ACALL/LCALL endereço inicial da sub-rotina 1 ;chamada a "sub-rotina 2" ACALL/LCALL endereço inicial da sub-rotina 2 : ;chamada a "sub-rotina M" ACALL/LCALL endereço inicial da sub-rotina M ; instrução K END
Prentice Hall Microcontroladores 8051 5
Capítulo 5Capítulo 5
Vantagens da utilização de sub-rotinas: Princípio de funcionamento de uma sub-rotina: Mas, como uma sub-rotina fisicamente é executada pelo microprocessador ?
Pilha (LIFO – Last-In, First-Out)
RAMEndereço Conteúdo07h ((SP)) (SP) = 07h08h:Cresce Decresce:7Fh
Figura 4: Representação esquemática da pilha (LIFO) após um sinal de reset.
Prentice Hall Microcontroladores 8051 6
Capítulo 5Capítulo 5
Instrução Bytes Ciclos Codificação Operação
PUSH direct 2 2 1100 0000 direct address (PC) (PC) + 2(SP) (SP) + 1((SP)) (direct)
POP direct 2 2 1101 0000 direct address (PC) (PC) + 2 (direct) ((SP))(SP) (SP)-1
Tabela 1: Descrição das instruções PUSH direct e POP direct.
Prentice Hall Microcontroladores 8051 7
Capítulo 5Capítulo 5
Instrução Bytes Ciclos Codificação Operação
ACALL addr11 2 2 a10 a9 a8 1 0001 a7............a0 (PC) (PC)+2 (SP) (SP)+1 ((SP)) (PC7-0) (SP) - (SP)+1 ((SP)) (PC15-8) (PC10-0) addr11
LCALL addr16 3 2 0001 0010 a15....a8 a7 ..........a0 (PC) (PC)+3 (SP) (SP)+1 ((SP)) - (PC7-0) (SP) (SP)+1 ((SP)) (PC15-8) (PC15-0) addr16
Tabela 2: Descrição das instruções ACALL addr11 e LCALL addr16.
Prentice Hall Microcontroladores 8051 8
Capítulo 5Capítulo 5
Instrução Bytes Ciclos Codificação Operação
RET 1 2 0010 0010 (PC15-8) ((SP))(SP) (SP)-1(PC7-0) ((SP))(SP) (SP)-1
RETI 1 2 0011 0010 (PC15-8) ((SP))(SP) (SP)-1(PC7-0) ((SP))(SP) (SP)-1
Tabela 3: Descrição das instruções RET e RETI.
Prentice Hall Microcontroladores 8051 9
Capítulo 5Capítulo 5Estruturação da
Linguagem Assembly
Descrição e Definição das Sub-rotinas
Início do programa: Inicialização das variáveis e programação do hardware
Loop do programa principal:- processamento/instruções de chamadas a sub-rotinas;- instrução de "jumper" incondicional para o início do Loop do programa principal (gerenciamento e controle de 24 horas por dia).
Prentice Hall Microcontroladores 8051 10
Capítulo 5Capítulo 5Estruturação da Linguagem “Assembly”: ;Sub-rotinas - Primeira Parte:
addr1: Subrotina 1 RET : addrN: Subrotina N RET
; Inicialização das variáveis do programa e do “hardware” - Segunda Parte que pertence ao ; programa principal:
endereçodoIniciodoprogramaprincipal: instruções 1 : instrução N
; "Loop" do Programa Principal - Terceira Parte que pertence ao programa principal: loop: instrução 1 : instrução N call adr1 ; chama a subrotina 1 : : call adrN ; chama a subrotina N : : sjmp loop ; “Fim do looping do programa END ; principal”
Prentice Hall Microcontroladores 8051 11
Capítulo 5Capítulo 5 Metodologia sistemática de implementação de projeto de programa; Para um projeto completo constituído de muitas funções ou tarefas, a solução é facilmente implementada através da divisão do projeto completo em pequenos módulos (simples sub-rotinas) que são responsáveis por tarefas específicas e bem definidas; Tempo de implementação é extremamente reduzido, pois somente é necessário definir as diferentes tarefas (sub-rotinas) que o projeto deve executar e essas tarefas devem ser chamadas no loop do programa principal de forma organizada e seqüencial; Alta confiabilidade na implementação das sub-rotinas; Tempo de desenvolvimento reduzido; Tempo de simulação reduzido; Tempo de emulação reduzido; Tempo de manutenção reduzido; Projeto modular; Flexibilidade na implementação de novas características ao produto final através da inserção e retiradas dos módulos que compõem o projeto do programa; Inserção dos módulos já implementados em bibliotecas de sub-rotinas. Na implementação de novos projetos as mesmas podem ser utilizadas imediatamente; Fácil manutenção pois quando ocorrer um problema, o mesmo pode ser diretamente analisado na sua respectiva sub-rotina.
Prentice Hall Microcontroladores 8051 12
Capítulo 5Capítulo 5SUB1: Qte de Nums = FFh
(R0)#60h(R1)#05h(65h)#00h
(C)#0b(A)((R0))
(A)(A)-(C)-#0FFh
(A)0 ?[(A) #0FFh ?]
(65h)(65h)+1
(R1)(R1)-1(R1)0 ?
N
S
S
RET
N
(R0)(R0)+1
Programa Principal
(PSW) #00h(SP) #70h
Chama sub-rotina SUB1
Fim
Prentice Hall Microcontroladores 8051 13
Capítulo 5Capítulo 5
DEFSEG EXEMPLO, ABSOLUTESEG EXEMPLOORG 0100h; Sub-rotina que calcula a qte de num=0FFh
SUB1: MOV R0,#60h ; Endereço inicial do bufferMOV R1,#05h ; Quantidades de elementos do bufferMOV 65h,#00 ; Zera contador de num=0FFh
ADR2: CLR C ; Zera o (C): não influenciar a op. de sub.MOV A,@R0 ; Carrega (A) com o cont. do buffer de mem.SUBB A,#0FFh ; Subtrai o (A) da const. 0FFhJNZ ADR1 ; Se (A)0 (A #0FFh) (PC)=ADR1 [não soma um no (65h)]INC 65h ; Se (A)=0 (A = #0FFh), soma um no (65h)
ADR1: INC R0 ; Aponta p/ a próx. pos. mem. a ser analisadaDJNZ R1,ADR2 ; Existem mais dados a serem analisados ? Se sim, salta para ADR2RET ; Se não, finaliza a sub-rotina se (R1)=0 e retorna.
; Início do programa principalPROGP:MOV PSW,#00h ; Faz (PSW) #00h.
MOV SP,#70h ; Define (SP)=70h (início da Pilha)ACALL SUB1 ; Chama a sub-rotina SUB1.END ; Fim do programa principal