04-04-2018, 08:58 AM
Ronovar,
lepo si primetio da su X, Y i Z registri smesteni na donje lokacije R resitara. Oni se koriste za indirektno adresiranje. Kada upises nesto u njih to znaci da pokazujes na neku memorijsku lokaciju. Npr. ako u par Yh i Yl upises 0x0000, to znaci da pokazujes na adresu 0. Evo konkretnog primera na tvom kodu:
ldi yh, 0x05 ; Ovde si upisao 5. To znaci da je sada pokazivac na memorisjku lokaciju 5
sts TCCR1B, yh ; Ovde si sadrzaj sa memorijske lokacije 5 prebacio u TCCR1B
Zbog toga ti nije dobro inicijalizovan TMR. Ti zelis da koristis direktan pristup memoriji. Onda koristis registre od R0-R.. (ne znam koji broj napamet). Mozes da definises i korisnicki registar u RAM memoriji:
.DSEG
TempPromenljiva: .BYTE 1 ; Rezervisi 1 bajt u data prostoru za promenljivu koju si nazvao TempPromenljiva.
Mozes i ovo da uradis:
.DSEG
TMR1_Value_H: .BYTE 1
TMR1_Value_L: .BYTE 1
ldi TMR1_Value_H, HIGH(0xB9B0) ; Timer1 - 0xB9B0 (1sec)
ldi TMR1_Value_L, LOW(0xB9B0)
sts TCNT1H, TMR1_Value_H
sts TCNT1L, TMR1_Value_L
lepo si primetio da su X, Y i Z registri smesteni na donje lokacije R resitara. Oni se koriste za indirektno adresiranje. Kada upises nesto u njih to znaci da pokazujes na neku memorijsku lokaciju. Npr. ako u par Yh i Yl upises 0x0000, to znaci da pokazujes na adresu 0. Evo konkretnog primera na tvom kodu:
ldi yh, 0x05 ; Ovde si upisao 5. To znaci da je sada pokazivac na memorisjku lokaciju 5
sts TCCR1B, yh ; Ovde si sadrzaj sa memorijske lokacije 5 prebacio u TCCR1B
Zbog toga ti nije dobro inicijalizovan TMR. Ti zelis da koristis direktan pristup memoriji. Onda koristis registre od R0-R.. (ne znam koji broj napamet). Mozes da definises i korisnicki registar u RAM memoriji:
.DSEG
TempPromenljiva: .BYTE 1 ; Rezervisi 1 bajt u data prostoru za promenljivu koju si nazvao TempPromenljiva.
Mozes i ovo da uradis:
.DSEG
TMR1_Value_H: .BYTE 1
TMR1_Value_L: .BYTE 1
ldi TMR1_Value_H, HIGH(0xB9B0) ; Timer1 - 0xB9B0 (1sec)
ldi TMR1_Value_L, LOW(0xB9B0)
sts TCNT1H, TMR1_Value_H
sts TCNT1L, TMR1_Value_L