[an error occurred while processing this directive] [an error occurred while processing this directive]
В тех случаях, когда есть вероятность испортить его содержимое и тем самым сбить с толку последующие команды
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено BLACKEAGLE 17 апреля 2002 г. 14:21
В ответ на: Ответ: ATMega103 отправлено Aleksey449 17 апреля 2002 г. 13:50

В AVR команды переходов, пересылок и битовых операций (с битами в I/O registers) не меняют SREG, поэтому в тех случаях, когда в функции и даже в процедуре обработки прерывания (ISR) используются ТОЛЬКО эти команды, сохранения SREG не потребуется. В тех случаях, когда предыдущее состояние SREG важно (например, при многобайтовом сложении с попутной проверкой на достижение какого-либо предельного значения), его следует сохранить. Наиболее удобно для этого использовать какой-либо нижний регистр (r1..r15, назвав его, к примеру, stat) и пару команд - mov stat,sreg для сохранения и mov sreg,stat для восстановления. Для ISR обязательно использовать другой регистр (назовите его, к примеру, istat), т.к. иначе ISR запортит и SREG, и stat, и основная программа об этом даже не узнает.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru