|
Фрагмент из проги под CCS.
ShowState.parts, ShowState.parts + 1 - мл. и ст. байты текущего индекса, ShowDataAlloc - таблица.
Работает по всей памяти
void GetNextState()
{
#asm
movf ShowState.parts,w
movwf TmpBuf.tmp1
movwf TmpBuf.tmp1+2
movf ShowState.parts+1,w
movwf TmpBuf.tmp1+1
movlw BufControls
movwf FSR
bcf IRP
movlw 0xFD
movwf TmpBuf.tmp1+3
movlw ShowDataAlloc
addwf TmpBuf.tmp1,f
movlw ShowDataAlloc >> 8
btfsc CARRY
addlw 1
addwf TmpBuf.tmp1+1,f
// bsf fDiscretMode
bcf fStateLoad
GetNextStateLoop:
// bsf PORTC,7
movf TmpBuf.tmp1+1,w
movwf PCLATH
incf TmpBuf.tmp1,w
btfsc Z
incf PCLATH,f
movf TmpBuf.tmp1+2,w
call ShowDataAlloc
movwf INDF
// bcf PORTC,7
clrf PCLATH
btfss fStateLoad
goto GetNextState1
btfss INDF,7
goto GetNextStateExit
// bcf fDiscretMode
bcf INDF,7
GetNextState1:
incf FSR,f
incf TmpBuf.tmp1,f
btfsc Z
incf TmpBuf.tmp1+1,f
incf TmpBuf.tmp1+2,f
incfsz TmpBuf.tmp1+3,f
goto GetNextStateLoop
bsf fStateLoad
goto GetNextStateLoop
GetNextStateExit:
rrf TmpBuf.tmp1+3,f
rrf TmpBuf.tmp1+3,w
andlw 0x3F
movwf ChannelsToChange
nop
#endasm
}
E-mail: info@telesys.ru