Проще всего загнать этот код в АВР-студио и посмотреть Cycle Counter до и после выполнения этой подпрограммы. Получилось 404051 циклов, включая вызов подпрограммы командой rjmp и возвращение из нее
Точно можно, конечно, посчитать и вручную, но это не совсем удобно. Например для циклов переменных Cnt0 и Cnt1 получится что-то вроде такой штуки [[[(1+1+2)*99+(1+1+1)]+1+1+2]*99]+[[(1+1+2)*99+(1+1+1)]+1+1+1]
.include "2313def.inc"
.def temp_h=r16
.def Cnt0=r17
.def Cnt1=r18
.def Cnt2=r19
.org 0x00
rjmp start
;===================================
;Подпрограмма задержки
Wait:
ldi Cnt2,10
Wait_out:
ldi Cnt1,100
Wait_mid:
ldi Cnt0,100
Wait_in:
nop
dec Cnt0
brne Wait_in
dec Cnt1
brne Wait_mid
dec Cnt2
brne Wait_out
ret
;===================================
start:
ldi temp_h,low(RAMEND)
out spl,temp_h
main_loop:
rcall Wait
rjmp main_loop
Если хочется предусмотреть выход из задержки:
....
dec Cnt0
sbis PINB.2 проверка - если бит в нуле, то выход.
ret
brne Wait_in
...
... как здесь отступы делать?..
Сообщение отредактировал tazik - Apr 6 2008, 06:46