Sam
Sam

Reputation: 1145

How Can I change objects name by a loop in C lang?

How Can I change objects name by a loop?

I want create a light effect like knight-rider's one. With a PIC

I thought instead of turning on and off manually to use a loop for change RB line number.

I want to change the last number of this Port line name: like RB01 RB02 like this

my code is like this

for(int i = 0; i>6 ; i++ ){

PORTB = 0X00;
RB+i = 1;

}

Are there any kind of method do something like this? thanks

Upvotes: 1

Views: 80

Answers (4)

Mats Petersson
Mats Petersson

Reputation: 129504

I would probably use a table:

struct portbits
{
   sometype bit;   // Not quite sure what "RB0..RB5" actually translate to. 
};

struct portbits bits[] =
{
   RB00, 
   RB01, 
   RB02, 
   RB03, 
   RB04, 
   RB05, 
   RB06, 
   RB07, 
};

for(i = 0; i < 7; i++)
{
   bits[i] = 1; 
}

Upvotes: 1

Paul R
Paul R

Reputation: 213080

It's not very elegant, but one way is to do it like this:

PORTB = 0x00;
for (i = 0; i < 6; ++i)
{
    RB00 = (i == 0);
    RB01 = (i == 1);
    RB02 = (i == 2);
    RB03 = (i == 3);
    RB04 = (i == 4);
    RB05 = (i == 5);
    // note: you probably want to put a delay in here, e.g. 200 ms
}

If you want to keep the previous LEDs on each time you turn on a new one then you can do that like this:

PORTB = 0x00;
for (i = 0; i < 6; ++i)
{
    RB00 = (i >= 0);
    RB01 = (i >= 1);
    RB02 = (i >= 2);
    RB03 = (i >= 3);
    RB04 = (i >= 4);
    RB05 = (i >= 5);
    // note: you probably want to put a delay in here, e.g. 200 ms
}

Upvotes: 2

Potatoswatter
Potatoswatter

Reputation: 137900

Assuming RB01, RB02, etc are just convenient #defines for accessing the bits in PORTB, you can write the loop with bitwise arithmetic and not use RB0* at all.

for ( int i = 0; i != 6; ++ i ) {
    PORTB = 1 << i; /* one light at a time */
    /* or */
    PORTB = ( 1 << i + 1 ) - 1; /* light all in sequence */
}

Upvotes: 4

junix
junix

Reputation: 3211

No, there is no way to "generate" symbol names that way. You can use bit masks for manipulating the latch register of the port in question.

Upvotes: 1

Related Questions