почему бы не перенести задержку в 1 с в функцию, обеспечивающую delay_s(uint32_t seconds)
, и в функцию, обеспечивающую delay_m(uint32_t minutes)
void delay_s(uint32_t seconds)
{
while(seconds){
__delay_ms(1000);
seconds--;
}
}
void delay_m(uint32_t minutes)
{
while(minutes){
delay_s(60);
minutes--;
}
}
Но:
Вы должны знать, что это полностью блокирует ваши микроСпрограмма.Он не будет реагировать на нажатие клавиш.Это может быть хорошо, но, возможно, вы хотите, чтобы задержка была сброшена до 90 минут, если во время задержки будет нажата клавиша.
Я бы предложил реализовать все это с прерываниями и таймерами.Установите таймер, который будет запускаться один раз в секунду, и обратный отсчет глобальной переменной (volatile
!) Внутри isr, который был установлен вашим основным циклом.Если счетчик достигает 0, ваш isr может отключить ваш выход.
Таким образом, ваш микроконтроллер может обрабатывать другие объекты в главном цикле и не блокируется функцией __delay
.