Ой напишу всё же я как то подумал что при уходе в спящий может возникнуть глюк (конечно вероятность его очень низка как нужно попасть в считанные такты от перехода между операторами)
Логика глюка такова: включается INT0 прерывание и далее команда на сон но вот перед этим возникает INT0 прерывание и отключает себя далее управление возвращается обратно и дёт команда на сон МК засыпает без возможности пробуждения. Если в INT0 или 1 прерывание не отключить почему то выолнение далее не идёт и при выходе из спящего 1 нажатие не обрабатывается хз может глюк баском но было принято решение отключать прерывание при его возникновении.
Вот процедура ухода в спящий:
Sub Loff
S58 = 0
S(62) = 0
Stop Watchdog 'при уходе в спящий тест будет снят
Savek1 'сохранение в любом случае для надёжности
14st 'выключить схему
Stop Adc
S(55) = 0
S(45) = 1 'выполнить Lon
S29 = 1
Enable Int0
Powerdown
End Sub
Вот INT0
Button:
Disable Int0
S58 = 0
S(45) = 1
S29 = 1
Return
Процедура выхода из спящего:
она выполнится всегда если был уход в спящий
Sub Lon
S58 = 0
Sd(16) = 0
Reset Watchdog
Start Watchdog
Disable Int0
13st
S64 = 1
Sd(26) = 0
Start Adc
End Sub
Вопросов 2: нормально ли то что если в INT0 не отключить его то программа висит пока на порте не установится высокий уровень? Возможен ли такой глюк (практика показывает что да НО вывод сделал на основе другого глюка который возникал при выходе их спящего когда очищалась переменная и не было инициализации Lon). На фоне боязни этого глюка я сделал отключаемый режим сна правда я его не юзал а если юзнуть то через 4-6 дней девайс уже точно не сможет работать да и АКБ тоже. Глюка с уходом в сон с отключенным прерыванием не было да и спящий у меня через 700 сек.
Логика глюка такова: включается INT0 прерывание и далее команда на сон но вот перед этим возникает INT0 прерывание и отключает себя далее управление возвращается обратно и дёт команда на сон МК засыпает без возможности пробуждения. Если в INT0 или 1 прерывание не отключить почему то выолнение далее не идёт и при выходе из спящего 1 нажатие не обрабатывается хз может глюк баском но было принято решение отключать прерывание при его возникновении.
Вот процедура ухода в спящий:
Sub Loff
S58 = 0
S(62) = 0
Stop Watchdog 'при уходе в спящий тест будет снят
Savek1 'сохранение в любом случае для надёжности
14st 'выключить схему
Stop Adc
S(55) = 0
S(45) = 1 'выполнить Lon
S29 = 1
Enable Int0
Powerdown
End Sub
Вот INT0
Button:
Disable Int0
S58 = 0
S(45) = 1
S29 = 1
Return
Процедура выхода из спящего:
она выполнится всегда если был уход в спящий
Sub Lon
S58 = 0
Sd(16) = 0
Reset Watchdog
Start Watchdog
Disable Int0
13st
S64 = 1
Sd(26) = 0
Start Adc
End Sub
Вопросов 2: нормально ли то что если в INT0 не отключить его то программа висит пока на порте не установится высокий уровень? Возможен ли такой глюк (практика показывает что да НО вывод сделал на основе другого глюка который возникал при выходе их спящего когда очищалась переменная и не было инициализации Lon). На фоне боязни этого глюка я сделал отключаемый режим сна правда я его не юзал а если юзнуть то через 4-6 дней девайс уже точно не сможет работать да и АКБ тоже. Глюка с уходом в сон с отключенным прерыванием не было да и спящий у меня через 700 сек.