[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
В 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