Witam mam problem z obsluga pamieci DS2433 .
Napisalem maly programik ktory nawet dziala ale jakos dziwnie , podejrzewam ze zle mam cos opisane w adresowaniu pamieci takwiec oto moj kod .
Zapis i odczyt :
a main
Problem polega na tym ze niedokonca rozumie jak adresowac do pamieci , z dokumentacji wynika za pocztkowy adres to 00 00
czyli TA1 00h i TA2 00h
gdy tak daje zapisuje mi pierwszy bajt pod adres 00 a puzniej same 0
Dosteje TA1 TA2 ES
00 7F 4E
na moje oko TA2 to mlodszy bajt ale jak go zmieniam to nic sie niezmienia .
Natomiast gdy TA2 dam 01 to mam zapis zupelnie gdzie indziej i odczytuje jakies konkretne dane rozne od 0 i FF czyli tak jakby dobrze. tylko niemoge zaskoczyc jak tu sie oblicza te adresy bo chyba przy zapisie do scratch pada i odczycie z pamieci jakos to inczej musi wygladac , gdyby ktos mogl doradzic .
Dodam ze pracuje na wew kwarcu 8 mhz odstepy czasowe sa zachowane ustalone na symulatorze.
Pozdrawiam
Napisalem maly programik ktory nawet dziala ale jakos dziwnie , podejrzewam ze zle mam cos opisane w adresowaniu pamieci takwiec oto moj kod .
Zapis i odczyt :
rst:
sbi ddrd,ddd5
cbi portd,sda
rcall pause1
rcall pause1
sbi portd,sda
cbi ddrd,ddd5
sbi portd,sda
sbi pind,5
czekaj1:
sbic pind,5
rjmp czekaj1
czekaj2:
sbis pind,5
rjmp czekaj2
ret
onewwrite:
push pointer
sbi ddrd,ddd5
ldi pointer,8
rep1:
; sbi portd,sda
cbi portd,sda
rcall delay
rol mp
brcs dos
sbi portd,sda
dos:rcall delay
rcall delay
rcall delay
rcall delay
rcall delay
rcall delay
rcall delay
rcall delay
; rcall delay
sbi portd,sda
rcall delay
dec pointer
brne rep1
rcall delay
pop pointer
ret
onewread:
push pointer
ldi pointer,8
clr mp
rep2:
sbi ddrd,ddd5
cbi portd,sda
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
cbi ddrd,ddd5
sbi portd,sda
sbi pind,5
rcall delay
; rcall delay
sec
sbic pind,5
clc
rol mp
rcall delay
rcall delay
sbi portd,sda
sbi ddrd,ddd5
rcall delay
rcall delay
rcall delay
rcall delay
rcall delay
dec pointer
brne rep2
rcall delay
pop pointer
ret
a main
rcall rst
ldi mp,$CC
rcall onewwrite
ldi mp,$0F
rcall onewwrite
ldi mp,0
rcall onewwrite
ldi mp,$0
rcall onewwrite
ldi mp,78
rcall onewwrite
ldi mp,2
rcall onewwrite
ldi mp,3
rcall onewwrite
ldi mp,4
rcall onewwrite
rcall rst
ldi mp,$CC
rcall onewwrite
ldi mp,$AA
rcall onewwrite
rcall pause1
rcall onewread ;38
sts adr0,mp
rcall onewread ;00
sts adr1,mp
rcall onewread ;07
sts adr2,mp
rcall onewread ;44
sts adr3,mp
rcall onewread ;22
sts adr4,mp
lds mp,adr0
rcall print
lds mp,adr1
rcall print
lds mp,adr2
rcall print
lds mp,adr3
rcall print
lds mp,adr4
rcall print
rcall rst
ldi mp,$CC
rcall onewwrite
ldi mp,$55
rcall onewwrite
lds mp,adr0
rcall onewwrite
lds mp,adr1
rcall onewwrite
lds mp,adr2
rcall onewwrite
ldi temp,60
rcall lpause
odczyt:
rcall rst
ldi mp,$CC
rcall onewwrite
ldi mp,$F0
rcall onewwrite
ldi mp,$0
rcall onewwrite
ldi mp,$0
rcall onewwrite
rcall onewread
sts qe1,mp
rcall onewread
sts qe2,mp
rcall onewread
sts qe3,mp
rcall onewread
sts qe4,mp
rcall onewread
sts qe5,mp
rcall onewread
sts qe6,mp
rcall onewread
sts qe7,mp
rcall onewread
Problem polega na tym ze niedokonca rozumie jak adresowac do pamieci , z dokumentacji wynika za pocztkowy adres to 00 00
czyli TA1 00h i TA2 00h
gdy tak daje zapisuje mi pierwszy bajt pod adres 00 a puzniej same 0
Dosteje TA1 TA2 ES
00 7F 4E
na moje oko TA2 to mlodszy bajt ale jak go zmieniam to nic sie niezmienia .
Natomiast gdy TA2 dam 01 to mam zapis zupelnie gdzie indziej i odczytuje jakies konkretne dane rozne od 0 i FF czyli tak jakby dobrze. tylko niemoge zaskoczyc jak tu sie oblicza te adresy bo chyba przy zapisie do scratch pada i odczycie z pamieci jakos to inczej musi wygladac , gdyby ktos mogl doradzic .
Dodam ze pracuje na wew kwarcu 8 mhz odstepy czasowe sa zachowane ustalone na symulatorze.
Pozdrawiam