|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:18 am
|
Страница 1 от 1
|
[ 10 мнения ] |
|
Include ASM в PICC - не се оправям с хелпа :)
| Автор |
Съобщение |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
 Include ASM в PICC - не се оправям с хелпа :)
Include ASM в PICC - не се оправям с хелпа
В Хелпа на PICC има примерче за вмъкнат асемблер, но "моя"  компилатор (ver.4.084) не ми харесва bra nz:
Пример в хелпа:
 |  |  |  | Код: int find_parity(int data){ int count; #asm MOV #0x08, W0 MOV W0, count CLR W0 loop: XOR.B data,W0 RRC data,W0 DEC count,F BRA NZ, loop MOV #0x01,W0 ADD count,F MOV count, W0 MOV W0, _RETURN_ #endasm } |  |  |  |  |
Моето творение - дава грешка "Expecting an opcode mnemonic" на реда: BRA NZ,IntrTm_1 ВПРОЧЕМ, ако някой се чуди как да помогне на ближния, моля да ми транслира на тоя асемблер следната процедура:  |  |  |  | Код: #int_TIMER1 void TIMER1_isr(void) { int find_parity(int data){ #asm incf vTime_001mS,F movlw 0x07 andwf vTime_001mS,W BRA NZ IntrTm_1 DEC vTime_008mS,F IntrTm_1: decfsz vTime_010mS,F goto Intr_End movlw _Time_010mS movwf vTime_010mS
incf vTime_x10ms,F
;// На всеки _Time_010mS обръща внимание на клавиатурата IntrKbd bsf vKbdCur1,0 ;// Копиране на бит0 от порта в vKbdCur1 (ИНВЕРСНО) btfsc PORTB,_kbInp0 bcf vKbdCur1,0
bsf vKbdCur1,1 ;// Копиране на бит1 от порта в vKbdCur1 (ИНВЕРСНО) btfsc PORTB,_kbInp1 bcf vKbdCur1,1
movf vKbdCur1,W xorwf vKbdCur0,W btfsc _Z goto IntrKbd_ChrOld IntrKbd_ChrNew ;// нов натиснат бутон movf vKbdCur1,W movwf vKbdCur0 clrf vKbdKey clrf vKbdsRptCnt ;// няма повторение movlw _kbd_TimePrs ;// нов натиснат бутон - ще чакаме да се задържи goto IntrKb_End_Cnt IntrKbd_ChrOld ;// стар натиснат бутон (същия, като предния път) movf vKbdCur1,W btfsc _Z goto IntrKb_End ;// няма натиснат бутон
decfsz vKbdsCnt,F goto IntrKb_End
bsf fl_kbd_Event xorwf vKbdKey,F btfsc _Z goto IntrKbd_ChrRpt
movf vKbdCur1,W movwf vKbdKey ;// натиснат бутон - ще чакаме първо първо повторение movlw _kbd_TimeRpt1 goto IntrKb_End_Cnt IntrKbd_ChrRpt incf vKbdsRptCnt,F btfsc _Z decf vKbdsRptCnt,F ;// ако vKbdsRptCnt е $FF си остава $FF
movf vKbdCur1,W movwf vKbdKey ;// натиснат бутон - ще чакаме първо първо повторение movlw _kbd_TimeRptN ;// следващо, след първото повторение IntrKb_End_Cnt movwf vKbdsCnt #endasm
} |  |  |  |  |
Благодаря!
|
| Пет Сеп 11, 2009 4:06 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
|
| Пет Сеп 11, 2009 5:12 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
Ами нали точно така е MPASM, a примерът за вмъкнат asm в PICC е съвсем друг!
Оставам с впечетлението, че не си наясно с въпроса и по-скоро спамиш темата, но все пак би трябвало да ти благодаря за желанието да помогнеш.
|
| Пет Сеп 11, 2009 6:05 pm |
|
 |
|
smtp
Ранг: Новодошъл
Регистриран на: Нед Яну 18, 2009 1:28 pm Мнения: 110
|
ти май от "C" хич не вдяваш
не знам какво е това PICC, но на никой C компилатор няма да му хареса нещо от рода на:
void TIMER1_isr(void)
{
int find_parity(int data){ ....}
}
(опресни си спомените за декларациите на процедури в C!)
а ... понеже BRA, DEC най-вероятно са макродефиниции на измъчения MPASM - вземи се вслушай в съвета на колегата по-горе, вместо да се правиш на отворен !
|
| Пет Сеп 11, 2009 6:16 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
Това е вярно
Това е вярно само в първата си част.
...
Не се правя на отворен, просто напоследък често се случва, че едни незнаещи обясняват на други незнаещи - това е просто като факт, извън контекста
А тук ти поствам темплейта, който самата среда PICC създава, за ползване на прекъсвания.
Сорсът се компилира без проблеми преди аз да добавя вмъкнаттата (асм) процедурка за обработка на клавиатурата в прекъсването по таймера.
Моята процедурка предварително също е компилирана без грешка на MPASM, но в PICC се опаква.
|
| Пет Сеп 11, 2009 6:27 pm |
|
 |
|
smtp
Ранг: Новодошъл
Регистриран на: Нед Яну 18, 2009 1:28 pm Мнения: 110
|
прочети мнооооого внимателно какво съм ти написал !
ако не го схванеш ... ще трябва някой с мооого-яки нерви да ти обяснява
P.S. и как с "твоето ниво" разпознаваш знаещите от незнаещите 
|
| Пет Сеп 11, 2009 6:34 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Абе защо я дефинираш като функция .....
int find_parity(int data){
ето това конкретно?
Иначе съвсем конкретно,
#asm
#endasm
това е достатъчно за да инклуднеш асемблер, обаче трябва да изпозлваш стандартните команди, това не е MPLAB няма неговите макроси, нито дефиниции. Доста дефиниции имаш тук, сега няма време да ги добавям за да видим как ще се компилира, но не би трябвало да имаш ниакави проблеми.
п.с. аз не съм съвсем сигурен дали и CCS няма някакви макроси,но аз никога не съм ги позлвал.
|
| Пет Сеп 11, 2009 6:38 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
Разгеле  - разбрах
Ами щото редът е останал, докато съм поствал (copy/paste) примера от хелпа - затова се е получила функцията в процедурата на прекъсването.
Благодаря за търпението  и обясненията!
|
| Пет Сеп 11, 2009 7:06 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
Та да се върнем на темата: как и къде да търся дефинициите на портове и битове в то PICC?
Явно, както съм упоменал и в темата - хелпът ми е проблем 
|
| Пет Сеп 11, 2009 7:29 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
...но като гледам зеенето хич не ти е проблем.
Имах желание да помогна, но ме отказа овреме.
|
| Пет Сеп 11, 2009 8:16 pm |
|
|
|
Страница 1 от 1
|
[ 10 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|