Собрал я платку, подключил 5 кнопочек, реализовал их обработку в цикле. Потом прикрутил датчик DS1820, помучился 3 дня - работает! Запускаю все вместе - фиг там. Дело в том, что измерение температуры я тоже запихал в цикл. ИЗмерение длится 200 мс, анализ состояния кнопок - мизер. Далее начинается следующий цикл. В итоге, вероятность того, что программ в момент нажатия кнопки будет в месте определения состояиня кнопок крайне мала. Как сделать?
Подозреваю, что как-то надо прерывание организовать от кнопок, и черт, с ним, жертвовать данными измерения температуры в момент нажатия. Но как это практически? Помогите советом и кодом.
Пишу в CodeVision. У меня это примерно так:
Код
void main()
{
DisplayInit();
devices=w1_search(0xf0,rom_code);
while (1)
{
temp=ds1820_temperature_101(&rom_code[0][0]);
Display(temp>>1,(temp&0x01)*50);
// Анализируем кнопки
if (PINB.0==0)
{
delay_ms(20);
if (PINB.0==1) HeaterOn=1;
}
if (PINB.0==1)
{
if (HeaterOn==1)
{
HeaterIn=0;
HeaterState=~HeaterState;
}
}
}
{
DisplayInit();
devices=w1_search(0xf0,rom_code);
while (1)
{
temp=ds1820_temperature_101(&rom_code[0][0]);
Display(temp>>1,(temp&0x01)*50);
// Анализируем кнопки
if (PINB.0==0)
{
delay_ms(20);
if (PINB.0==1) HeaterOn=1;
}
if (PINB.0==1)
{
if (HeaterOn==1)
{
HeaterIn=0;
HeaterState=~HeaterState;
}
}
}