// Вот у меня так получилось.
/////////////////////////////////////////////
// Си-ФАЙЛ
/////////////////////////////////////////////
// Задержка на 10000 тактов ( аргумент х=10000).
// Для volatile x при вызове из Си надо из х вычитать 6,
// позтому минимальный аргумент равен 26 (т.к. для самой
// asm-функции минимальный аргумент = 16 )
x = PINA + 10000;
Delay_Int_Cycles( x - 6 ); // volatile аргумент 26...65535
//-------------------------------------
// Задержка на 10000 тактов ( аргумент y=10000).
// Для non-volatile x при вызове из Си надо из х вычитать 3,
// позтому минимальный аргумент равен 23 (т.к. для самой
// asm-функции минимальный аргумент = 16 )
y = PINB + 10000;
Delay_Int_Cycles( y - 3 ); // non-volatile аргумент 23...65535
//========================================
/////////////////////////////////////////////
// ASM-ФАЙЛ
/////////////////////////////////////////////
// Задержка N циклов, задаваемая программистом
// в регистрах R16,R17. Диапазон 16...65535
// Задержка CALL не учитывается!!!
PUBLIC Delay_Int_Cycles
/////////////////////////////////////////////
RSEG CODE
/////////////////////////////////////////////
Delay_Int_Cycles:
subi R16,16 ; 1
sbci R17,0 ; 1
lsr R17 ; 1
ror R16 ; 1
brcs Dl_000 ; 1(2)
Dl_000:
lsr R17 ; 1
ror R16 ; 1
brcs Dl_001 ; 1(2)
Dl_001:
brcs Dl_002 ; 1(2)
Dl_002:
subi R16,1 ; 1
sbci R17,0 ; 1
brne Dl_002 ; 1(2)
ret ; 4
/////////////////////////