TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rogarji en 16 de Febrero de 2005, 04:30:00

Título: Pequeña duda
Publicado por: rogarji en 16 de Febrero de 2005, 04:30:00
Quiero acceder a los bits de un registro, para ello me he creado lo siguiente:
struct {
   int1 GPIF;
   int1 INTF;
   int1 T0IF;
   int1 GPIE;
   int1 INTE;
   int1 T0IE;
   int1 PEIE;
   int1 GIE; } INTCON;
#byte INTCON = 0x0B;

La pregunta es... ¿Como se que por ejemplo mi bit0 es el GPIF, el bit1 es el INTF..... etc? ¿Hay alguna manera de asignar cada variable a un pin concreto?
Gracias.
Título: RE: Pequeña duda
Publicado por: Nocturno en 16 de Febrero de 2005, 04:44:00
Yo lancé hace poco una pregunta parecida, y se desarrolló a lo largo de este post:
http://miarroba.com/foros/ver.php?foroid=46840&temaid=3266790

el ejemplo del final del post, hecho con la sentecia UNION funciona muy bien y es muy cómodo para usarlo.
Título: RE: Pequeña duda
Publicado por: rogarji en 16 de Febrero de 2005, 05:00:00
Creo que no me he explicado bien.
Lo que quiero es poder poner a 1 o a 0 un pin en concreto.

struct {
   int1 GPIF;
   int1 INTF;
   int1 T0IF;
   int1 GPIE;
   int1 INTE;
   int1 T0IE;
   int1 PEIE;
   int1 GIE; } INTCON;
#byte INTCON = 0x0B;

INTCON.GPIF=1 -> Con esto pongo a 1 el bit GPIF del registro INTCON pero no se si ese bit es el bit0 o el bit1 o el bit2... etc del registro. Lo que quiero es que GPIF sea el bit1, INTF sea el bit 2... de manera que si pongo INTCON.GIE=1 el registro INTCON valga 0x80

Otra duda es... ¿que significa lo de los dos puntos al lado de la variable?
int1 GPIF:1;

Y por ultimo....se que estare diciendo una burreria pero...¿alguien conoce de la existencia de algun programa que pase de ensamblador a C? ¿no verdad?
Título: RE: Pequeña duda
Publicado por: Nocturno en 16 de Febrero de 2005, 05:29:00
Yo lo haría así:
Codigo:
union {
int8 reg;
struct {
unsigned GPIF:1;
unsigned INTF:1;
unsigned T0IF:1;
unsigned GPIE:1;
unsigned INTE:1;
unsigned T0IE:1;
unsigned PEIE:1;
unsigned GIE:1; } TIPO_INTCON;

TIPO_INTCON INTCON
INTCON.reg = 0x0B;

Los bits son ocupados en el mismo orden que los defines en el struct, de LSB a MSB.
Si quieres encender, por ejemplo, el bit 4, correspondería a INTE, y lo harías así:
INTCON.INTE=1;

Como habrás deducido, ":1" significa que cada campo ocupa sólo 1 bit.