Continue to Site

# Algorithm Implementation

Status
Not open for further replies.

#### nayakajit87

##### Member level 5
Dear all

I am looking for simple algorithm input.i cant post whole code. i pasted some part of it

i am using PISO to get input from 74hc165D ic. here i am trying to read data from DIP switch. Fault_Array[0] uses to read 8 position DIP switches
Code:
void PISO_INPUT(void) {
unsigned char i;
unsigned char j, k;
unsigned char value;

byteValue = 0; // accumulates image of 8 switches
bitValue = 0;

PISO_PL_EN = 0; // latch data

for (i = 0; i <16; i++) { //TBC // 8 bits

bitValue = PISO_FAULT;
byteValue |= (bitValue << (16- 1) - i));

PISO_CLK = 1;

PISO_CLK = 0;

}

FAULT_PISO = byteValue;

Fault_Array[0] = (unsigned char)(FAULT_PISO & 0xff);

}

Now i am trying to read above input and identifying which is latest input. IN this code assume i have 4 input F1,F2,F3,F4 where F4 is latest f3 is 3rd and f1 is first. as per below code F4 will be flashing and remaining F1,F2,F3,will be steady. i m expecting First input F1 flash first later should be steady

similarly if order F2 is first, F3,f1,F4 i/p F2 is first i/p it should be flashing and remaining should be steady.

here i am checking which input is latest input. Below i have checked its working for LIFO latest in first out operation. but i need reverse first input detect should be flashing remaining should be steady. i need to change CHK_WINDOW() s

Code:
void CHK_WINDOW() {

for (w = 0; w <= 8; w++) {
switch (w) {

case 1:
if (((Fault_Array[0] & 0x01) == 0x01) != intype.INF25) {
Debounce25++;
if (Debounce25 >9) {
if (((Fault_Array[0] & 0x01) == 0x01) != intype.INF25) {
if ((WINDOW[0] & 0x01) == 0x00) {
WINDOW[0] |= 0x01;
PREVIOUS_FLT1 = PREVIOUS_FLT;
PREVIOUS_FLT = LATEST_FLT;
LATEST_FLT = 0x19;
Debounce25 = 0;
}
}
}

} else
Debounce25 = 0;
break;

case 2:
if (((Fault_Array[0] & 0x02) == 0x02) != intype.INF26) {
Debounce26++;
if (Debounce26 >9) {
if (((Fault_Array[0] & 0x02) == 0x02) != intype.INF26) {
if ((WINDOW[0] & 0x02) == 0x00) {
WINDOW[0] |= 0x02;

PREVIOUS_FLT1 = PREVIOUS_FLT;
PREVIOUS_FLT = LATEST_FLT;
LATEST_FLT = 0x1A;
Debounce26 = 0;
}
}
}
} else
Debounce26 = 0;
break;

case 3:
if (((Fault_Array[0] & 0x04) == 0x04) != intype.INF27) {
Debounce27++;
if (Debounce27 >9) {
if (((Fault_Array[0] & 0x04) == 0x04) != intype.INF27) {
if ((WINDOW[0] & 0x04) == 0x00) {
WINDOW[0] |= 0x04;

PREVIOUS_FLT1 = PREVIOUS_FLT;
PREVIOUS_FLT = LATEST_FLT;
LATEST_FLT = 0x1B;
Debounce27 = 0;
}

}
}
} else
Debounce27 = 0;
break;

case 4:
if (((Fault_Array[0] & 0x08) == 0x08) != intype.INF28) {
Debounce28++;
if (Debounce28 >9) {
if (((Fault_Array[0] & 0x08) == 0x08) != intype.INF28) {
if ((WINDOW[0] & 0x08) == 0x00) {
WINDOW[0] |= 0x08;

PREVIOUS_FLT1 = PREVIOUS_FLT;
PREVIOUS_FLT = LATEST_FLT;
LATEST_FLT = 0x1C;
Debounce28 = 0;
}
}
}
} else
Debounce28 = 0;
break;

default:
break;

}

}

}
using i am trying to flash output
Code:
void FLASH_LED(void) {

unsigned char Z;

for (Z = 0; Z <= 8; Z++)

switch (Z) {

case 1:
if (((ACKPRESS[0] & 0x01) == 0x00) && ((WINDOW[0] & 0x01) == 0x01)) {

if (LATEST_FLT == 0X19)

{

WINDOW_PATTERN &= 0x7FFFFFFF;
WINDOW_PATTERN |= 0x80000000;
} else if (PREVIOUS_FLT == 0X19) {
WINDOW_PATTERN &= 0x7FFFFFFF;
WINDOW_PATTERN |= 0x80000000;

} else if (PREVIOUS_FLT1 == 0X19) {
WINDOW_PATTERN &= 0x7FFFFFFF;
F25_Flag = 1;
} else if (F25_Flag == 1)
WINDOW_PATTERN &= 0x7FFFFFFF;

else if ((WINDOW[0] & 0x01) == 0x01) {
WINDOW_PATTERN &= 0x7FFFFFFF;
}

}

break;

case 2:
if (((ACKPRESS[0] & 0x02) == 0x00) && ((WINDOW[0] & 0x02) == 0x02)) {

if (LATEST_FLT == 0X1A)

{
WINDOW_PATTERN &= 0xBFFFFFFF;
WINDOW_PATTERN |= 0x40000000;
} else if (PREVIOUS_FLT == 0X1A) {
WINDOW_PATTERN &= 0xBFFFFFFF;
WINDOW_PATTERN |= 0x40000000;

} else if (PREVIOUS_FLT1 == 0X1A) {
WINDOW_PATTERN &= 0xBFFFFFFF;
F26_Flag = 1;
} else if (F26_Flag == 1)
WINDOW_PATTERN &= 0xBFFFFFFF;

}

break;
case 3:
if (((ACKPRESS[0] & 0x04) == 0x00) && ((WINDOW[0] & 0x04) == 0x04)) {

if (LATEST_FLT == 0X1B)

{
WINDOW_PATTERN &= 0xDFFFFFFF;
WINDOW_PATTERN |= 0x20000000;
} else if (PREVIOUS_FLT == 0X1B) {
WINDOW_PATTERN &= 0xDFFFFFFF;
WINDOW_PATTERN |= 0x20000000;

} else if (PREVIOUS_FLT1 == 0X1B) {
WINDOW_PATTERN &= 0xDFFFFFFF;
F27_Flag = 1;
} else if (F27_Flag == 1)
WINDOW_PATTERN &= 0xDFFFFFFF;

else if ((WINDOW[0] & 0x04) == 0x04) {

WINDOW_PATTERN &= 0xDFFFFFFF;

}

}

break;

case 4:
if (((ACKPRESS[0] & 0x08) == 0x00) && ((WINDOW[0] & 0x08) == 0x08)) {

if (LATEST_FLT == 0X1C)

{
WINDOW_PATTERN &= 0xEFFFFFFF;
WINDOW_PATTERN |= 0X10000000;
} else if (PREVIOUS_FLT == 0X1C) {
WINDOW_PATTERN &= 0xEFFFFFFF;
WINDOW_PATTERN |= 0X10000000;

} else if (PREVIOUS_FLT1 == 0X1C) {
WINDOW_PATTERN &= 0xEFFFFFFF;
F28_Flag = 1;
} else if (F28_Flag == 1)
WINDOW_PATTERN &= 0xEFFFFFFF;

else if ((WINDOW[0] & 0x08) == 0x08) {

WINDOW_PATTERN &= 0xEFFFFFFF;

}

}

default:
break;

}

}

You sent us three fragments of mystery code with only one comment between them.

We don't stand a chance of working out what is wrong if we don't even know what the variables are for.

Brian.

Status
Not open for further replies.