Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено АКЛ 28 августа 2003 г. 21:58
В ответ на: Как на Picc сделать таблицу переходов используя PCL + переменная а дальше таблица goto отправлено Alex64 28 августа 2003 г. 18:12

Фрагмент из проги под 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