Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Микроконтроллеры Silabs C8051Fxx
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Волощенко
Добрый день!
Вопрос по сути раскрыт в заголовке. Нужно получать команду через UART и генерировать полный рестарт (я программирую на С). В некоторых MCU-семействах для этого были специальные команды, например, в MCS-196 команда RST (код 0xFF).
Ответьте, кто уже испробовал. Спасибо.
AndreyS
Добрый день. Не знаю как во всех СиЛабсах, но в Ф33х и Ф12х в регистре RSTSRC есть бит SWRSF. Если в него поставить 1, то произойдет немедленный сброс системы. И после запуска эту единицу в этом регистре можно будет обнаружить. Т.е. задетектить программный сброс.
Я выполняю программный сброс именно так.
В других контроллерах (без такой возможности), не используя внешних схем, произвожу программный сброс переходом в специальную процедуру (которая все порты и память приводит в состояние = аппаратному сбросу) и выхожу из нее на вектор 0x0000. Чтобы определить такой сброс, можно переходить не на 0 вектор. Пример:

Код
org 0
LJMP Start


Org 100h
Start:
SETB Start_HW_Reset ; Указываем, что произошел аппаратный сброс
SJMP HW_Reset
SW_Reset:
CLR Start_HW_Reset   ; Указываем, что произошел программный сброс
HW_Reset:


[...]


SoftWare_Reset:

[.. запрещаем все прерывания,приводим порты, и внтуреннюю память (очищаем стек) в состояние по аппаратному сбросу или просто порты в FF, память в 0 ..]

MOV DPTR,#SW_Reset
PUSH DPL
PUSH DPH
RET
Kazap
Цитата(Волощенко @ Sep 29 2006, 13:00) *
Добрый день!
Вопрос по сути раскрыт в заголовке. Нужно получать команду через UART и генерировать полный рестарт (я программирую на С). В некоторых MCU-семействах для этого были специальные команды, например, в MCS-196 команда RST (код 0xFF).
Ответьте, кто уже испробовал. Спасибо.


Можно так- получив соответствующую команду по порту, просто запретить сброс wdt(конечно, если вы его используете) Правда, это чревато некоторой задержкой- в зависимости от режима wdt
asdf
Цитата(Волощенко @ Sep 29 2006, 12:00) *
Вопрос по сути раскрыт в заголовке. Нужно получать команду через UART и генерировать полный рестарт (я программирую на С). В некоторых MCU-семействах для этого были специальные команды, например, в MCS-196 команда RST (код 0xFF).


Смотрите в pdf на конкретную МС раздел RESET SURCES.
А в общем случае установить бит SWRSEF (четвертый) в регистре RSTSRC.
Регистр не имеет битового доступа, так что лучше командой или (orl).
alcosar
Я в прерывании делаю так:

#pragma asm
clr ea
clr a
mov psw, a
push acc
push acc
reti
#pragma endasm
Волощенко
Сделал в С8051F127 программный рестарт через регистр RSTSRC (четвертый бит SWRSEF), следующей командой:
RSTSRC |=(1<<4);

Спасибо за советы! smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.