Página 1 de 2

microc

MensagemEnviado: 22 Fev 2008 12:54
por rebelk
sei que não dar para criar flegs no microc , alguem poderia me dar um exemplo de como criar campos de bits , pois no meu programa ultiliza flegs ( bits ) .

MensagemEnviado: 22 Fev 2008 14:07
por Sergio38br
Olha pelo help aparentemente é possivel, vc tem que criar uma struct, veja o topico "Bit Fields" no help online e tambem no manual.

sergio

MensagemEnviado: 22 Fev 2008 14:27
por dreher
cara, eu uso o mikroC e crio os flags talvez de uma maneira errada, mas funciona muito bem para as minhas aplicações.

Eu defino 1 ou mais variaveis globais do tipo unsigned char.

Depois eu uso um #define para definir os flags.

Ex:

unsigned char flags;

#define flag0 flags.F0
#define flag1 flags.F1
#define flag2 flags.F2
#define flag3 flags.F3
#define flag4 flags.F4
#define flag5 flags.F5
#define flag6 flags.F6
#define flag7 flags.F7

MensagemEnviado: 23 Fev 2008 08:55
por rebelk
dreher obrigado pela ajuda , uma outra duvida me surgiu , desse modo que vc me mostrou deu certo com uma variavel char , já em uma int não dar certo , pois estou querendo manipular os bits individuais da variavel int

MensagemEnviado: 25 Fev 2008 07:30
por ze
estas macros podem lhe ser úteis:

#define setbit(var,bitno) ((var) |= 1 << (bitno))
#define clrbit(var,bitno) ((var) &= ~(1 << (bitno)))
#define xorbit(var,bitno) ((var) ^= 1 << (bitno))

funcionam no hitech c. Mas são genéricas.
Obs: no ht-c definição para variável tipo bit é STATIC BIT (var. global).

avaliar 1 bit (ou+) em 1 creio que:
if (variavel & bitno) ... deve lhe atender
( em 0 | )


abrç

MensagemEnviado: 25 Fev 2008 08:00
por andre_luis
rebelk,

Como assim, não dá pra criar flags ?
Até onde sei, a família PIC permite mapear variáveis por bit sim.

+++

MensagemEnviado: 25 Fev 2008 09:25
por rebelk
mas é o compilador que não aceita .

MensagemEnviado: 25 Fev 2008 09:47
por Sergio38br
Veja no Help e no manual do MikroC o termo "Bit Fields" , isto é um tipo especial de struct que permite acesso até 16 bits

MensagemEnviado: 25 Fev 2008 10:02
por andre_luis
Rebelk,

Dá uma olhada nesse trecho dizassemblado de um programa feito para a familia 16F, compilado em MiKroC :

Código: Selecionar todos
;T6963Cdemo.c,144 ::       else if(PORTB & 0b00000100)
$1A52   $1D06         BTFSS   PORTB, 2


Pode-se perceber que embora o programador utilizasse o recurso de mascaramento da porta, o compilador otimiza isso utilizando uma única instrução de acesso à bit.

Esse tipo de otimização também é observado por exemplo quando se é feita uma divisão por potência de 2.

Então, um mapeamento - como sugerido pelo lellis - seria realmente útil para tornar o programa mais inteligível para debugar, mas o fato é que o compilador já realiza esse mapeamento sim.


+++

MensagemEnviado: 25 Fev 2008 11:28
por rebelk
Sergio38br

vc poderia mostrar um exemplo , pois eu não entendi e exemplo do help

MensagemEnviado: 25 Fev 2008 12:49
por LeandroPIC
é simples é só vc fazer uma estrutura.

struct{

unsigned LED : 1
unsigned LED1 :1
unsigned LED2 :1
unsigned LED3 :1
unsigned LED4 :1
unsigned LED5 :1
unsigned LED6 :1
unsigned LED7 :1
unsigned LED8 :1
unsigned LED9 :1
}FLAGS;

Dese jeito vc pode declarar mais de 8 flags e o compilador usa as intruçoes:

BSF , para setar o bit
BCF,para apagar o bit

MensagemEnviado: 25 Fev 2008 12:52
por LeandroPIC
ai vai um exemplo de como usala:



FLAGS.LED = 1; aqui vc marcou o flag

FLAGS.LED = 0; aqui vc desmarca o flag

Se restar duvidas post.

MensagemEnviado: 25 Fev 2008 13:22
por rebelk
agora sim , abrigado a todos

MensagemEnviado: 26 Fev 2008 10:00
por rebelk
consegui fazer o que eu queria , criei uma biblioteca que eu chamei de
minhas_func e salvei com uma extenção .h , inclui ele no meu projeto , mas na hora da compilação o compilador não encontra o arquivo .

obs: salvei a biblioteca em mikroelektronika\mikroc\uses\ p16


o projeto é para um pic16f877a

o que eu estou fazendo de errado , alguem poderia me explicar qual o procedimento para criar novas bibliotecas ?

MensagemEnviado: 26 Fev 2008 10:12
por Sergio38br
como vc declarou o include?? tem diferença, para tirar a duvida coloca uma copia no diretorio do seu projeto