Since using LONGs in the program will slow down the execution of the program, I am reluctant to use longs. Also the PIC that curretly is used is 16F series.
So, seems better to spend some bytes in RAM or FLASH and have immediate response.
Ioannis
Since using LONGs in the program will slow down the execution of the program, I am reluctant to use longs. Also the PIC that curretly is used is 16F series.
So, seems better to spend some bytes in RAM or FLASH and have immediate response.
Ioannis
That’s what I mean. Still a more difficult problem than appears, or more than it intuitively feels like it should be, if speed is the goal.
The extra 6 bits returned by a single 14 bit READCODE are useless to you because of the time taken to extract them.
The word variable you get to use to address program memory is also useless to you because you only needed a 32 bit index (or 32x4).
I’d be interested to hear how you end up tackling it.
It is indeed a complex problem. In any option chosen, there would be some overhead lower or higher I guess.
I think I will end up in the asm code to rotate the variables.
Ioannis
you can set or clr any bit in an array
dis var byte [4]
dis.0[x] = 1 ; will set bit x in array dis where x=0 to 31
or make a user command something like this (untested)
USERCOMMAND "SETBIT" ; BIT,VALUE
not sure if user cmd is really useful hereCode:SETBIT?CC macro Bitin,Val if Bitin <32 if Bitin > 23 k=3 elseif Bitin > 15 k=2 elseif Bitin > 7 k=1 elseif Bitin <8 k=0 endif b=Bitin-k*8 if Val >0 bsf _dis+k,b else bcf _dis+k,b endif endif endm
Last edited by richard; - 25th November 2015 at 03:12. Reason: white spac e
Thanks Richard.
Interesting approach!
Ioannis
I don’t yet know if I’ve wrecked it in basic.
Code:shifter byte offset byte array byte[7] shifter = 11 offset = shifter >> 3 // byte in array to pass to whatever needs the 4 byte result, in this case 2 array[3] = 1<<(shifter & 7) // Set it to 00000000 (00000000 00000000 00001000 00000000) 00000000 00000000 ‘dostuff with array[offset]
Bookmarks