В C-SPY отлаживается программа... Вроде бы ысе нормально, но, дойдя до некоторой строчки
Код
WriteFloatValue(0, intDigits, fraqDigits);
переходит не на следующую строку (без зависимости от того. входим мы в эту функцию или нет...), а в начало программы.
Следующая строка
Код
lcdCursorMove(-nDigits);
Сама функция
Код
// Функция реализует вывод на экран ЖКИ вещественного числа, представляемого
// 2-х байтным целым, младшие 2 разряда которого являются дробными. Значения
// лежат в диапазоне от 0.00 до 655.35. intDigits - задает количество разря-
// дов целой части, fraqDigits - количество разрядов дробной части
void WriteFloatValue(unsigned short Value, unsigned char intDigits,
unsigned char fraqDigits)
{ unsigned short Divisor = INIT_DEC_MASK_VALUE;
unsigned short tmpValue;
unsigned char i,chDigit;
tmpValue = Value; // tmpValue - рабочия копия числа
// Рассматриваем целую часть числа Value
for (i=MAX_INT_POSITIONS; i>0; i--)
{ chDigit = tmpValue / Divisor; // Цифра i-го разряда числа
tmpValue -= chDigit * Divisor; // Устранение i-го разряда из числа
if (i <= intDigits) // Добрались до отображаемых разрядов
{ chDigit += 0x30; // Формируем код символа
lcdWriteData(chDigit); // Вывод цифры на индикатор
}
Divisor /= 10;
}
lcdWriteData(0x2E); // Ставим десятичную точку
// Рассматриваем дробную часть числа Value
for (i=fraqDigits; i>0; i--)
{ chDigit = tmpValue / Divisor; // Цифра i-го разряда числа
tmpValue -= chDigit * Divisor; // Устранение i-го разряда из числа
chDigit += 0x30; // Формируем код символа
lcdWriteData(chDigit); // Вывод цифры на индикатор
Divisor /= 10;
}
}
// 2-х байтным целым, младшие 2 разряда которого являются дробными. Значения
// лежат в диапазоне от 0.00 до 655.35. intDigits - задает количество разря-
// дов целой части, fraqDigits - количество разрядов дробной части
void WriteFloatValue(unsigned short Value, unsigned char intDigits,
unsigned char fraqDigits)
{ unsigned short Divisor = INIT_DEC_MASK_VALUE;
unsigned short tmpValue;
unsigned char i,chDigit;
tmpValue = Value; // tmpValue - рабочия копия числа
// Рассматриваем целую часть числа Value
for (i=MAX_INT_POSITIONS; i>0; i--)
{ chDigit = tmpValue / Divisor; // Цифра i-го разряда числа
tmpValue -= chDigit * Divisor; // Устранение i-го разряда из числа
if (i <= intDigits) // Добрались до отображаемых разрядов
{ chDigit += 0x30; // Формируем код символа
lcdWriteData(chDigit); // Вывод цифры на индикатор
}
Divisor /= 10;
}
lcdWriteData(0x2E); // Ставим десятичную точку
// Рассматриваем дробную часть числа Value
for (i=fraqDigits; i>0; i--)
{ chDigit = tmpValue / Divisor; // Цифра i-го разряда числа
tmpValue -= chDigit * Divisor; // Устранение i-го разряда из числа
chDigit += 0x30; // Формируем код символа
lcdWriteData(chDigit); // Вывод цифры на индикатор
Divisor /= 10;
}
}
При прошивке этой программы в микросхему она работает стабильно... Сброса системы ни разу не наблюдал...