microc

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

microc

Mensagempor rebelk » 22 Fev 2008 12:54

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 ) .
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Sergio38br » 22 Fev 2008 14:07

Olha pelo help aparentemente é possivel, vc tem que criar uma struct, veja o topico "Bit Fields" no help online e tambem no manual.

sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor dreher » 22 Fev 2008 14:27

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
dreher
Byte
 
Mensagens: 489
Registrado em: 12 Out 2006 11:10
Localização: Blumenau - SC

Mensagempor rebelk » 23 Fev 2008 08:55

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
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor ze » 25 Fev 2008 07:30

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ç
Editado pela última vez por ze em 25 Fev 2008 10:33, em um total de 1 vez.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor andre_luis » 25 Fev 2008 08:00

rebelk,

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

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor rebelk » 25 Fev 2008 09:25

mas é o compilador que não aceita .
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Sergio38br » 25 Fev 2008 09:47

Veja no Help e no manual do MikroC o termo "Bit Fields" , isto é um tipo especial de struct que permite acesso até 16 bits
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor andre_luis » 25 Fev 2008 10:02

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.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor rebelk » 25 Fev 2008 11:28

Sergio38br

vc poderia mostrar um exemplo , pois eu não entendi e exemplo do help
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor LeandroPIC » 25 Fev 2008 12:49

é 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
Avatar do usuário
LeandroPIC
Byte
 
Mensagens: 163
Registrado em: 06 Jul 2007 12:19

Mensagempor LeandroPIC » 25 Fev 2008 12:52

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.
Avatar do usuário
LeandroPIC
Byte
 
Mensagens: 163
Registrado em: 06 Jul 2007 12:19

Mensagempor rebelk » 25 Fev 2008 13:22

agora sim , abrigado a todos
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor rebelk » 26 Fev 2008 10:00

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 ?
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Sergio38br » 26 Fev 2008 10:12

como vc declarou o include?? tem diferença, para tirar a duvida coloca uma copia no diretorio do seu projeto
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x