How to calculate machine time in basic code?
Ex.
Used 4 Mhz
If porta.0 =1 then
Portb.1=1
Else
Portb.2=1
endif
How to calculate machine time in basic code?
Ex.
Used 4 Mhz
If porta.0 =1 then
Portb.1=1
Else
Portb.2=1
endif
Hi,
Execution Time Measurement
The oldest timing trick is to drive an output bit high when
entering a routine, and then low as we exit. Probe the port
with an oscilloscope and measure the time the bit is set.
* * *
You can run your PBP program in the MPLAB simulator and use the
StopWatch function to get the timing of the commands.
(Menu Debugger\Stopwatch).
Best regards,
Luciano
A way that I often use is to compare the execution against a hardware timer.
The example below works for an '8720 running at 20Mhz. You will have to modify accordingly if you use a different processor or XTAL.
-----------------------------------------------------------------------
DEFINE OSC 20
DEFINE NO_CLRWDT 1 ' Don't waste cycles clearing WDT
DEFINE _18F8720 1
DEFINE HSER_RCSTA 90H
DEFINE HSER_TXSTA 20H
DEFINE HSER_BAUD 9600
DEFINE HSER_CLROERR 1
DEFINE LOADER_USED 1
Define USE_LFSR 1
TRISC = %10111111 ' Hardware serial port on PORTC.7,PORTC.6
PSPCON = %00000000 ' No PSP
MEMCON = %10000000 ' No External Memory
CMCON = %00000111 ' No Comparator used, turn it off
T0CON = %10001000 ' No Prescaler,16 bit
TimerValue VAR WORD
RealTime VAR WORD
TestArray VAR BYTE[3600]
DummyVal VAR Byte
Restart:
Intcon.2 = 0
TMR0H =0
TMR0L =0
'Put code to be timed here
'----------------------------------------
TimerValue.LowByte = TMR0L
TimerValue.Highbyte = TMR0H
IF INTCON.2 = 1 THEN
HSEROUT ["OVERFLOW - User different prescaler value",13,10]
ENDIF
HSEROUT ["Execution Time = ",#TimerValue, " Cycles, ",#TimerValue/5," Microseconds",13,10,10]
HSEROUT ["Press any key to restart",13,10]
HSERIN [DummyVal]
GOTO Restart
END
Charles Linquist
Bookmarks