This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

how to dynamically assign port pins

I have several identical devices which I want to connect to differing port pins. I want to pass to my function, which device, and then have the function perform a switch statement dynamically assigning clock, oe, strobe, data lines to the port pins for that device. For example,
function(int ic)
sbit CLOCK;
sbit DATA_OUT;
sbit OE;
sbit STROBE;

switch(chip){
case 0:
CLOCK = P1^0;
DATA_OUT = P1^2;
OE = P1^7;
STROBE = P3^4;
break;

case 1:
sbit CLOCK = P1^0;
sbit DATA_OUT = P1^2;
sbit OE = P1^7;
sbit STROBE = P3^4; break;
}

but the compiler pukes on this--giving syntax error near each 'sbit' declaration and use. However, if I declare the sbit's fixed at the top of the file, the compiler is happy-- but then I would have to duplicate the function with multiple copies referencing the port pins in question for that device.

Any ideas on how to make this work?

THanks!

Parents
  • Please read the instructions about posting code - then your layout will work!

    Your code

    switch(chip){
    case 0:
       sbit CLOCK = P1^0;
       sbit DATA_OUT = P1^2;
       sbit OE = P1^7;
       sbit STROBE = P3^4;
    break;
    
    case 1:
       sbit CLOCK = P1^0;
       sbit DATA_OUT = P1^2;
       sbit OE = P1^7;
       sbit STROBE = P3^4;
    break;
    }
    Is equivalent, in pure ANSI 'C', to something like:
    switch(chip){
    case 0:
       char CLOCK;
       char DATA_OUT;
       char OE;
       char STROBE;
    break;
    
    case 1:
       char CLOCK;
       char DATA_OUT;
       char OE;
       char STROBE;
    break;
    }
    Which obviously won't compile!

    The sbit keyword defines an identifier - you can't have multiple definitions of the same identifier!

Reply
  • Please read the instructions about posting code - then your layout will work!

    Your code

    switch(chip){
    case 0:
       sbit CLOCK = P1^0;
       sbit DATA_OUT = P1^2;
       sbit OE = P1^7;
       sbit STROBE = P3^4;
    break;
    
    case 1:
       sbit CLOCK = P1^0;
       sbit DATA_OUT = P1^2;
       sbit OE = P1^7;
       sbit STROBE = P3^4;
    break;
    }
    Is equivalent, in pure ANSI 'C', to something like:
    switch(chip){
    case 0:
       char CLOCK;
       char DATA_OUT;
       char OE;
       char STROBE;
    break;
    
    case 1:
       char CLOCK;
       char DATA_OUT;
       char OE;
       char STROBE;
    break;
    }
    Which obviously won't compile!

    The sbit keyword defines an identifier - you can't have multiple definitions of the same identifier!

Children
No data