Лекция: Rcall label ;
Эта команда является командой относительного вызова (relative call),поэтому подпрограмма должна находиться в пределах 2048 команд от команды rcall.Для возврата (return)из подпрограммы используется соответствующая команда:
Ret
Можно сколько угодно вызывать подпрограммы из другой подпрограммы, например:
Sub1:
Rcall Sub2 ;
Rcall Sub3
Rcall Sub4
Ret
Start:
Rcall Sub1
До настоящего момента все наши программы были совместимы «снизу вверх», т.е. они могли работать и в более развитых моделях AVR. При использовании же подпрограмм эта совместимость нарушается, и, если вы разрабатываете такие программы для моделей, отличных от 1200 или Tiny, в секцию Initнеобходимо добавить следующие четыре строки:
Ldi temp,LOW(RAMEND); Указатель стека установлен
Out SPL,temp; на последний адрес ОЗУ
Ldi temp,HIGH(RAMEND)
Out SPH,temp
Кнопка симулятора Step Over (F10)используется для выполнения программы без захода в подпрограмму, т.е. сама подпрограмма выполняется с высокой скоростью, после чего программа останавливается на следующей строке. Кнопка Step Out (Shift + F11)используется при нахождении в теле подпрограммы. После нажатия на эту кнопку программа, выполнив команду возврата, останавливается.