| Микроконтролери и електроника 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/ |
|