Отговори на тема  [ 3 мнения ] 
Две въпросчета 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 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
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
1. В 16-та серия страниците във програмната памет са по 256 байта
2.Изглежда е асемблер за PIC16, в MPASM - IF-а е директива за условно компилиране, не го бъркай с if от език на по високо ниво (C, pascal, java и пр)


Сря Окт 10, 2007 7:54 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Вто Ное 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
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 3 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 9 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни