Допустим есть ТЗ: сделать прибор, который должен:
- считывать температуру с датчика по шине TWI
- считывать значение напряжения с АЦП с датчика влажности
- расчитывать значение влажности в общепринятых единицах
- выдать предупреждающие сигналы в случае превышения норм
- показать значения на дисплее
Зада просто и понятна (хоть и высосана из пальца). Реализовал бы всё это дело я так:
Код
#include <io.h>
volatile int counter;
int main()
{
//инициализирую всё и вся
for(;;) //пустой бесконечный цикл
;
}
ISR(SIG_OUTPUT_COMPARE1A)
{
switch(counter)
{
case 100: BeginTempConvers(); break; //посылаю запрос для начала считывания температуры
case 200: GetADCValue(); break; //считываю значение с АЦП
case 300: ProcessADCValue(); break; //раситываю необходимые значения
case 400: GetTempValue(); break; //считываю температуру
case 500: SetAlarm(); break; //проверяю значения и вывожу аварийные сигналы если надо
case 600: DisplayValues(); break; //вывожу все данные на экран
};
counter++;
if(counter == 601)
counter = 0;
}
volatile int counter;
int main()
{
//инициализирую всё и вся
for(;;) //пустой бесконечный цикл
;
}
ISR(SIG_OUTPUT_COMPARE1A)
{
switch(counter)
{
case 100: BeginTempConvers(); break; //посылаю запрос для начала считывания температуры
case 200: GetADCValue(); break; //считываю значение с АЦП
case 300: ProcessADCValue(); break; //раситываю необходимые значения
case 400: GetTempValue(); break; //считываю температуру
case 500: SetAlarm(); break; //проверяю значения и вывожу аварийные сигналы если надо
case 600: DisplayValues(); break; //вывожу все данные на экран
};
counter++;
if(counter == 601)
counter = 0;
}
Так вот вопрос - хорошо ли я делаю? Какие есть ещё способы реализации поставленной задачи. Просто мне почему то кажется, что всю логику работы прибора нехорошо запихивать в таймер...