Отговори на тема  [ 10 мнения ] 
Include ASM в PICC - не се оправям с хелпа :) 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 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:
...
}


ВПРОЧЕМ, ако някой се чуди как да помогне на ближния, моля да ми транслира на тоя асемблер следната процедура:
Код:
#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
Профил ICQ WWW
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение 
Замести
Код:
BRA NZ <label>

с
Код:
btfss _Z
goto <label>


и
Код:
DEC <variable>,F


с
Код:
decf <variable>,F


Пет Сеп 11, 2009 5:12 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение 
tolstolob написа:
Замести ...

Ами нали точно така е MPASM, a примерът за вмъкнат asm в PICC е съвсем друг!
Оставам с впечетлението, че не си наясно с въпроса и по-скоро спамиш темата, но все пак би трябвало да ти благодаря за желанието да помогнеш.


Пет Сеп 11, 2009 6:05 pm
Профил ICQ WWW
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Нед Яну 18, 2009 1:28 pm
Мнения: 110
Мнение 
NikB написа:
tolstolob написа:
Замести ...

Ами нали точно така е MPASM, a примерът за вмъкнат asm в PICC е съвсем друг!
Оставам с впечетлението, че не си наясно с въпроса и по-скоро спамиш темата, но все пак би трябвало да ти благодаря за желанието да помогнеш.


ти май от "C" хич не вдяваш :)

не знам какво е това PICC, но на никой C компилатор няма да му хареса нещо от рода на:
void TIMER1_isr(void)
{
int find_parity(int data){ ....}
}
(опресни си спомените за декларациите на процедури в C!)

а ... понеже BRA, DEC най-вероятно са макродефиниции на измъчения MPASM - вземи се вслушай в съвета на колегата по-горе, вместо да се правиш на отворен !


Пет Сеп 11, 2009 6:16 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение 
smtp написа:
ти май от "C" хич не вдяваш :)

Това е вярно :)

smtp написа:
не знам какво е това PICC, но на никой C компилатор няма да му хареса нещо от рода на:
void TIMER1_isr(void) ...

Това е вярно само в първата си част.

...
Не се правя на отворен, просто напоследък често се случва, че едни незнаещи обясняват на други незнаещи - това е просто като факт, извън контекста :)

А тук ти поствам темплейта, който самата среда PICC създава, за ползване на прекъсвания.

Сорсът се компилира без проблеми преди аз да добавя вмъкнаттата (асм) процедурка за обработка на клавиатурата в прекъсването по таймера.
Моята процедурка предварително също е компилирана без грешка на MPASM, но в PICC се опаква.

Код:
#int_AD
void  AD_isr(void)
{
}

#int_TBE
void  TBE_isr(void)
{
}

#int_RDA
void  RDA_isr(void)
{
}

#int_TIMER1
void  TIMER1_isr(void)
{...


Пет Сеп 11, 2009 6:27 pm
Профил ICQ WWW
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Нед Яну 18, 2009 1:28 pm
Мнения: 110
Мнение 
прочети мнооооого внимателно какво съм ти написал !
ако не го схванеш ... ще трябва някой с мооого-яки нерви да ти обяснява :)

P.S. и как с "твоето ниво" разпознаваш знаещите от незнаещите :)


Пет Сеп 11, 2009 6:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Абе защо я дефинираш като функция .....
int find_parity(int data){

ето това конкретно?

Иначе съвсем конкретно,
#asm

#endasm

това е достатъчно за да инклуднеш асемблер, обаче трябва да изпозлваш стандартните команди, това не е MPLAB няма неговите макроси, нито дефиниции. Доста дефиниции имаш тук, сега няма време да ги добавям за да видим как ще се компилира, но не би трябвало да имаш ниакави проблеми.

п.с. аз не съм съвсем сигурен дали и CCS няма някакви макроси,но аз никога не съм ги позлвал.


Пет Сеп 11, 2009 6:38 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение 
smtp написа:
прочети мнооооого внимателно какво съм ти написал ! ...

ToHu написа:
Абе защо я дефинираш като функция .....

Разгеле :) - разбрах :)
Ами щото редът е останал, докато съм поствал (copy/paste) примера от хелпа - затова се е получила функцията в процедурата на прекъсването.
Благодаря за търпението :) и обясненията!


Пет Сеп 11, 2009 7:06 pm
Профил ICQ WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение 
Та да се върнем на темата: как и къде да търся дефинициите на портове и битове в то PICC?
Явно, както съм упоменал и в темата - хелпът ми е проблем :)


Прикачени файлове:
bit _Z.GIF
bit _Z.GIF [ 84.27 KiB | Прегледано 1177 пъти ]
Пет Сеп 11, 2009 7:29 pm
Профил ICQ WWW
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение 
...но като гледам зеенето хич не ти е проблем. :x
Имах желание да помогна, но ме отказа овреме.


Пет Сеп 11, 2009 8:16 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 10 мнения ] 

Кой е на линия

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


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

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