Ir ao conteúdo

Posts recomendados

Postado

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?!

Postado

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

Postado

Não... simplesmente não ocorre a inversão de estado de jeito nenhum. E não é o microcontrolador, pois criei o mesmo código usando o MPLab e funcionou sem problemas.

Postado

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.

  • Membro VIP
Postado

Vou tentar lembrar de testar quando estiver compilando algo com o hitech-c... Enquanto isso...

Ainda que isso suscite impulsos de verdadeira agressividade, permita observar... TRISB0=0, né?

Postado

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

Postado
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 :)

Postado

Acho que deveria ser... Apesar da explicação do artigo citado, também não entendi qual a razão de funcionar no MPLab e não funcionar no MikroC...

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