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

Колко пъти се изпълнява тази подпрограма
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=4973
Страница 1 от 1

Автор:  harleybg [ Чет Окт 18, 2007 8:09 pm ]
Заглавие:  Колко пъти се изпълнява тази подпрограма

Колко пъти се изпълнява info_1a? Трябва да е 305, но нещо май не е точно толкова
PIC16F84
Код:
   movlw   B'11000111'
   movwf   OPTION_REG
   bcf      INTCON,T0IF
   movlw   D'65'
   movwf   TMR0
        call       info_1a
..................
...............
info_1a   bcf   PORTA,0   
   nop
   nop   
   nop
   nop
   nop
   nop
   nop
   nop
   bsf   PORTB,2;bqlo
   bsf   PORTB,3
   bsf   PORTB,4
   bsf   PORTA,0;0-sinhro

   movlw   D'5'
   movwf   j;2
loop_1a1   decfsz   j,f
   goto   loop_1a1
   nop
   decfsz   PORTB;j
   movlw   D'5'
   movwf   j;2
loop_1a2   decfsz   j,f
   goto   loop_1a2
   nop
   decfsz   PORTB;sz
   movlw   D'5'
   movwf   j;2
loop_1a3   decfsz   j,f
   goto   loop_1a3
   nop
   decfsz   PORTB;z
   movlw   D'5'
   movwf   j;2
loop_1a4   decfsz   j,f
   goto   loop_1a4
   nop
   decfsz   PORTB;l
   movlw   D'5'
   movwf   j;2
loop_1a5   decfsz   j,f
   goto   loop_1a5
   nop
   decfsz   PORTB;4
   movlw   D'5'
   movwf   j;2
loop_1a6   decfsz   j,f
   goto   loop_1a6
   nop
   decfsz   PORTB;s
   movlw   D'5'
   movwf   j;2
loop_1a7   decfsz   j,f
   goto   loop_1a7
   nop
   decfsz   PORTB;4
   movlw   D'5'
   movwf   j;2
loop_1a8   decfsz   j,f
   goto   loop_1a8
   nop
   nop
   btfss   INTCON,T0IF
   goto   info_1a
   return

Автор:  Predator_MF [ Чет Окт 18, 2007 9:01 pm ]
Заглавие: 

Колкото пъти я викнеш....е, ако питаш колко цикъла, в MPLAB има Stopwatch който може да ти покаже точно колко

Автор:  harleybg [ Чет Окт 18, 2007 9:27 pm ]
Заглавие: 

Забравих да кажа, че кварца е 10 МХц

Автор:  harleybg [ Пет Окт 19, 2007 12:20 am ]
Заглавие: 

Закривам темата

Автор:  Gogo [ Пет Окт 19, 2007 12:22 am ]
Заглавие: 

Ако ще и 100МНz да е кварца, пак никой не може да ти каже колко пъти се изпълнява подпрограмата. Както е написал хищника - колкото пъти я викнеш...

Автор:  harleybg [ Пет Окт 19, 2007 10:07 pm ]
Заглавие: 

Аз се оправих с програмта, но нека се изясним, защото не се разбрахме.

info_1a
...........
goto info_1a


Toва питах колко пъти ще се изпълни. GOTO

Автор:  Ки4о [ Пет Окт 19, 2007 10:12 pm ]
Заглавие: 

Когато искаш да правиш такива сметки - правиш си една клетка брояч и след всяко викане на функцията си я увеличаваш с 1 и след това си проверяваш резултата.

Автор:  harleybg [ Съб Окт 20, 2007 3:20 pm ]
Заглавие: 

Идеята по принцип не е лоша, но има един малък недостатък. PIC16 има 8 битова памет. Ако искаме да изпълним един цикъл повече от 2^8 пъти, какво ще стане с брояча. Ще се преълни и ще почне писането все едно (то си е така де) от 0. И сега като прочета после стойността на клетктата няма да съм 100% сигурен за резултата. Е може да се сложи и една проверка дали стойността на клетката е ставала нула, но малко се усложнява.
Иначе идеята да използвам клетка за проверка накрая не е лоша.

Автор:  million [ Съб Окт 20, 2007 3:29 pm ]
Заглавие: 

Направи си тогава 64 битов брояч :lol:

Автор:  plameniv [ Съб Окт 20, 2007 4:55 pm ]
Заглавие:  ?

harleybg написа:
Идеята по принцип не е лоша, но има един малък недостатък. PIC16 има 8 битова памет. Ако искаме да изпълним един цикъл повече от 2^8 пъти, какво ще стане с брояча. Ще се преълни и ще почне писането все едно (то си е така де) от 0. И сега като прочета после стойността на клетктата няма да съм 100% сигурен за резултата. Е може да се сложи и една проверка дали стойността на клетката е ставала нула, но малко се усложнява.
Иначе идеята да използвам клетка за проверка накрая не е лоша.


Какво като стане 0 има си команда за изпълнение при резултат 0.
infsz или decfsz

MOVLW 0xFF
MOVWF 0x22
Label_000E
MOVLW 0xFF
MOVWF 0x25
Label_000D
DECFSZ 0x25 , f
GOTO Label_000D
DECFSZ 0x22 , f
GOTO Label_000E
...................................

Автор:  Ки4о [ Съб Окт 20, 2007 5:25 pm ]
Заглавие: 

Правиш си брояч от 2 клетки:CntHI:CntLO и си увеличаваш при всеки цикъл CntLO.Проверяваш го на всеки път преди да го увеличиш като се препълни - увеличаваш CntHI с 1 а CntLO го нулираш.Ако и този брояч ти се струва малък -> CntHI1:CntHI:CntLO и се прави по същия начин.

Автор:  plameniv [ Съб Окт 20, 2007 5:52 pm ]
Заглавие:  Ммм

Ки4о написа:
Правиш си брояч от 2 клетки:CntHI:CntLO и си увеличаваш при всеки цикъл CntLO.Проверяваш го на всеки път преди да го увеличиш като се препълни - увеличаваш CntHI с 1 а CntLO го нулираш.Ако и този брояч ти се струва малък -> CntHI1:CntHI:CntLO и се прави по същия начин.

Не е ли по лесно при намаляване , проверките са по малко ?

Автор:  Ки4о [ Съб Окт 20, 2007 7:30 pm ]
Заглавие: 

Говоря по принцип,но с декрементиране кода може да е по-компактен.

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