Sunteți pe pagina 1din 4

Unidade Acadmica da rea de Cincias Exatas e Tecnolgicas

Curso de Engenharia Eltrica


Laboratrio de Microcontroladores - Prof.Andr R. Bakalereskis

Ano/Semestre: 2012/2

Turma:

8 Semestre

03/09/2012

Grupo
Ariane C. Taffarello Cardoso Alessandro Ferraro Braulio Bianco David Cezar

RA
002200900461 002200900450 002200900681 002200900562

VISTO

INSTRUES DE DESVIO CONDICIONAL USANDO O MDULO SDM 9431 1.1 OBJETIVO: Atravs desta experincia o aluno ser capaz de utilizar as principais instrues de desvio, no modo condicional. 1.2 INTRODUO: O microcontrolador 8051 possui um grupo de instrues especficas para avaliar uma expresso lgica, e em funo do resultado pode-se alterar a seqncia normal de execuo. A tabela abaixo mostra um resumo das principais instrues: MNEMNICO JC rel JNC rel JB <bit>, rel JNB <bit>, rel JBC <bit>, rel JZ rel JNZ rel DJNZ <byte>,rel CJNE, <byte>,rel CJNE <byte>,#data rel OPERAO Desvia se C=1 Desvia se C=0 Desvia se <bit> =1 Desvia se <bit> =0 Desvia se <bit> =1 Desvia se A=0 Desvia se A 0 <byte>=<byte> - 1 Desvia se A <byte> Desvia se <byte> data COMENTRIOS
Se o bit de carry for igual a 1 ento desvia Se o bit de carry for igual a 0 ento desvia Se o bit enderevel for igual a 1 ento desvia Se o bit enderevel for igual a 0 ento desvia Se o bit enderevel for igual a 1, desvia e <bit> =0 Se acumulador A=0, desvia para posio rel Se acumulador A 0, desvia para posio rel Decrementa byte e desvia se no chegou a 0 Compara A com <byte>, se for desvia Compara <byte> com #data, se for diferente

desvia

Instrues:
JZ rel - desvia se o acumulador A for igual a zero Nesta instruo verifica se o contedo do acumulador igual a zero, caso seja verdadeiro o programa desviado para a posio rel, caso contrrio o programa executa a prxima instruo. Instruo: JZ rel Opcode : 60 Endereo relativo Operao: MOV A, #00H JZ LABEL1
1

LABEL1

DEC A ADD A,#5H

OBS: No trecho de programa acima, como o acumulador A foi preenchido com 00H, ao ser avaliada a expresso JZ LABEL1 o resultado verdadeiro, pois A igual a zero. Portanto o trecho DEC A no ser executado, ocorrendo um desvio para a posio LABEL1. Caso o valor de A fosse diferente de zero, a instruo DEC A seria executada. EXEMPLO 1: O programa abaixo ir mostrar o valor do acumulador no display. Como o valor inicial do acumulador zero, a instruo INC e ADD A,#20H no sero executadas, portanto teremos zero no acumulador. END 5000 5002 5004 5005 5007 OPCODE 74 00 60 03 04 24 20 00 LABEL MNEMNICO MOV A,#00H JZ LABEL1 INC A ADD A,#20H NOP COMENTRIOS Carrega A com zero Se A zero desvie Incrementa A Soma A com 20H

LABEL1

EXERCCIO 1: Altere o valor do acumulador no programa acima para 1FH e ento execute o programa assinalando o novo valor de A: ACC 40H DJNZ <byte>, rel decrementa byte e desvia se no chegou a zero Nesta instruo o dado <byte> decrementado de um, se est operao no levar o .<byte> para o valor zero o programa ento desviado para a posio rel. Caso contrrio o programa executa a prxima instruo aps DJNZ. Instruo: DJNZ <byte>, rel Opcode : 11011rrr

Endereo relativo

Onde r r r o cdigo do registrador a ser utilizado, conforme tabela abaixo: rrr 000 001 010 011 100 101 110 111 Operao:
2

Registrador R0 R1 R2 R3 R4 R5 R6 R7

REPETE:

MOV A,#00H MOV R2,#08H INC A DJNZ R2, REPETE

OBS: No trecho de programa acima, inicialmente o acumulador carregado com zero, assim como o registrador R2, que ir controlar a repetio (neste caso 8 vezes). A instruo INC A ser ento executada. A instruo DJNZ decrementa o registrador R2 de um e ento se o resultado no for zero desloca a execuo do programa para a nova posio REPETE. Dessa forma a instruo INC A ser executada oito vezes. EXEMPLO 2: O programa abaixo ir pegar o contedo da posio de memria 50H e incrementar 10 vezes o contedo e ento mostrar o resultado no display. Deve-se portanto inicializar o contedo desta posio com qualquer valor, antes de executar o programa, por exemplo o contedo 2. END 5000 5002 5004 5005 5007 5009 500B OPCODE E5 50 7B 0A 04 F5 50 DB FB E5 50 00 LABEL LOOP MNEMNICO MOV A,(50H) MOV R3,#0AH INC A MOV (50H),A DJNZ R3,LOOP MOV A,(50H) NOP COMENTRIOS Carrega dado na memria Inicializa contador Incrementa de um e guarda Transfere o acumulador para end. 50H Desvia se R3 0 Carrega acumulador

EXERCCIO 2: Na posio de memria igual a 50H possui o contedo que a quantidade de vezes que um dado armazenado na posio 51H deve ser decrementado. Fazer um programa para implementar o citado no pargrafo anterior utilizando a estrutura de repetio DJNZ. O registrador para controlar a repetio deve ser o R3. A cada decremento do registrador R3 deve-se incrementar o registrador R2, que inicialmente foi carregado com zero. O valor final do acumulador deve ser mostrado na sada. END 5000 5002 5004 5006 5007 5008 500A 500C OPCODE AB 50 E5 51 7A 00 14 0A DB FC F5 51 12 01 C0 LABEL MNEMNICO MOV R3,(50H) MOV A,(51H) MOV R2,#00H DEC A INC R2
DJNZ R3, LOOP

LOOP

MOV (51H),A
CALL MONITOR

COMENTRIOS Inicializa o contador com memria Carrega dado na memria Inicializa contador Decrementa de um Incrementa de um Desvia se R3 0 Transfere acumulador p/ end. 51H Fim do programa

EXERCCIO 3: Faa um programa em assembly utilizando a instruo CJNE. END 5000 5002 5004 5006 5007 5008 5009 500C 500E OPCODE AB 50 E5 51 7A 00 14 0A 1B BB 00 FA F5 51 12 01 C0 LABEL MNEMNICO MOV R3,(50H) MOV A,(51H) MOV R2,#00H DEC A INC R2
DEC R3
CJNE R3,00H, LOOP

LOOP

MOV (51H),A
CALL MONITOR

COMENTRIOS Inicializa o contador com memria Carrega dado na memria Inicializa contador Decrementa de um Incrementa de um Decrementa em um Desvia se R3 0 Transfere acumulador p/ end. 51H Fim do programa