Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Две въпросчета
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4944
Страница 1 от 1

Автор:  MegatroniC [ Сря Окт 10, 2007 4:02 pm ]
Заглавие:  Две въпросчета

1. Има ли някакво ограничение на броя на редовете в таблица съставена по метода на изчисленото GOTO ?
До сега си мислих че може от 0-255, докато не прочетох следното - "Тъй като РС е брояч на байтове (а не на инструкции), добавянето на отместване към РСL, позволява четене на 128 байта от таблицата преди да се наложи промяна на байт PCH респективно на регистър PCLATH." Това не мога да го разтълкувам както трябва и ме вкара в объркване, тъй като до сега не ми се налагало да правя големи таблици а сега ми трябват 140 реда.

2. Трябва да сравня две стойноти, мога ли да излопозвам директивата - IF по следния начин:

if xxxx>=W
...
else
....
endif

Или сравнението става винаги с число а не както аз искам с W.

Става въпрос за pic16.

Автор:  Predator_MF [ Сря Окт 10, 2007 7:54 pm ]
Заглавие: 

1. В 16-та серия страниците във програмната памет са по 256 байта
2.Изглежда е асемблер за PIC16, в MPASM - IF-а е директива за условно компилиране, не го бъркай с if от език на по високо ниво (C, pascal, java и пр)

Автор:  i_dachev [ Съб Окт 13, 2007 7:00 pm ]
Заглавие: 

По първия въпрос аз ги правя така:

--------------------------------------------------------------------------------
Прости таблици в първите 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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/