Как софтово перезагрузить 16f628a
Как софтово перезагрузить 16f628a
Добрый день. Подскажите, если не сложно, как именно софтово перезагрузить 628a? А именно - какие регистры требуется обнулить и что не забыть сделать помимо гото 0?
Просто надо сделать рестарт устройству по команде, прилетающей в уарт, а у меня клешни вместо рук и коржик вместо мозга, и что-то я туплю в это прекрасное и солнечное воскресенье. С прерываниями научился работать, с таймерами и ШИМом - тоже. А вот как делать пику рестарт - что-то не соображаю.
Просто надо сделать рестарт устройству по команде, прилетающей в уарт, а у меня клешни вместо рук и коржик вместо мозга, и что-то я туплю в это прекрасное и солнечное воскресенье. С прерываниями научился работать, с таймерами и ШИМом - тоже. А вот как делать пику рестарт - что-то не соображаю.
- Реклама
- Steppe
- Друг Кота
- Сообщения: 4812
- Зарегистрирован: Вс сен 17, 2017 17:44:21
- Откуда: 51.7727, 55.0988. Высота над морем 107 м. До границы 161 км.
Re: Как софтово перезагрузить 16f628a
[uquote="Tenko",url="/forum/viewtopic.php?p=4201200#p4201200"]. А вот как делать пику рестарт - что-то не соображаю.[/uquote]
Примеры:
для PIC18F
CCS --> disasm
reset_cpu(); --> 087A 00FF RESET
или
для PIC16F
88: reset_cpu();
0D9 018A CLRF 0xa
0DA 2800 GOTO 0
Примеры:
для PIC18F
CCS --> disasm
reset_cpu(); --> 087A 00FF RESET
или
для PIC16F
88: reset_cpu();
0D9 018A CLRF 0xa
0DA 2800 GOTO 0
Последний раз редактировалось Steppe Вс мар 20, 2022 17:21:58, всего редактировалось 1 раз.
Re: Как софтово перезагрузить 16f628a
Steppe, спасибо.
- Родэрик
- Нашел транзистор. Понюхал.
- Сообщения: 162
- Зарегистрирован: Чт ноя 26, 2015 23:22:35
- Откуда: не с Уфы
- Контактная информация:
Re: Как софтово перезагрузить 16f628a
Включи wdt. А в том месте где определяешь команду на сброс напиши goto $
Re: Как софтово перезагрузить 16f628a
Простой переход на 0х0000 не аналогия аппаратному сбросу - кой-чего из регистров специальных функций не переустановит.
Команда reset есть только в случае ПИК18 или улучшенной среднемладшей серий.
Как вариант - использование одного из свободных выводов МК...

Команда reset есть только в случае ПИК18 или улучшенной среднемладшей серий.
Как вариант - использование одного из свободных выводов МК...
- Реклама
Re: Как софтово перезагрузить 16f628a
Вот я про то и говорю. Если кратко - у меня там типа флаговый автомат, написанный на JALе (знаю, извращение - но в мплабе я бы ковырялся дольше, и до него руки дойдут рано или поздно). Получается так, что при простом прыжке на нуль у меня девайс уходит в бут-луп как будто при этом не обнуляется приёмный буфер уарта (а с чего бы ему обнуляться, так-то по хорошему... или всё-таки должен? не знаю...), и при первом же проходе цикл получает из него ту же самую команду на ребут и весело её обрабатывает по кругу. Какой регистр надо пнуть чтоб такого не происходило - я найти пока не смог. И вообще по ребуту из прошивки, да ещё со сбросом состояния уарта как-то не много информации нашел - все советуют только гото 0 как попугаи. При этом, ощущение такое, что от этого гото 0 даже переменные не обнуляются. Какие регистры используются при инициализации порта - посмотрел в библиотеках JALа и ДШ, попробовал RCREG обнулять и всё такое - как-то не помогает пока. Хоть ты тресни - бут-луп.
Ватчдог не хочу использовать - у меня его прескейлер занят другим таймером, а без него он слишком часто тикает, а я ещё не от всех делеев везде избавился.
На счёт CLRF 0xA - это, полагаю, я программный счетчик PCLATH обнуляю? Ну это мало поможет в моём случае, но спасибо, почитаю, запомню.
Ватчдог не хочу использовать - у меня его прескейлер занят другим таймером, а без него он слишком часто тикает, а я ещё не от всех делеев везде избавился.
На счёт CLRF 0xA - это, полагаю, я программный счетчик PCLATH обнуляю? Ну это мало поможет в моём случае, но спасибо, почитаю, запомню.
Re: Как софтово перезагрузить 16f628a
чего-то мне кажется, что твоя хотелка просто неправильная: контроллер по внешним командам должен выполнять определённые действия, а не отключать себе питание....если это в качестве устранения какой-то нештатной ситуации, то нет гарантии, что контроллер примет и отработает эту команду.....надо исходить из того, что ВСЕ как-то пользуются контроллером и только тебе захотелось чего-то нестандартного, а скорее всего просто из-за недостатка опыта...
- Steppe
- Друг Кота
- Сообщения: 4812
- Зарегистрирован: Вс сен 17, 2017 17:44:21
- Откуда: 51.7727, 55.0988. Высота над морем 107 м. До границы 161 км.
Re: Как софтово перезагрузить 16f628a
[uquote="Tenko",url="/forum/viewtopic.php?p=4201490#p4201490"]И вообще по ребуту из прошивки, да ещё со сбросом состояния уарта как-то не много информации нашел - все советуют только гото 0 как попугаи. При этом, ощущение такое, что от этого гото 0 даже переменные не обнуляются. Какие регистры используются при инициализации порта - посмотрел в библиотеках JALа и ДШ, попробовал RCREG обнулять и всё такое - как-то не помогает пока. .[/uquote]
В начале программы, где описываются всякие инициализации портов и регистров, а также переменные и массивы, добавьте строчки по обнулению нужных переменных и буферов. И фсЁ. Разве это проблема?
В начале программы, где описываются всякие инициализации портов и регистров, а также переменные и массивы, добавьте строчки по обнулению нужных переменных и буферов. И фсЁ. Разве это проблема?
Re: Как софтово перезагрузить 16f628a
Steppe, не проблема. Это изначально сделано по примеру функции инициализации порта из джаловских библиотек. Но не работает как надо. Я что-то явно упускаю.
Re: Как софтово перезагрузить 16f628a
Нужно не только рабочую область ОЗУ обнулять, но и ставить в исходное состояние задействованные в прикладной программе регистры специальных функций.
А уж затем давать переход на стартовый адрес.

А уж затем давать переход на стартовый адрес.
Re: Как софтово перезагрузить 16f628a
Хорошо, попробую вечером написать функцию, приводящую МК в стандартные состояния регистров. Может быть, найду что забыл.


