Hoi jongens,

Ik ben al een hele namiddag bezig om een 18F452 pic aan de praat te krijgen in ASM.

Ik heb een werkend stukje programma van uit een 16F, ik heb de bank switching verwijderd, en ook de nodige registers aangepast.
Maar na het inladen van de hex doet de microcontroller niets.

Moet er in een 18F versie nog een speciale configuratie gedaan worden zodanig dat het programma begint te lopen?

Heb ik gedaan, maar zie niet direct fouten of verschillen met een 16F microcontroller.
Dit is de init


ORG	00h
	goto	init


init	
					;zet alles digitaal
		CLRF	PORTA			;maak porta laag
		CLRF	PORTB			;maak portb laag
		CLRF	PORTC
		CLRF	PORTD
		movlw 0x07
		MOVWF	ADCON1
	
;		BSF		STATUS,RP0		;Select Bank1
		MOVLW	B'111111'		;maak van poort A INgangen
		MOVWF	TRISA		
		MOVLW	b'00000011'		;maak van poort B uitgangen
		MOVWF	TRISB
		MOVLW	B'10011000'
		MOVWF	TRISC
		BSF		TRISC,7			;op poortb,1 na
		MOVLW	B'00000000'
		MOVWF	TRISD
		MOVLW	B'00000011'
		MOVWF	TRISE
		CLRF	LATB
		MOVLW	04h				;waarde voor baudrate
		MOVWF	SPBRG			;in het register setten
		BSF		TXSTA,BRGH		;high speed
		BCF		TXSTA,SYNC		;Async connection
		BSF		PIE1,RCIE		;Set recieve interrupt
; Stel de pic in alles digitaal
	;	BCF ADCON1,3
	;	BSF ADCON1,2
	;	BSF ADCON1,1
	

		BSF		INTCON2,6 ; flankdetectie op stijgende flank voor interupts

	;ga terug naar bank 0
;
;$$$$$$$$$$$$$$$$$$$$i2c$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;		BSF SSPCON,SSPEN ; ENABLE SERIEEL ONTVANGEN
;		BSF SSPCON,SSPM3
;		BSF SSPCON,SSPM2
;		BSF SSPCON,SSPM1
;		BCF SSPCON,SSPM0 





; Uart instellen
		BSF		RCSTA,RX9				BSF 	RCSTA,CREN		
		BSF		RCSTA,SPEN		;Enable UART
	 	MOVF	RCREG,W			;clear RCREG
	    MOVF  	RCREG,W			;clear RCREG
	    MOVF	RCREG,W 		;clear RCREG

		BSF 	INTCON,PEIE		;Enable interrupts
		BSF 	INTCON,GIE
		bsf		INTCON,INT0IE
		BSF     INTCON,4	; zet interupt on

;PWM INNSTELLEN
	; PWM 1
	BSF CCP1CON,3
	BSF	CCP1CON,2
	BSF	CCP1CON,4
	BSF	CCP1CON,5
	; PWM 2
	BSF	CCP1CON,5
	BSF	CCP1CON,4
	BSF CCP2CON,3
	BSF	CCP2CON,2
	BSF T2CON,TMR2ON

Hier een Begin stukje van mij
Probeer eerst eens een uitgang te laten pulsen.
en check die uitgang met de scoop


;---- HEADER -------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
		LIST      	p=18F452	;
		INCLUDE   	<p18f452.inc>	;
		errorlevel 	-302		;surpress warning 302
;-------------------------------------------------------------------------------------------
;---- CONFIGURATION BITS -------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
		__CONFIG    _CONFIG1H, _HSPLL_OSC_1H 
		__CONFIG    _CONFIG2H, _WDT_OFF_2H
		__CONFIG    _CONFIG4L, _LVP_OFF_4L 
;-------------------------------------------------------------------------------------------
;---Reset-Vector ---------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
                ORG     0x000   	;reset vektor
                goto    start           ;
;-------------------------------------------------------------------------------------------
;--- Included Subroutines ------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
		#INCLUDE		<Definitions.inc>	;
		#INCLUDE		<IO.inc>		;
		#INCLUDE		<Setup.inc>		;
								;
		#INCLUDE		<Serial_IN2.inc>	;
;-------------------------------------------------------------------------------------------
start		call	Setup		;
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
#INCLUDE	<Fase_A.inc>		;
#INCLUDE	<Fase_B.inc>		;
#INCLUDE	<Fase_C.inc>		;
#INCLUDE	<Fase_D.inc>		;
#INCLUDE	<Fase_E.inc>		;
#INCLUDE	<Fase_F.inc>		;
#INCLUDE	<Fase_G.inc>		;
#INCLUDE	<Fase_H.inc>		;
;-------------------------------------------------------------------------------------------
		end

Ik zie net je posting met data
ik zie "INCLUDE <p18f452.inc>"niet staan
als je in de real asm data kijkt kan je zien wat er echt in bytes de cpu uitvoert

Op 3 juni 2009 18:51:05 schreef nonkel_dw:
Heb ik gedaan, maar zie niet direct fouten of verschillen met een 16F microcontroller.
Dit is de init

Include?
Config?

Sorry speciaal voor Henry S.


#include     "http://www.circuitsonline.net/forum/faq/2" 

Hij miste het begin .. dus geef hem richting ...
ipv "read datasheet"
Voor de rest mag het het toch zelf doen ... zelf ontdekken
zelf zien .. maar als je de eerste start zelf niet kan maken .. is het echt moeilijk in assembler

Dit staat ook in men file alleen was ik dit vergeten te copieren

list     p=18f452, n=48, t=ON, st=OFF

	#INCLUDE <P18F452.INC>

ORG		0x08				;Interrupt vector
	MOVWF 	W_SAVE			;save context,
	MOVF 	STATUS,W		;save  STATUS, PCLATH & W
	MOVWF	S_SAVE
	MOVF 	PCLATH,W
	MOVWF 	P_SAVE	
	goto	int

Ik heb best al wat ervaring, alleen zie ik hier niet echt een fout, ook geeft de compiler geen fout.

[Bericht gewijzigd door nonkel_dw op (26%)]

Hardware foutje? Reset vergeten oid?

mclr staat hoog fuses staan juist

Op 3 juni 2009 19:08:15 schreef x21r:
Sorry speciaal voor Henry S.


#include     "http://www.circuitsonline.net/forum/faq/2" 

Hij miste het begin .. dus geef hem richting ...
ipv "read datasheet"

Als je overstapt van 16F naar 18F is het eerste wat je doet de datasheet lezen.

Waar staan de interrupt routines?
Zoals het nu staat loopt de init dwars over de low en high interrupt vectors heen.

de interupt begint op vector 0x8
zoals ik kan aflijden uit de interupt

Heb je al een 'blink-a-led' gemaakt?

nee nog niet dit ga ik nu eens maken

ik kom zo ook niet echt uit

mijn blink a led
Deze doet het ook niet...


list     p=18f452

	#INCLUDE <P18F452.INC>


VERTRAGING	EQU	0X20
VERTRAGING2	EQU	0x21
	ORG	00h
	goto	init	;Initialize PIC

init	
		CLRF	PORTA			;maak porta laag
		CLRF	PORTB			;maak portb laag
		CLRF	PORTC
		CLRF	PORTD
		movlw 0x07
		MOVWF	ADCON1
	
		MOVLW	B'00000000'
		MOVWF	TRISD
MAIN	
	BSF	PORTD,6
	CALL DELAY
	CALL DELAY
	BCF	PORTD,6
	CALL	DELAY
	CALL	DELAY
	GOTO MAIN

DELAY
	MOVLW	D'255'
	MOVWF	VERTRAGING
	MOVWF	VERTRAGING2
LUS
	DECFSZ	VERTRAGING,F
	GOTO	LUS
	DECFSZ	VERTRAGING2,F
	GOTO LUS
	RETURN

	END

[Bericht gewijzigd door nonkel_dw op (82%)]

Weer geen config, kijk toch even in de datasheet.

Over die blink a led en config ..heb ik in mijn eerste post al gemeld ;) blij dat we het er over eens zijn H.S

Wat ik nog meer heb staan in mijn Setup ...asm


		clrf 	PORTA,0		;Clear Outputlatch portA
		clrf	PORTB,0		;Clear Outputlatch portB
		clrf	PORTC,0		;Clear Outputlatch portC
		clrf	PORTD,0		;Clear Outputlatch portD
		clrf	PORTE,0		;Clear Outputlatch portE

		movlw	0x07		;
		movwf	ADCON1,0	;all inputs are digital                movlw	b'11010111'	;

		movwf	TRISC,0		;portC.7: input	HARDWARE UART

Ik weet niet meer waarom die ,0 er achter staat ..ik weet wel dat het werkt
Ps kijk eens wat de real assembler output is

Idd Henry dit werkt nu wel na de config lijn er in gezet te hebben met een 16f versie werk ik altijd met de config lijn van Mplab maar hier schijnt het niet te werken.

Is er een vervang comando voor RRF en skpc bij een 18F versie

Ik heb voor RRF deze vervang comando's gevonden RRCF,
RRNCF

Iemand die hier ervaring mee heeft?

Kijk eens naar de template-files van de 18F-PICs, met name de plaats van de interruptvectoren.
Laat eens duidelijk zien hoe je config-instellingen eruit zien.
Als je niet uit de datasheet kan opmaken wat de instructies RRFNC en RRFC doen, is misschien in assembler programmeren wat te hoog gegrepen.

Maak onderscheid tussen PORT en LATCH. Stel ook altijd de TRIS van de poorten in, etc.

ondertussen loopt het programma al enkel moet ik een ander comando vinden voor "skpc"

Is een 14bit pseudo-instructie; staat in de helpfile:


SKPC = Skip on Carry  = BTFSS  STATUS,C  

Of met 18F kun je BC/BNC gebruiken...

[Bericht gewijzigd door Arco op (16%)]