hi !
ik wil dat mijn programma naar een bepaald label springt , afhankelijk van de waarde die hij inleest via p1.
hier mijn code : maar hij werkt niet.
waar zit ik fout ?
//////////////////
org 0000h
sjmp keypad
tabel: db keuken ; relais0 tevens adres vd bit
db keukenwerkblad ;relais1
db livingvoor ;relais2
db livingachter ;relais3
db vierspots ;relais4
db vijfspots ;relais5
db garage ;relais6
db shift ;bit 7 reserve
db hoek1 ;relais8
db hoek2 ;relais9
db hoek3 ;relais10
db hoek4 ;relais11
db trapgatinkom ;relais12
keypad:
mov DPTR,#tabel ; de spille goed zetten
mov A,P1 ;de; lengte van de koorde instellen
jmp @a+dptr
sjmp keypad
keuken:
cpl 00
keukenwerkblad:
cpl 01
livingvoor:
cpl 02
livingachter:
cpl 03
vierspots:
cpl 04
vijfspots:
cpl 05
garage:
cpl 06
shift:
cpl 07 ; hier moet er speciale teller en denksoftware
hoek1:
cpl 08
hoek2:
cpl 09
hoek3:
cpl 10
hoek4:
cpl 11
trapgatinkom:
cpl 12
sjmp keypad
end
Ik ben er een beetje uit, maar was "db" niet gewoon een byte, terwijl een adres een 16bit word is? Haal het eens door een simulator, dan kun je zien wat er gebeurt.
LaStei
carpe cerevisi
Ik denk dat je het via een variablele moet doen:
inc dptr
dec dptr
jz keuken
dec dprt
jz keukenwerkblad
dec dprt
jz....
etc.
Dit houd de data en de sprongaddressen uit elkaar. Een bijkomend voordeel is dat, mocht DPTR ooit eens niet de goede waarde hebben, je dat met een error routine af kan vangen.
Op 31 maart 2006 16:52:02 schreef LaStei:
Ik denk dat je het via een variablele moet doen:inc dptr dec dptr jz keuken dec dprt jz keukenwerkblad dec dprt jz.... etc.Dit houd de data en de sprongaddressen uit elkaar. Een bijkomend voordeel is dat, mocht DPTR ooit eens niet de goede waarde hebben, je dat met een error routine af kan vangen.
de datapointer heeft altijd een goede waarde , want het indirekte programering.