Oleg_svv> Все работает, но хотелось бы подправить прошивку таким образом, чтобы время ожидания было не 45 сек. а скажем 3-5 секунды.
Если всё работает, то лучше ничего не трогать)))
Я не программист, в программе разбирался 5 лет назад, сейчас вроде-бы что-то вспомнил, пусть спецы проверят.
Задержка задаётся в этой подпрограмме:
longDelay:
;1111111111111111111111111
ldi tmp,200
clr T1 ;T1 used as delay 2nd count
clr T2 ;T2 used as delay 3d count
delay_1:
;Decrement
dec T2
;Branch if Not Equal
brne delay_1
dec T1
brne delay_1
sbrs tmp,2 ; Skip if bit 2 set
sbi PORTB,0 ; Only executed if bit 2 not set
sbrc tmp,2 ; Skip if bit 2 cleared
cbi PORTB,0 ; Only executed if bit 2 not cleared
dec tmp ;temp must be preset as
brne delay_1 ; delay master count
;22222222222222222222222222222222
ldi tmp,200
clr T1 ;T1 used as delay 2nd count
clr T2 ;T2 used as delay 3d count
delay_2:
;Decrement
dec T2
;Branch if Not Equal
brne delay_2
dec T1
brne delay_2
sbrs tmp,2 ; Skip if bit 2 set
sbi PORTB,0 ; Only executed if bit 2 not set
sbrc tmp,2 ; Skip if bit 2 cleared
cbi PORTB,0 ; Only executed if bit 2 not cleared
dec tmp ;temp must be preset as
brne delay_2 ; delay master count
;333333333333333333333333333333333
ldi tmp,200
clr T1 ;T1 used as delay 2nd count
clr T2 ;T2 used as delay 3d count
delay_3:
;Decrement
dec T2
;Branch if Not Equal
brne delay_3
dec T1
brne delay_3
sbrs tmp,2 ; Skip if bit 2 set
sbi PORTB,0 ; Only executed if bit 2 not set
sbrc tmp,2 ; Skip if bit 2 cleared
cbi PORTB,0 ; Only executed if bit 2 not cleared
dec tmp ;temp must be preset as
brne delay_3 ; delay master count
;4444444444444444444444444444444444444
ldi tmp,200
clr T1 ;T1 used as delay 2nd count
clr T2 ;T2 used as delay 3d count
delay_4:
;Decrement
dec T2
;Branch if Not Equal
brne delay_4
dec T1
brne delay_4
sbrs tmp,2 ; Skip if bit 2 set
sbi PORTB,0 ; Only executed if bit 2 not set
sbrc tmp,2 ; Skip if bit 2 cleared
cbi PORTB,0 ; Only executed if bit 2 not cleared
dec tmp ;temp must be preset as
brne delay_4 ; delay master count
ret
Здесь 4 раза повторяется одинаковый код. Если оставить только один кусок, то задержка уменьшится до 10 секунд
longDelay:
;1111111111111111111111111
ldi tmp,200
clr T1 ;T1 used as delay 2nd count
clr T2 ;T2 used as delay 3d count
delay_1:
;Decrement
dec T2
;Branch if Not Equal
brne delay_1
dec T1
brne delay_1
sbrs tmp,2 ; Skip if bit 2 set
sbi PORTB,0 ; Only executed if bit 2 not set
sbrc tmp,2 ; Skip if bit 2 cleared
cbi PORTB,0 ; Only executed if bit 2 not cleared
dec tmp ;temp must be preset as
brne delay_1 ; delay master count
ret
Теперь если вместо
ldi tmp,200
написать
ldi tmp,100
то задержка уменьшится ещё вдвое, до 5 с. И так далее.
Но после изменения программы нужно откомпилировать в VMLab, а его у меня сейчас нет.