Hum, es müsste rein theoretisch auch einfacher gehen. Meine erste Idee wäre ein lookup-table und ein computed goto gewesen, wobei das aber um einiges leichter ins Auge gehen kann.
Die Grundidee ist relativ einfach, du hast eine Variable, die multipilizerst du mit 2 (einfaches shiften nach links) und addierst den neuen Wert zu dem PCL hinzu. Die Tabelle schaut dann aus 2er Blöcken, einem bsf und einem return/retlw commando.
Code:
Compute:
rlf Temp
movfw Temp
addwf PCL,f
Table
bsf POTRB,0
return
bsf PORTB,1
return
bsf PORTB,2
return
bsf PORTB,3
return
bsf PORTB,4
return
bsf PORTB,5
return
bsf PORTB,6
return
bsf PORTB,7
return
...
Hab den Code grad durch den Simulator rennen lassen, funktioniert gut, ABER nur wenn der PCL keinen overflow verursacht. Sollte dies der Fall sein, so muss auch PCLATH in Betracht gezogen werden (welches die high-bits des Programm-Counters beinhaltet).
MfG
Mobius
Lesezeichen