Счетчик команд
Размер счетчика команд составляет 9 (модели ATtiny11x, ATtiny12x, ATtiny15L) или 10 (модели ATtiny28x) разрядов. Напрямую (как регистр) счетчик команд из программы недоступен. При нормальном выполнении программы содержимое счетчика команд автоматически увеличивается на 1 или на 2 (в зависимости от выполняемой команды) в каждом машинном цикле. Этот порядок нарушается при выполнении команд перехода, вызова и возврата из подпрограмм, а также при возникновении прерываний. После включения питания, а также после сброса микроконтроллера в счетчик программ автоматически загружается значение $000. Как правило, по этому адресу располагается команда относительного перехода (RJMP) к инициализационной части программы. При возникновении прерывания в счетчик команд загружается адрес соответствующего вектора прерывания ($001…$010). Если прерывания используются в программе, по этим адресам должны размещаться команды относительного перехода к подпрограммам обработки прерываний. В противном случае основная программа может начинаться непосредственно с адреса $001. Команды типа «проверка/пропуск» (Test & Skip) В командах этого типа производится проверка условия, результат которой влияет на выполнение следующей команды. Если условие истинно, следующая команда игнорируется. Например, команда SBRS Rd.b проверяет разряд b регистра Rd и игнорирует следующую команду, если этот разряд равен «1». В действительности переход к следующей инструкции производится увеличением счетчика команд на 1, а пропуск команды требует загрузки нового значения в счетчик команд. Следовательно, когда проверяемое условие истинно, в конвейере возникает задержка. Длительность задержки зависит от размера пропускаемой команды и составляет от одного до двух машинных циклов.
|