The first part of this probably isn't working like you might expect.
You want to add the base address of the array, which will never change, to theCode:movlw _bOutDataPos ; gets the "address" of bOutDataPos into W addwf _bOutData,w ; adds the address + the "value" in bOutData movwf FSR ; loads FSR with the wrong address
offset value in bOutDataPos to get the address for each array element;
This will probably make it easier to follow;Code:movf _bOutDataPos,W ; get the value of your index pointer in bOutDataPos addlw _bOutData ; add the index to the base address of your array movwf FSR ; load FSR with base address + offset
The code after Main would be something like this, which maintains your Index pointer.Code:Array VAR BYTE[8] Index VAR BYTE Address VAR BYTE Action CON 10 ControlChar CON 20 CLEAR Address = 15 ' address Index = 0 ' starting Array Index position Main: Array[Index]=ControlChar Index=Index+1 Array[Index]=0 Index=Index+1 Array[Index]=Address Index=Index+1 Array[Index]=Action Index=Index+1 GOTO Main
It could be made a bit smaller, and you could use incf FSR to increment theCode:asm movf _Index, W ;get "offset" value from Index pointer addlw _Array ;add it to Array[0] base address (result in W) movwf FSR ;load pointer with base + offset movlw _ControlChar ;load W with constant value in ControlChar movwf INDF ;move it to Array[Index] incf _Index, F ;inc Index pointer movf _Index, W ;load new Index pointer value addlw _Array ;add it to Array[0] base address movwf FSR ;load pointer with base + offset clrf INDF ;Clear Array[Index] incf _Index, F ;inc Index pointer movf _Index, W ;load new Index pointer value addlw _Array ;add it to Array[0] base address movwf FSR ;load pointer with base + offset movf _Address, W ;get Address byte value movwf INDF ;move it to Array[Index] incf _Index, F ;inc Index pointer movf _Index, W ;load new Index pointer value addlw _Array ;add it to Array[0] base address movwf FSR ;load pointer with base + offset movlw _Action ;load W with Constant value in Action movwf INDF ;move it to Array[Index] incf _Index, F ;inc Index pointer endasm
pointer each time, but you could lose track of which array element you last
wrote to pretty quick.




Bookmarks