Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
HelloLuj

8051 RESOLVIDO Comparação em assembly no 8051

Recommended Posts

Olá.

Sou um estudante em um curso técnico de eltrônica e estou encontrando dificuldade para criar comparações dentro da linguagem assembly com microcontroladores da familia 8051 com o compilador ASEM-51.

Estou limitado a usar o compilador ASEM-51 (http://plit.de/asem-51/contents.htm), que é o mesmo que usamos no colégio em que estudo; com o kit M8031C da BIT9 (http://www.bit9.com.br/index.php?pag=49&sub_pag=59&conteudo=102) e é o mesmo compilador existente no proteus.

Infelizmente o manual deste compilador não oferece exemplos a respeito de como criar as sintaxes abordando as comparações "maior que", "menor que", "maior ou igual que" e "menor ou igual que" (http://plit.de/asem-51/express.htm) ou de como usar essas comparações em IF's (http://plit.de/asem-51/genifxx.htm).:mellow:

Previamente agradeço. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@HelloLuj ,

 

Seu problema não tem nada a ver com o compilador, e sim , entender bem o Assembly dos 8051.

Veja :

 

Compare instruction

The 8051 has an instruction for the compare operation. It has the following syntax:

 

CJNE destination,source,relative address

 

In the 8051, the actions of comparing and jumping are combined into a single instruction called CJNE (compare and jump if not equal). The CJNE instruction compares two operands, and jumps if they are not equal. In addition, it changes the CY flag to indicate if the destination operand is larger or smaller. It is important to notice that the operands themselves remain unchanged. For example, after the execution of the instruction “CJNE A, #67H, NEXT”, register A still has its original value. This instruction compares register A with value 67H and jumps to the target address NEXT only if register A has a value other than 67H.

 

Veja o que acontece nos flags :

 

image.png.83709a0264c641e97493523b817fa2ef.png

 

Essa instrução compara e se não for igual pula para o endereço desejado, E seta o flag Carry para você verificar se é maior ( CY=0 )  ou menor (CY=1) , simplesmente testando o Carry numa próxima instrução, ok ?

 

Não entendo nada dessa familia -ara te ajudar mais do que isso...

 

Paulo

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

Sua solução funcionou perfeitamente para o meu problema!!!

Fiz um programa simples para alterar o padrão na saída do uC dependendo do estado do bit de Carry após uma comparação com CJNE e funcionou exatamente como esperado.

Ainda assim vou buscar entender as ferramentas de IF que sei que o compilador oferece para tentar extrair o máximo de seu potencial, mas por enquanto sua solução vai servir muito bem!!!

Obrigado!

Editado por HelloLuj
  • Curtir 1
  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@HelloLuj ,

 

Procure como se cria MACROS nesse compilador.

 

Eu usava o M-80 ( nossa .... 1984... ) e criava várias macros para fazer os trechos de código que eram necessários, era fácil fazer essas tipo "se x > y ir para" e "se x < y ir para" e o montador substituia pelos meus trechos em Assembly.

 

Tá certo que comparar o set de instruções do Z-80 com outros microprocessadores é covardia, mas mesmo assim era muito interessante criar minhas próprias "instruções" com o M-80, pois é certeza de código testado.

 

Paulo

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×