repeat a code a certain amount of times

Post your requests and ideas for the mikroElektronika website & forums.
Post Reply
Author
Message
samdreeze1
Posts: 1
Joined: 21 Feb 2023 09:59

repeat a code a certain amount of times

#1 Post by samdreeze1 » 21 Feb 2023 10:19

Hello everyone, there is a portion of code that I want to repeat 32 times and then stop until the input goes to low again. Instead of copying and pasting the code 32 times as shown below, I am sure that there is a way to tell the micro controller to run the code 32 times. I am using the PIC18F452. Copying a pasting a code over and over gets too long to the point that if i need to repeat a code 100 times, i will run out of memory. The software I am using is microC pro v.7.1.0.

Can anyone please show me what I need to type in order to make the chip repeat it 32 times. By the way, my code works well but as I mentioned, what if I wanted to repeat the code 100 time...I will be way to long if I copy and paste it 100 times.

Thanks in advance.

Here is the code....

void main()
{

ADCON1=7; //Turn OFF analog
INTCON2=0; //pull ups enable


TRISC.F0 = 0;
TRISC.F1 = 0;
TRISC.F2 = 0;
TRISC.F3 = 0;
TRISB.F0 = 1;
TRISB.F1 = 1;

do
{


if(PORTB.F0 == 0 )

{
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);



}



if(PORTB.F1== 0 )
{

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);


PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);


PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00001100;
Delay_ms(500);

PORTC = 0b00001001;
Delay_ms(500);
PORTC = 0b00000011;
Delay_ms(500);
PORTC = 0b00000110;
Delay_ms(500);
PORTC = 0b00001100;

}
}
while(1); // loop executed infinite times
}

sgssn
Posts: 34
Joined: 13 Sep 2021 16:24

Re: repeat a code a certain amount of times

#2 Post by sgssn » 22 Feb 2023 08:27

Hello
put it in a subroutine: f.e.:

void main( void )
{
int i = 0;
Setup();

while(1);
{
if( i < 32 )
{
myFunc();
i++;
}
}
}

frank.malik
Posts: 96
Joined: 09 Apr 2021 20:37

Re: repeat a code a certain amount of times

#3 Post by frank.malik » 22 Feb 2023 08:55

Hi samdreeze1,

it seems that you like to produce a specific pattern on PortC, with a delay of 500ms between each new value.
What about placing everything in a table, and get the pattern values from this table?

This is not exactly the solution, but should give you some ideas.

Code: Select all


uint8_t pattern_value[] = { 
	0b00000011,
	0b00001001,
	0b00001100,
...
} ;

if(PORTB.F1== 0 )
{
for ( i=0 ; i<32 ; i++ )
	{
		PORTC = pattern_value[i] ;
		Delay_ms(500);
	}
}
Kind regards
Frank

Fusion for STM32 v8, STM32F407ZG@168MHz, 4" TFT capacitive
mikromedia 3, PIC32MZ2048EFH100@200MHz, 3" TFT capacitive
NECTO Studio 3.0.0, mikroC AI for ARM/PIC32, mikroSDK v.2.7.2

Post Reply

Return to “Website & Forums Wishlist”