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.
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).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 ...
MfG
Mobius







Zitieren

Lesezeichen