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.

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.