Escolar Documentos
Profissional Documentos
Cultura Documentos
Programação 8051 - Experiência #4
Programação 8051 - Experiência #4
B) DESVIOS CONDICIONAIS
Dependem do resultado de algum teste para desviar o fluxo do programa.
Exemplo: desviar a execução do programa para a posição da memória de programa 0100H
caso o valor acumulador seja 0.
.
.
MOV A, #005H ; carrega acumulador com valor 05H
JZ TESTE ; salto para TESTE se acumulador for zero
INC A ; incrementa acumulador
.
.
ORG 0100H
TESTE:
MOV A, #002H ; carrega acumulador com valor 02H
.
.
Apostila Microcontrolador prática 8051 Prof. Wagner de Aguiar e Prof. Wagner Jorge R. A. Batista
1- O endereço de retorno da sub-rotina é salvo no stack através do registrador SP (stack
pointer).
2- O registrador PC (program counter) recebe o endereço da sub-rotina.
3- Se uma determinada variável utilizada pelo programa principal (acumulador, registrador
R0, etc) também for utilizada pela sub-rotina é interessante que seja salva através da instrução PUSH
antes da execução da sub-rotina.
4- A sub-rotina é executada.
5- Realiza-se o POP de alguma variável salva, se for o caso.
6- Executa-se a instrução RET, que retira do stack o endereço de retorno e o carrega no
registrador PC.
Exemplo: desviar a execução do programa para a sub-rotina ZERA_R0.
ORG 0000H
MOV SP, #080H ; inicialização stack pointer
.
.
CALL ZERA_R0 ; chamada sub-rotina MUL16
.
.
ZERA_R0:
MOV R0, #000H ; zera R0
RET ; retorna da sub-rotina
.
.
EXERCÍCIOS
1- Crie as seguintes sub-rotinas, completando os seus respectivos cabeçalhos:
a)
;************************************************************************
; Nome: sub-rotina ADD16
; Função: executa a soma de dois números de 16 bits
;
; entrada: R1 R0 -> primeiro número, sendo R1(msb) e R0(lsb)
; R3 R2 -> segundo número, sendo R3(msb) e R2(lsb)
;
; saída: R6 R5 R4 = R1 R0 + R3 R2, sendo R6(msb) e R4(lsb)
;
; variáveis alteradas: complete aqui o cabeçalho
;************************************************************************
b)
;************************************************************************
; Nome: sub-rotina MUL16
; Função: executa a multiplicação de dois números de 16 bits
;
; entrada: R1 R0 -> primeiro número, sendo R1(msb) e R0(lsb)
; R3 R2 -> segundo número, sendo R3(msb) e R2(lsb)
;
; saída: R7 R6 R5 R4 = R1 R0 x R3 R2, sendo R7(msb) e R4(lsb)
;
Apostila Microcontrolador prática 8051 Prof. Wagner de Aguiar e Prof. Wagner Jorge R. A. Batista
; variáveis alteradas: complete aqui o cabeçalho
;************************************************************************
2 - Fazer um programa para ser executado no hardware do EdSim51 que execute a seguinte
logica. Indicação X led aceso.
SW2 SW4 Chave
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 LED
X X X X X X X X X Ligada
X X X X X X X Desligada
3- Fazer um programa que execute a seguinte lógica, onde A (chave aberta) e F (chave
fechada):
Apostila Microcontrolador prática 8051 Prof. Wagner de Aguiar e Prof. Wagner Jorge R. A. Batista