The code
is given.Code:DEFINE OSC 20
WHILE A <> 0
Zaehler_Byte = Zaehler_Byte + 1
WEND
Assuming that Zaehler_Byte = 60000, how long did the loop take?
Printable View
The code
is given.Code:DEFINE OSC 20
WHILE A <> 0
Zaehler_Byte = Zaehler_Byte + 1
WEND
Assuming that Zaehler_Byte = 60000, how long did the loop take?
I think the following will happen. At startup all variables are cleared so A = 0. Therefore the While A <> 0 test will fail and the WHILE/WEND block will be skipped.
HTH
BrianT
Hi, ted
Supposing you use Zaeler_BYTE as a Word ( Good question ... indeed ) :
As you increment Zaeler_BYTE , you'll reach an overflow ( and return to Zero ) for Zaeler_BYTE = 65536 ...
so, you'll count from 60 000 to 60535 ...
that makes ??? loops ...
BUT ... as it is Zaeler_BYTE ...
Overflow will occur for Zaeler_BYTE = 256
And you'll count only from 96 ( 60 000 Lower Byte ) to 255 ...
that really makes ??? ... loops
Jawohl ???
Alain
PS: we suppose A is an input state ... and can be 0 or 1 ...
I think what Ted is actually asking is something like this ...
With a 20MHz osc, how long did it take for Zaehler_Word to reach 60,000?Code:DEFINE OSC 20
WHILE Zaehler_Word <> 60000
Zaehler_Word = Zaehler_Word + 1
WEND
Trent Jackson
Hi, Trent
Once, the littles things I raised up have been solved ... a little round in MPSIM is the next step ...
To be sure ...
Alain
I think that the question is very "meaningful" and not so easy to accurately answer without going into assembly routines. I say this because you need to know the number of instruction cycles needed for each mnemonic, the time taken for each cycle (around 1uS at 4MHz I think), and finally what OP codes are driving the PBP instructions. You need to have a good understanding of assembly code to be able to work it out, which I don't have, otherwise I'd provide an answer.
Trent Jackson
Hi,
I remember Darrel wrote a little bit of program to measure program parts duration ... a SEARCH through those columns will be welcome.
The second way is to use MPSIM ( part of MPLAB ) with the stopwatch : result is quite perfect !
Alain
@20MHz I'm guessing ~3uS per iteration of the loop.
Trent Jackson
I do not understand your answers.
What you need to take out of this:
If you loop a variable from zero to 60000 on a pic being driven by a 20Mhz Quartz using the pbp code WHILE without adding a Pauseus XY into the loop, what does this value tell me about the time being elapsed.
We? Are you schizophrenic?
I only remember having responded ONCE to you ... and I do think no one here can give you a precise time as an answer. ( except Fernand REYNAUD's " a certain time" ... Lol )Quote:
your answers.
End of File for me ...
Alain
The best way to get your answer is to compile the code, look at the assembly listing, and compute the time to execute one cycle from that. Then multiply it by the number of cycles the loop is expected to run. You also need to check the PIC assembly code docs to see how long it takes to execute each assembly code. I have done this a lot in order to determine how long my interrupt routines are.
Also I think some of the comments are about the fact that the code sample you gave may not run the way you expect. "A" is not defined so the WEND duration is unknown. Also, A does not change so it is not a good loop control variable.
I wonder if someone has written a program that reads assembler files and tags execution times to all the microcode.
You'll be a new a man in a couple of weeks Alain ...
Chlorpromazine is used to treat psychotic disorders and symptoms such as hallucinations, delusions, and hostility. Take two tablets twice a day with food.
Side Effects
- Shaking (like Parkinson's Disease)
- Stiffness
- Restlessness
- Problems with sex life
- Decreased appitite
Shocking side effects with Chlorpromazine -- I don't know what's worse, being schizophrenia or taking Chlorpromazine!
But I guess that the good news is that you're not schizophrenic Alain, at least I don't think so ...
Trent Jackson
Hi, Trent
I really admire your knowledge about those border subjects ...
Seems you are really used to psychiatric advice.
One thing is sure : your doubts are really boring ... and have been boring for too long a time.
Sorry not to be one of the SuperTrent's fans ...
Alain
Definitely not schizophrenic.
Trent Jackson
____________
Undergraduate b.tech
Anyone for a SuperTrent-Non-Fan Club? :D
Can I point out something (again)?
Still?Quote:
Date of Birth:
February 8, 1977
Age:
31
Biography:
Fulltime student - Bachelor of Applied Science in IT
Location:
Australia
Interests:
Cars, Computers, Electronics
Occupation:
Currently not employed
falingtrea, thank you for your detailed answer. (Un)fortunately I left assembler behind me a few years ago when I started with PBP. And I would like to not go back.
So do you all agree that it is roughly 3uS per loop as T.Jackson states?
Offtopic:
I am sure that T.Jackson has his reasons to react the way he did.
Coming from his kind of answer compared to all answers in this thread, Acetronics does have mental issues.
It is something between T.Jackson and Acetronics, and you were not invited to be a freeloader, skimask. So stay out of this.
Actually, I think they all agree that you should measure it for yourself.
instruction execution time
http://www.picbasic.co.uk/forum/showthread.php?t=365
And I also think that the Rest of the forum agrees that everyone here needs to calm down.
I have the complaints to back that up.
Mellow out! Or stop posting.
<br>
But Jeremy (skimask) ...
The biggest difference between you and I is that I have nothing to hide, whereas you obviously do to some extent. Your public profile is blank, not even a mention of your location (there used to be), and you seem to go off the rails when ever someone calls you by your name! Incidentally I have recently discovered that your profile did contain some information at one stage, you stated that your location was North Dakota I believe.
Trent Jackson
Ya know, I was going to PM this, but screw it...This might be good for a few laughs...and it's my B/Day and I feel froggy (of course that last fishbowl doesn't help things either! :D)
Listen up there Trent Jackson, UNEMPLOYED COLLEGE STUDENT, and Supa-Genius (think back to the ol' Wile E. Coyote and Road Runner cartoons) and listen good and hard...Surely your continuous (continuing I might add) institutional education and your connections have enabled you to listen and listen well, even if the average person has to yell up to your level...UP as in the angle sense...as in the vertical sense.
I had a problem with ID theft awhile back that I just recently got fixed...not your standard ID theft either (credit cards, bank accounts, etc), this jerkoff enlisted in the U.S. Navy as me. So all of the sudden, I went from a 20+ year USAF MSgt to a 1 year Seaman Basic, credentials gone, pay grade gone, test scores out, clearances---C'ya!...blah blah blah blah.
I may go 'off the rails' when somebody calls me by name (which I earned that nickname about 20+ years as a result of a cold cold winter and numerous strong beverages), but...well, I don't go into some crazy psycho B.S. rambling crap-ola... Emptying out a profile here is one of the least of my worries when it comes to that whole ID thing...but every little bit of cleaning out information couldn't hurt...
And "Ted's"...if you hang out here enough (which you obviously haven't yet), you'll figure out that Acetronics (Alain) is one of the more educated people around here. So while you're having problems figuring out exactly how many cycles a simple loop runs, all it really takes is a look at the .lst file generated by the compilation process and a bit of math would easily give you your answer. And figuring out how to use MPSIM is a good thing. After all, I don't think anybody here has YOUR hardware, with YOUR configuration. So, even if we were able to give you a correct answer for the majority, who knows...something in YOUR configuration might be just a tad bit off and cause you to have a completely different answer. So, the only true answer is for you to handle it yourself.
And besides that, Alian is absolutely right...your first post is an unanswerable question without having a definition for A.
And while this Trent Jackson, while obviously educated in certain things, sits WAY up there, with his big words and his big acronyms and big medical terms...
Ahhhhhh......that was good.....and I feel.....well, a year older...
skimask, happy birthday.
I created a new code:
There was no lst created but a mac, asm and hex.Code:Zahl VAR WORD
DEFINE OSC 20
WHILE Zahl < 60000
Zahl = Zahl + 1
WEND
mac:
asm:Code:
NOLIST
LABEL?L macro Label
RST?RP
ifdef PM_USED
LALL
Label
XALL
else
Label
endif
endm
ADD?WCW macro Win, Cin, Wout
if (Wout == Win)
if (Cin == 1)
CHK?RP Wout
incf Wout, F
btfsc STATUS, Z
incf Wout + 1, F
else
movlw low (Cin)
CHK?RP Wout
addwf Wout, F
if (((Cin) >> 8) == 0)
btfsc STATUS, C
incf Wout + 1, F
else
movlw (Cin) >> 8
btfsc STATUS, C
addlw 1
addwf Wout + 1, F
endif
endif
else
movlw low (Cin)
CHK?RP Win
addwf Win, W
MOVE?AB Wout
if (((Cin) >> 8) == 0)
MOVE?BA Win + 1
btfsc STATUS, C
addlw 1
MOVE?AB Wout + 1
else
movlw (Cin) >> 8
btfsc STATUS, C
addlw 1
CHK?RP Win
addwf Win + 1, W
MOVE?AB Wout + 1
endif
endif
endm
CMPGE?WCL macro Win, Cin, Label
MOVE?WW Win, R0
MOVE?CB (Cin) >> 8, R1 + 1
MOVE?CA low (Cin)
L?CALL CMPGE
BIT?GOTO 0, STATUS, Z, Label
endm
CMPGE_USED = 1
GOTO?L macro Label
L?GOTO Label
endm
LIST
How do you filter out the information needed?Code:PM_USED EQU 1
INCLUDE "16F628A.INC"
; Define statements.
#define OSC 20
RAM_START EQU 00020h
RAM_END EQU 0014Fh
RAM_BANKS EQU 00003h
BANK0_START EQU 00020h
BANK0_END EQU 0007Fh
BANK1_START EQU 000A0h
BANK1_END EQU 000EFh
BANK2_START EQU 00120h
BANK2_END EQU 0014Fh
EEPROM_START EQU 02100h
EEPROM_END EQU 0217Fh
R0 EQU RAM_START + 000h
R1 EQU RAM_START + 002h
R2 EQU RAM_START + 004h
R3 EQU RAM_START + 006h
R4 EQU RAM_START + 008h
R5 EQU RAM_START + 00Ah
R6 EQU RAM_START + 00Ch
R7 EQU RAM_START + 00Eh
R8 EQU RAM_START + 010h
FLAGS EQU RAM_START + 012h
GOP EQU RAM_START + 013h
RM1 EQU RAM_START + 014h
RM2 EQU RAM_START + 015h
RR1 EQU RAM_START + 016h
RR2 EQU RAM_START + 017h
_Zahl EQU RAM_START + 018h
_PORTL EQU PORTB
_PORTH EQU PORTA
_TRISL EQU TRISB
_TRISH EQU TRISA
INCLUDE "KKK.MAC"
INCLUDE "PBPPIC14.LIB"
LABEL?L L00001
CMPGE?WCL _Zahl, 0EA60h, L00002
ADD?WCW _Zahl, 001h, _Zahl
GOTO?L L00001
LABEL?L L00002
END
There's a checkbox in MCS for telling MCS to kick out a .lst file during the compilation.
Put easily recognizable labels before and after the code section that your after in your PBP source and when the .lst file gets created, do a search (Ctrl-F) for those labels and you should be able to see them right off.
This is what is written in between
What is more, there is no question about my configuration. It is a timing issue. The osc value determines the speed to let the program know how many cycles one millisecond will take f.i.. Knowing the speed there is enough information to reproduce the question and to give an answer. I am not here to relearn what would take others just a few seconds to reproduce - less than writing a "do it yourself" takes.Code:48 LABEL?L L00001
+ LALL
+ 0019- L00001
49 CMPGE?WCL _Zahl, 0EA60h, L00002
+ 0019- 0838 movf _Zahl, W
+ 001A- 00A0 movwf R0
+ 001B- 0839 movf (_Zahl) + 1, W
+ 001C- 00A1 movwf (R0) + 1
+ 001D- 30EA movlw low ((0EA60h) >> 8)
+ 001E- 00A3 movwf R1 + 1
+ 001F- 3060 movlw low (low (0EA60h))
+ 0020- 2001 call CMPGE
+ 0021- 1D03 btfss STATUS, Z
+ 0022- 2827 goto L00002
50 ADD?WCW _Zahl, 001h, _Zahl
+ 0023- 0AB8 incf _Zahl, F
+ 0024- 1903 btfsc STATUS, Z
+ 0025- 0AB9 incf _Zahl + 1, F
51 GOTO?L L00001
+ 0026- 2819 goto L00001
52 LABEL?L L00002
+ LALL
+ 0027- L00002
53
I am going to use Jackson's 3us and this is the end of the story.
Do not make things more complicated than they have to be.
Your result is :
504.027000 ms ... @ 8.4 µs per loop !!!
3 minutes to get it with MPSIM , as we had explained you ...
Alain
You see, simple and easy for an experienced programmer.
Why did you not just do that in the first place?
So my code will be:
Code:Zahl VAR WORD
time_in_us VAR WORD
DEFINE OSC 20
WHILE Zahl < 60000
Zahl = Zahl + 1
WEND
time_in_us = Zahl * (84/10)
One thing to clarify: Is there a difference regarding the time being elapsed when using BYTE for Zahl instead of WORD?
So
Zahl VAR WORD
is being replaced by
Zahl VAR BYTE
1) Cause here, we teach people how to catch the fish ... it's not a PbP "Drive in" !!!
2) Cause there was NO answer to what you had asked ... and no way to understand what you wanted to do ...Quote:
as we had explained you ...
3) Still no way to understand ... :
... with this code, "Time_in_us" WON' T be 504 027 ... so, why re-calculate it ???Code:
Zahl VAR WORD
time_in_us VAR WORD
DEFINE OSC 20
WHILE Zahl < 60000
Zahl = Zahl + 1
WEND
time_in_us = Zahl * (84/10)
... I do not joke : with the calculation errors ( roundings ) , the showed result will be ... FALSE !!!
Was I Spiritual enough ???
Alain