|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 9:38 am
|
Страница 1 от 1
|
[ 3 мнения ] |
|
| Автор |
Съобщение |
|
MegatroniC
Ранг: Минаващ
Регистриран на: Сря Яну 04, 2006 6:23 pm Мнения: 43 Местоположение: Earth
|
 Две въпросчета
1. Има ли някакво ограничение на броя на редовете в таблица съставена по метода на изчисленото GOTO ?
До сега си мислих че може от 0-255, докато не прочетох следното - "Тъй като РС е брояч на байтове (а не на инструкции), добавянето на отместване към РСL, позволява четене на 128 байта от таблицата преди да се наложи промяна на байт PCH респективно на регистър PCLATH." Това не мога да го разтълкувам както трябва и ме вкара в объркване, тъй като до сега не ми се налагало да правя големи таблици а сега ми трябват 140 реда.
2. Трябва да сравня две стойноти, мога ли да излопозвам директивата - IF по следния начин:
if xxxx>=W
...
else
....
endif
Или сравнението става винаги с число а не както аз искам с W.
Става въпрос за pic16.
|
| Сря Окт 10, 2007 4:02 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
1. В 16-та серия страниците във програмната памет са по 256 байта
2.Изглежда е асемблер за PIC16, в MPASM - IF-а е директива за условно компилиране, не го бъркай с if от език на по високо ниво (C, pascal, java и пр)
|
| Сря Окт 10, 2007 7:54 pm |
|
 |
|
i_dachev
Ранг: Новодошъл
Регистриран на: Вто Ное 16, 2004 3:29 pm Мнения: 108 Местоположение: София
|
По първия въпрос аз ги правя така:
--------------------------------------------------------------------------------
Прости таблици в първите 256 адреси на PIC-a
DO_CMDS
movf cmd_last, W
andlw 0x1F
addwf PCL, F
;Line 0 (0-7)
GOTO NORMAL_RIT
GOTO CHANGE_SP
GOTO CHANGE_BAND
GOTO MENU_FUNCTIONS
GOTO ONOFF_ANT
GOTO STEP_DOWN
GOTO END_EXEC
GOTO END_EXEC
...
END_EXEC
RETURN
#if $ >= .256
error "All simple tables must be in space < 256 or PCLATH must be set!"
#endif
--------------------------------------------------------------------------------
Сложни таблици навсякъде из адресите на PIC-a стига да не пресичат 0xXXFF -> 0xXX00
SHOWS_TB1
;Used to get Step text dtmp0 is index
movlw HIGH $
movwf PCLATH
movf dtmp0, W
addwf PCL, F
;1Hz
retlw '1'
retlw 'H'
retlw 'z'
retlw ' '
retlw ' '
retlw ' '
;10Hz
retlw '1'
retlw '0'
retlw 'H'
retlw 'z'
retlw ' '
retlw ' '
...
SHOWS_TB1_END
#if ((HIGH SHOWS_TB1) != (HIGH SHOWS_TB1_END))
error "SHOWS_TB1 cross 0xXXFF boundary!"
#endif
|
| Съб Окт 13, 2007 7:00 pm |
|
|
|
Страница 1 от 1
|
[ 3 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|