Página 1 de 2
microc

Enviado:
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 ) .

Enviado:
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

Enviado:
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

Enviado:
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

Enviado:
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ç

Enviado:
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.
+++

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

Enviado:
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

Enviado:
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.
+++

Enviado:
25 Fev 2008 11:28
por rebelk
Sergio38br
vc poderia mostrar um exemplo , pois eu não entendi e exemplo do help

Enviado:
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

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

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

Enviado:
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 ?

Enviado:
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