| Автор |
Съобщение |
|
harleybg
Ранг: Минаващ
Регистриран на: Пет Ное 03, 2006 9:50 pm Мнения: 39
|
 Колко пъти се изпълнява тази подпрограма
Колко пъти се изпълнява 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 |  |  |  |  |
|
| Чет Окт 18, 2007 8:09 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Колкото пъти я викнеш....е, ако питаш колко цикъла, в MPLAB има Stopwatch който може да ти покаже точно колко
|
| Чет Окт 18, 2007 9:01 pm |
|
 |
|
harleybg
Ранг: Минаващ
Регистриран на: Пет Ное 03, 2006 9:50 pm Мнения: 39
|
Забравих да кажа, че кварца е 10 МХц
|
| Чет Окт 18, 2007 9:27 pm |
|
 |
|
harleybg
Ранг: Минаващ
Регистриран на: Пет Ное 03, 2006 9:50 pm Мнения: 39
|
Закривам темата
|
| Пет Окт 19, 2007 12:20 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Ако ще и 100МНz да е кварца, пак никой не може да ти каже колко пъти се изпълнява подпрограмата. Както е написал хищника - колкото пъти я викнеш...
|
| Пет Окт 19, 2007 12:22 am |
|
 |
|
harleybg
Ранг: Минаващ
Регистриран на: Пет Ное 03, 2006 9:50 pm Мнения: 39
|
Аз се оправих с програмта, но нека се изясним, защото не се разбрахме.
info_1a
...........
goto info_1a
Toва питах колко пъти ще се изпълни. GOTO
|
| Пет Окт 19, 2007 10:07 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Когато искаш да правиш такива сметки - правиш си една клетка брояч и след всяко викане на функцията си я увеличаваш с 1 и след това си проверяваш резултата.
|
| Пет Окт 19, 2007 10:12 pm |
|
 |
|
harleybg
Ранг: Минаващ
Регистриран на: Пет Ное 03, 2006 9:50 pm Мнения: 39
|
Идеята по принцип не е лоша, но има един малък недостатък. PIC16 има 8 битова памет. Ако искаме да изпълним един цикъл повече от 2^8 пъти, какво ще стане с брояча. Ще се преълни и ще почне писането все едно (то си е така де) от 0. И сега като прочета после стойността на клетктата няма да съм 100% сигурен за резултата. Е може да се сложи и една проверка дали стойността на клетката е ставала нула, но малко се усложнява.
Иначе идеята да използвам клетка за проверка накрая не е лоша.
|
| Съб Окт 20, 2007 3:20 pm |
|
 |
|
million
Ранг: Минаващ
Регистриран на: Сря Дек 06, 2006 9:05 pm Мнения: 92 Местоположение: София
|
Направи си тогава 64 битов брояч 
|
| Съб Окт 20, 2007 3:29 pm |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 ?
Какво като стане 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
...................................
_________________ Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !
Последна промяна plameniv на Съб Окт 20, 2007 5:54 pm, променена общо 1 път
|
| Съб Окт 20, 2007 4:55 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Правиш си брояч от 2 клетки:CntHI:CntLO и си увеличаваш при всеки цикъл CntLO.Проверяваш го на всеки път преди да го увеличиш като се препълни - увеличаваш CntHI с 1 а CntLO го нулираш.Ако и този брояч ти се струва малък -> CntHI1:CntHI:CntLO и се прави по същия начин.
|
| Съб Окт 20, 2007 5:25 pm |
|
 |
|
plameniv
Ранг: Форумен бог
Регистриран на: Нед Окт 10, 2004 9:55 am Мнения: 1718
|
 Ммм
Не е ли по лесно при намаляване , проверките са по малко ?
_________________ Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !
|
| Съб Окт 20, 2007 5:52 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Говоря по принцип,но с декрементиране кода може да е по-компактен.
|
| Съб Окт 20, 2007 7:30 pm |
|
|