Hallo!

Mein "Werkzeug" dazu habe ich schon fertig und mehrmals ausprobiert (z.B. für sehr genaue Einstellung Verzögerungschleifen). Es ist für den PIC18F2X2 geschrieben. Die konfiguration des Systemoscillators kann geändert werden (aktuell: externer Quarzoscillator). Das komplette Unter/Programm ohne RETURN (stattdessen 2xNOP) muss zwischen die zwei Sternlinien (wo jetzt zum Testen 10xNOP steht) kopiert und assembliert werden.

Nach dem Einschalten des programmierten PICs, steht die Ablaufzeit des Unter/Programms als hex Zahl in dem A Register (A3-A0) (obere Zeile des Displays links) und als dec Zahl in dem D Register (D3-D0) (untere Zeile des Displays rechts). Die maximale Zahl beträgt FFFFFFh (16777215d) Systemtakte (Fosc/4). Als Display habe ich die in dem Thema:

https://www.roboternetz.de/phpBB2/viewtopic.php?t=13685

beschriebene Hardware benutzt. Die alle mit @ bezeichneten Unterprogramme gehören zu dem Display und können für anderes Display ersetzt werden. Falls jemand dafür interessiert ist, bin ich zur Hilfe bereit.

Dank dem "Werkzeug" konnte ich mir die Frage, ob die POSTINC und POSTDEC Programmablauf verlangsamen selber mit klarem NEIN beantworten und aus dem Forum löschen.

Inzwischen habe ich ein ASM Messprogramm geschrieben und in Wiki hochgeladen:

https://www.roboternetz.de/wissen/in...r#PIC_Profiler

MfG
Code:
;	Profiler
	LIST      P=18F252
	include "P18F252.inc"
;		__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
		__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _EC_OSC_1H
;		__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
		__CONFIG    _CONFIG2L, _BOR_OFF_2L & _BORV_20_2L & _PWRT_ON_2L
		__CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
		__CONFIG    _CONFIG3H, _CCP2MX_ON_3H
		__CONFIG    _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
		__CONFIG    _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 
		__CONFIG    _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
		__CONFIG    _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L 
		__CONFIG    _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
		__CONFIG    _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
		__CONFIG    _CONFIG7H, _EBTRB_OFF_7H
#define	@PORT	PORTB
#define	@TRIS	TRISB
#define	@DT	@PORT,7
#define   @CK	@PORT,6
;************************
#define	_C	STATUS,C
#define	_Z	STATUS,Z
#define	_Fcra	Flags,0
#define	_Fcrp	Flags,1
#define	_Ferr	Flags,2
;************************
A3		EQU	0x00
A2		EQU	0x01
A1		EQU	0x02
A0		EQU	0x03
B3		EQU	0x04
B2		EQU	0x05
B1		EQU	0x06
B0		EQU	0x07
C3		EQU	0x08
C2		EQU	0x09
C1		EQU	0x0A
C0		EQU	0x0B
D3		EQU	0x0C
D2		EQU	0x0D
D1		EQU	0x0E
D0		EQU	0x0F
Flags		EQU	0x10
ATemp		EQU	0x11
HTemp		EQU	0x12
RTemp		EQU	0x13
Tmp		EQU	0x15
Tmp1		EQU	0x16
;************************
@Tmp		EQU	0xFF
@Tmp1		EQU	0xFE
@Tmp2		EQU	0xFD	
@Tmp3		EQU	0xFC
;************************
		ORG	0x0000
		call	Init
Main		bcf	INTCON,GIE		; disable interrupts
		movlw	7
		movwf	T0CON			; configure Timer0
		clrf	TMR0H			; clear Timer 0
		clrf	TMR0L
		bsf	T0CON,TMR0ON		; start Timer0
;*******************************************************
		nop				; Hier wird das gemessene Programm kopiert
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
;*******************************************************
		movlw	0xA7			; "stop" Timer0
		movwf	T0CON
		call	GetTime
		call	@
		goto	Main 
GetTime		movff	TMR0L,A1
		movff	TMR0H,A2
		movff	TMR0L,HTemp
		clrf	ATemp
		bcf	TRISA,5
FToggle		incf	ATemp,1
		bsf	T0CON,T0SE
		bcf	T0CON,T0SE
		movf	TMR0L,0
		subwf	HTemp,0
		btfsc	_Z
		goto	FToggle
		comf	ATemp,1
		incf	ATemp,0
		movwf	A0
		bcf	T0CON,TMR0ON
		bsf	TRISA,5
Hex_Dec	call	CDClr			; Hex>A,D>Dec
		movlw	1
		movwf	C0
		movlw	0x18			; 24 bit Hex (6digits) > 32 bit Dec (8 digits)
		movwf	HTemp
Hex_DecL	btfsc	A0,0
		call	AddDC
		call	CopyCB
		call	AddCB
		call	ARotRb
		decfsz	HTemp,1
		goto	Hex_DecL
		call	BCClr
		return
BCClr		movlw	8
		movwf	ATemp
		lfsr	FSR0,B3
BCClrL		clrf	POSTINC0
		decfsz	ATemp,1
		goto	BCClrL
		return
CDClr		movlw	8
		movwf	ATemp
		lfsr	FSR0,C3
CDClrL		clrf	POSTINC0
		decfsz	ATemp,1
		goto	CDClrL
		return
CopyCB		lfsr	FSR0,C0
		lfsr	FSR1,B0
CopyReg	movlw	4
		movwf	ATemp
CopyRegL	movff	POSTDEC0,POSTDEC1
		decfsz	ATemp,1
		goto	CopyRegL		
		return
AddCB		lfsr	FSR0,B0			; C+B>C
		lfsr	FSR1,C0
		goto	AddReg
AddDC		lfsr	FSR0,C0			; D+C>D
		lfsr	FSR1,D0
AddReg		bcf	_Ferr			; 32 bit, (4 Bytes)
		bcf	_Fcrp
		movlw	4
		movwf	ATemp
AddRegL	bcf	_Fcra
		movf	INDF0,0
		addwf	INDF1,0
		btfsc	_C
		bsf	_Fcra
		daw
		movwf	INDF1
		btfsc	_C
		bsf	_Fcra
		btfss	_Fcrp
		goto	AddRegN
		movlw	1
		addwf	INDF1,0
		daw
		movwf	INDF1
		btfsc	_C
		bsf	_Fcra
AddRegN	bcf	_Fcrp
		btfsc	_Fcra
		bsf	_Fcrp
		movf	POSTDEC0,1
		movf	POSTDEC1,1
		decfsz	ATemp,1
		goto	AddRegL
		btfsc	_Fcra
		bsf	_Ferr
		return
ARotRb		lfsr	FSR0,A2			; A register 3 Bytes (24 bit)
RRotRb		movlw	3			; rotates a register 1 bit right
		movwf	RTemp
		bcf	_Fcrp
		btfsc	A0,0
		bsf	_Fcrp
RRotRbL	bcf	_Fcra
		btfsc	INDF0,0
		bsf	_Fcra
		bcf	_C
		btfsc	_Fcrp
		bsf	_C
		rrcf	INDF0,1
		bcf	_Fcrp
		btfsc	_Fcra
		bsf	_Fcrp
		movf	POSTINC0,1
		decfsz	RTemp,1
		goto	RRotRbL
		return
Cls		lfsr	FSR0,0
ClsL		clrf	POSTINC0
		btfss	FSR0L,6
		goto	ClsL
		return
@		lfsr	FSR2,0x000
		call	@1st
		call	@Line
		call	@2nd
		call	@Line
		return
@Line		movlw	8
		movwf	@Tmp3
@LineL		movf	POSTINC2,0
		call	@Val 
		decfsz	@Tmp3,1
		goto	@LineL
		return
@1st		movlw	0x80
		goto	@Cmd
@2nd         	movlw 	0xC0
@Cmd          	movwf 	@Tmp2
		bcf	STATUS,C
		goto	@Send
@SPC		movlw	" "
		goto	@Char
@Val	 	movwf 	@Tmp1
		swapf	@Tmp1,0
		call 	@Num
		movf 	@Tmp1,0
@Num		andlw	0x0F
		movwf	@Tmp
		movlw 	0x0A
		subwf 	@Tmp,0
		btfsc  	STATUS,C
		addlw 	7
		addlw	0x3A
@Char	 	movwf 	@Tmp2
		bsf	STATUS,C
@Send		bcf	@CK
		bcf	@DT
		bsf	@DT
		movlw	9
		movwf 	@Tmp
@Ser		bcf	@CK
		bcf 	@DT
		btfsc	@Tmp2,7
		bsf 	@DT
		bsf 	@CK
		rlcf	@Tmp2,1
		decfsz	@Tmp,1
		goto	@Ser
		bcf	@DT
		bsf	@DT
@DelS		movlw	0x64
		movwf	@Tmp2
@DelSL		decfsz	@Tmp2,1
		goto	@DelSL
		return
Init		movlw	7
		movwf	ADCON1
		clrf	TRISA			; make all ports as output
		clrf	PORTA
		clrf	TRISC
		clrf	PORTC
		clrf	@TRIS
		clrf	@PORT
		call	Cls
		movlw 	0x38			; initialise display
		call 	@Cmd
		movlw	0x0C
		call	@Cmd
		movlw 	6
		goto 	@Cmd
		END