Ir ao conteúdo

Posts recomendados

Postado

Preciso converter o bit digitado de binário para octal no microcontrolador usando o CCS C Compiler, alguém sabe como realizar essa conversão ?

 

MEU CÓDIGO FICOU DA SEGUINTE FORMA

#include <16F877A.h>
#include <math.h>
#use delay(clock = 20M)
#define size 10
#include <lcd.c>
#use fast_io(b)

 

int a, b, c, d, e, f, g, decimal;
unsigned int8 aux, dezena, unidade;

void main(void){
   
    lcd_init();
    
   while(TRUE){      
      //aqui captura os bits digitados nos pinos B
      a = input(PIN_B0);
      b = input(PIN_B1);
      c = input(PIN_B2);
      d = input(PIN_B3);
      e = input(PIN_B4);
      f = input(PIN_B5);
      g = input(PIN_B6);
      
      // aqui converte para decimal 
      decimal = (a<<6)|(b<<5)|(c<<4)|(d<<3)|(e<<2)|(f<<1)|(g<<0);
      
      printf(lcd_putc,"\fBINARIO = %u%u%u%u%u%u%u \nOctal = %u"a, b, c, d, e, f, g, decimal);
      delay_ms(100);
      
      aux = decimal / 10;
      dezena = (int)floor(aux);
      
      aux = decimal - (10 * dezena);
      unidade = (int)floor(aux);
      
      output_c(matriz[dezena][unidade]);
      delay_ms(100);
      
   }
}

 

 

Sem título.png

 

Postado

Para converter decimal para octal, basta pegar um número decimal e o dividir por 8 até que não seja mais possível. Como visto na imagem abaixo, o conceito é o mesmo com números binários, alterando o 8 por 2.

image.png.fc6cb4feb973bc5ae587e7609b61b0a5.png

Postado
Em 06/02/2023 às 16:31, Lucas Ricci disse:

Para converter decimal para octal, basta pegar um número decimal e o dividir por 8 até que não seja mais possível. Como visto na imagem abaixo, o conceito é o mesmo com números binários, alterando o 8 por 2.

image.png.fc6cb4feb973bc5ae587e7609b61b0a5.png

 

Desculpa, errei ! 

É para conversão em hexadecimal, gostaria de saber se alguém conhece algum método próprio do CCS C que realiza essa conversão direta sem precisar ter que fazer aquela tabela de hexadecimal

  • Membro VIP
Postado

Amigo o dado do port já pode ser considerado em hexadecimal pro mc trabalhar com ele. No seu caso seus bits são do mesmo port.

Em 06/02/2023 às 17:20, 1hsouza1 disse:

a = input(PIN_B0);
      b = input(PIN_B1);
      c = input(PIN_B2);
      d = input(PIN_B3);
      e = input(PIN_B4);
      f = input(PIN_B5);
      g = input(PIN_B6);

Pode ser considerado como:

 dado=PORTB&0b01111111; //veja a sintaxe do seu compilador pra ler port

Na hora de mostrar é que você deve fazer a conversão. Isso que faz são as [gulosas] funções tipo printf

printf("%x",dado);

 

Em tempo.. uma macro bacana que faz a conversão bcd-byte e vv

#define BCD2BYTE( b ) ( ( ( ( ( b ) >> 4 ) & 0x0f ) * 10 ) + ( ( b ) & 0x0f ) )
#define BYTE2BCD( b ) ( ( ( ( b ) / 10 ) << 4 ) + ( ( b ) % 10

é da mesma linha da sua dúvida mas claro não é a sua solução. Só me deu vontade registrar

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!