Ir ao conteúdo
  • Cadastre-se

Agrupamentos de registradores


Pedroee2008

Posts recomendados

Gostaria de saber como agrupar registradores em um bloco?

Por exemplo:

No bloco INTCON temos:

Alguns registradores agrupados ou associados, tais como,GIE, TMR0IF e etc...

No Bloco T0CON temos:

T08BIT, T0CS, PSA, T0PS2, T0PS1, T0PS,TMR0ON, TMR0IF e etc...

Gostaria que alguém me explicasse como essa associação é feita.

Obs: Estou usando o compilador C18 da Microchip!

Link para o comentário
Compartilhar em outros sites

Olá rafael.luc

Agradeço muito a sua atenção!

Mas eu conheço as funções da maioria destes registradores!

A minha dúvida é como eles foram agrupados, alguém me sugeriu que talvez foi utilizado estruturas "struct" ou uniões "unions".

Será que você ou alguém do fórum podia postar uma maneira de se fazer isto!

Agradeço muito pela atenção de todos!

Link para o comentário
Compartilhar em outros sites

Perfeitamente vtrx!

Você tem toda razão em afirmar que os registradores são posições físicas no micro, pois isto está intrinsecamente ligado ao hardware!

Vou citar um exemplo, afim de me expressar de forma mais clara!

Tomamos como exemplo os pinos do PORTA!

Quando queremos acessar somente um pino desta porta, fazemos isto da seguinte forma:

PORTAbits.RAx, onde x é o numero correspondente ao pino que queremos acessar!

Isto me leva a pensar que o PORTA é uma estrutura que contém registradores referentes aos pinos!

Eu sei que uma struct é manipulada da seguinte forma:

struct identificador

{

tipo var 1

tipo var 2

...

tipo var n

} variavel_estrutura;

ex:

struct aluno

{

char nome[50];

char telefone[15];

int id;

}ALUNO;

para acessar (no caso neste exemplo, vamos realizar uma operação de escrita) os campos da estrutura acima, fazemos:

ALUNO.nome= "João";

ALUNO.telefone= "0(11) 5525-3457";

ALUNO.id= 01;

por analogia, nos comportamos da mesma forma quando fazemos:

PORTAbits.RA0 = ALUNO.id

tratamos as coisas do mesmo modo!

Sei lá... talvez poderia ser:

struct port

{

short RA0;

short RA1;

...

short RA7;

}typedef PORTAbits;

desculpe-me pela ignorância, pois sou iniciante em microcontroladores e só procuro por ajuda!

Agradeço muito a todos que tentam e que tentaram ajudar!

Boa tarde!

Link para o comentário
Compartilhar em outros sites

Vamos por partes :D

Tomamos como exemplo os pinos do PORTA!

Quando queremos acessar somente um pino desta porta, fazemos isto da seguinte forma:

PORTAbits.RAx, onde x é o numero correspondente ao pino que queremos acessar!

Isto me leva a pensar que o PORTA é uma estrutura que contém registradores referentes aos pinos!

Um PORT e um registrador, tem o tamanho de 1 byte (8 bits) ou menos, isso facilita a programação, por exemplo

PORTA.0 = true

PORTA.1 = false

PORTA.2 = false

PORTA.3 = false

PORTA.4 = false

PORTA.5 = false

PORTA.6 = false

PORTA.7 = true

Para setar as portas igual ao exemplo acima você poderia fazer isso:

PORTA = 0x81

struct aluno

{

char nome[50];

char telefone[15];

int id;

}ALUNO;

para acessar (no caso neste exemplo, vamos realizar uma operação de escrita) os campos da estrutura acima, fazemos:

ALUNO.nome= "João";

ALUNO.telefone= "0(11) 5525-3457";

ALUNO.id= 01;

Seu "struct" dependendo da linguagem tem outro nome, seria um método tem haver com alto nível de programação do complilador.

PORTAbits.RA0 = ALUNO.id

A variável id é um inteiro enquanto que PORTAbits.RA0 é binário então não poderia fazer isso, mas poderia fazer isso PORTA = ALUNO.id

struct aluno

{

char nome[50];

char telefone[15];

int id;

}ALUNO;

ALUNO.nome= "João";

ALUNO.telefone= "0(11) 5525-3457";

ALUNO.id= 01;

No caso aqui ALUNO é um objeto que não tem ligação com hardware do microcontrolador, outro detalhe é que existe variáveis de programa que pode-se confundir com registradores de hardware, pois são acessadas de mesma forma, EX:

variável byte;

variável = 0x81

Para acessar cada bit da variável você faz isso:

variável.0

variável.1

variável.2

variável.3

...

...

...

No bloco INTCON temos:

Alguns registradores agrupados ou associados, tais como,GIE, TMR0IF e etc...

INTCON é um registrador que vale um byte, GIE, TMR0IF são chaves de um bit que pertence a esse registrador, no link que coloquei explica melhor.

Eu entendi sua duvida, não conheço seu compilador. Sua duvida ficaria mais fácil de entender se pergunta-se como acessar esses registradores no compilador C18

Link para o comentário
Compartilhar em outros sites

Então Pedro,a programação C,no caso,é apenas uma adaptação para Microcontroladores.

Quando voce usa uma estrutura,o compiladore verifica o tipo de micro e tenta fazer 'milagres' para transformar o struct em ASM,pois o Micro utiliza uma programação mais direta,que no caso é o ASM.

Evite programar um micro como se estivesse fazendo um programa para PC,lembre-se que os compiladores de alto nível ten que seguir regras,mesmo que estas regras sejam inúteis para o micro.

Sempre de uma lida no datasheet do micro que for utilizar.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!