Ir ao conteúdo
  • Cadastre-se

Inversão de estado lógico no MikroC não funciona


Posts recomendados

Pessoal, uma ajudinha básica por favor, pois acho que o compilador quer me deixar louco. Comecei a usar o MikroC para programar PIC e neste momento preciso apenas inverter o estado de um pino. O pino é o RB0 do PortB. Seria de se esperar que uma dessas duas opções abaixo funcionassem, mas não funcionam:

RB0_bit = ~RB0_bit;
// ou 
PORTB.RB0 = ~PORTB.RB0;

Se eu fizer isso funciona:

RB0_bit = 0;
RB0_bit = 1;
// ou 
PORTB.RB0 = 0;
PORTB.RB0 = 1;

Que coisa maluca é essa?!

Link para o comentário
Compartilhar em outros sites

Último chute, xD... Eu deveria abrir o MikroC e testar mas estou vendo a Dr. Pimple Popper... =D, nem sei como esse vídeo apareceu pra mim UAHuHauhau.

PORTB.RB0 ^= 1;
RB0_bit ^= 1;

O motivo para os "!" e "~" não funcionarem eu não sei :(... Acabei me desviando do assunto principal do tópico....

Link para o comentário
Compartilhar em outros sites

Qual o modelo do seu PIC? Ele possui os registradores LATx?

 

Testei aqui, usando o registrador PORTx não deu mesmo, mas usando o registrador LATx funcionou... Vai entender o porquê. PIC18F45K22

 

As três opções funcionaram.

LATB0_bit = ~LATB0_bit;
LATB.RB0 = ~LATB.RB0;
    
LATB0_bit = !LATB0_bit;
LATB.RB0 = !LATB.RB0;
    
LATB0_bit ^= 1;
LATB.RB0 ^= 1;

Já o PIC16F628A (que não possui os registradores LATx) aceitou os toggles diretamente no registrador PORTx normalmente.

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz , grato pela atenção. Acho muito correta sua pergunta sobre o TRISB dada a minha dúvida de iniciante. Mas respondendo, eu havia setado todo o TRISB como saída e mesmo assim não funcionava.

 

@test man*~  você tem razão a acertou na mosca. É por meio dos registradores LATx mesmo que a coisa funciona. Sim, o PIC que estou usando é da família 18F, especificamente o 18F46K80, tem os registradores LATx e funcionou como você sugeriu. Verifiquei no datasheet (mas nem simulei ainda) e me parece que os pinos configurados como saída são tratados por meio LATx. Já quando estiverem configurados como entradas, os mesmos pinos serão tratados por meio de PORTx. Obrigado por simular aí e encontrar essa característica dessa família também. 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, wBB disse:

Verifiquei no datasheet (mas nem simulei ainda) e me parece que os pinos configurados como saída são tratados por meio LATx.

 

Esse esquema do LATx é para eliminar o problema de Read modify Write... Mas é meio estranho :huh:, deve haver alguma coisa de errado com o compilador MikroC, as os toggles (inversão de estado) usando o registrador PORTx deveria funcionar assim como atribuição de estado (RB0=1;) funciona... O CCS C Compiler aceita essa inversão... Estranho, talvez o manual do MikroC fale alguma coisa sobre isso hehe :)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...