как се смята delay loop time в assembler
4 отговора
0 прегледа
как се смята delay loop time в assembler
здр.
вапроса ми е към хората, които се занимават с програмиране.
Търся формула с която да мога да изчислява delay loop time в assembler /става дума за pic микроконтролери/.
ето два фрагмента:
/1/
vreme: movlw D'брои цикли'
movwf K
kloop: decfsz K,f
goto kloop
return
------------------------------
/2/
vreme: movlw D'брои цикли'
movwf J
movwf K
kloop: decfsz K,f
goto kloop
decfsz J,f
goto jloop
return
-----------------------------
K и J са клетки, които сам дефинирал в началото на програмата
вапроса ми е към хората, които се занимават с програмиране.
Търся формула с която да мога да изчислява delay loop time в assembler /става дума за pic микроконтролери/.
ето два фрагмента:
/1/
vreme: movlw D'брои цикли'
movwf K
kloop: decfsz K,f
goto kloop
return
------------------------------
/2/
vreme: movlw D'брои цикли'
movwf J
movwf K
kloop: decfsz K,f
goto kloop
decfsz J,f
goto jloop
return
-----------------------------
K и J са клетки, които сам дефинирал в началото на програмата
Re: как се смята delay loop time в assembler
първото извикано като подпрограма прави 3*(D'брои цикли')+3 микросекунди при 4 МХц
плюс 2 микросекунди за:
vreme: movlw D'брои цикли'
movwf K
които са преди това.
Във втория пример липсва етикета jloop , ако е преди decfsz J,f ще станат
6*(D'брои цикли')+2 микросекунди при 4МХц или все едно имаш два цикъла един след друг = 2 пъти повече време.
Също не е сметнато:
vreme: movlw D'брои цикли'
movwf J
movwf K
които са още 3 микросекунди еднократно
плюс 2 микросекунди за:
vreme: movlw D'брои цикли'
movwf K
които са преди това.
Във втория пример липсва етикета jloop , ако е преди decfsz J,f ще станат
6*(D'брои цикли')+2 микросекунди при 4МХц или все едно имаш два цикъла един след друг = 2 пъти повече време.
Също не е сметнато:
vreme: movlw D'брои цикли'
movwf J
movwf K
които са още 3 микросекунди еднократно
Re: как се смята delay loop time в assembler
във втория случай наистина сам изпуснал единия етикет, но идеята ми е тои да се намира пред movwf K или:
movlw D' цикал'
movwf J
jloop: movwf K
kloop: decfsz K,f
goto kloop
decfsz J,f
goto jloop
return
-----------
movlw D' цикал'
movwf J
jloop: movwf K
kloop: decfsz K,f
goto kloop
decfsz J,f
goto jloop
return
-----------
Редактирано от noovas на
Re: как се смята delay loop time в assembler
3*'цикал'^2 + 6*'цикал' +3
но jloop трябва да е в началото
но jloop трябва да е в началото
Re: как се смята delay loop time в assembler
Освен както описаха колегите , да си е сметнеш по инструкции което никак не е трудно ... МPLAB ,предлага функцията simulation trace . С нея става ного лесно правиш стоиноста която се променя на 1 и така после получените
микросекунди или брои цикли както искаш така ... ги умножаваш по числото което ще запишеш като стойност и получаваш точно колко ще ти отнеме
като време тая подпрограма за закъснение .
или обратното нужната за теб стоиност е намираш като разделиш времето което ти е необходимо на пауза по това на подпрограмата за 1 изведена от мплаба .
микросекунди или брои цикли както искаш така ... ги умножаваш по числото което ще запишеш като стойност и получаваш точно колко ще ти отнеме
като време тая подпрограма за закъснение .
или обратното нужната за теб стоиност е намираш като разделиш времето което ти е необходимо на пауза по това на подпрограмата за 1 изведена от мплаба .