Как бы да.Alexeyslav писал(а):Теперь стало яснее почему твой финт не сработал?
В том то и дело, что вразрез логике.
По логике: зашёл - объявил, ну и отменил объявление перед выходом.
А тут по тексту значит...
Ладно, приспособимся...
Как бы да.Alexeyslav писал(а):Теперь стало яснее почему твой финт не сработал?
Код: Выделить всё
START:
LDI R22,80
LDI R21,1
GO_240:
RCALL PROHOD
ADD R22,R21
CPI R22,240
BRLO GO_240
LDI R21,-1
GO_80:
RCALL PROHOD
ADD R22,R21
CPI R22,80
BRSH GO_80
RJMP START
PROHOD:
RETI
Код: Выделить всё
START:
LDI R22,80
GO_240:
RCALL PROHOD
INC R22
CPI R22,240
BRLO GO_240
GO_80:
RCALL PROHOD
DEC R22
CPI R22,80
BRSH GO_80
RJMP START
PROHOD:
RETI
Код: Выделить всё
// До цикла:
d = 1;
// В цикле:
if (reg >= 240) {
d = -1;
}
if (reg <= 80) {
d = 1;
}
reg += d;
Код: Выделить всё
ldi Up_Down,1
sei
Start:
cpi counter2,LimitH
brsh minusas
cpi counter2,LimitL
brlo pliusas
rjmp PliusMinus
pliusas:
ldi Up_Down,1
rjmp PliusMinus
minusas:
ldi Up_Down,-1
PliusMinus:
add counter2,Up_Down
....
не смотря на то, что я и сам в своём коде вместо жесткого равенства использую не жесткое сравнение >= или <=, никто никогда мне не смог объяснить, с какого перепугу счетчик в программе вдруг примет некорректное значение? я и сам не понимаю, но да, на равно не проверяюIvanoff-iv писал(а):равно использовать не рекомендую т.к и при х=244(например) условие зашкала вверх не будет выполнено
хотя при правильном выполнении кода такого произойти и не сможет...
Код: Выделить всё
.equ SPIDIV4=0
.equ SPIDIV16=1
.equ SPIDIV64=2
.equ SPIDIV128=3
.equ hSPIE=1<<SPIE
.equ hSPE=1<<SPE
.equ hDORD=1<<DORD
.equ hMSTR=1<<MSTR
.equ hCPOL=1<<CPOL
.equ hCHAP=1<<CPHA
ldi r16,0x29 ; PB0, 3 & 5 -> Out
out DDRB,r16
L0:ldi r16,hSPE | hMSTR | SPiDIV64
out SPCR,r16
ldi r17,10
L1:ldi r16,0xFF
out SPDR,r16
L2:in r16,SPSR
sbrs r16,SPIF
rjmp L2
subi r17,1
brne L1
ldi r16,0x21
out portb,r16
rjmp pc