- LiTime Speicher und Akkus         
Ergebnis 1 bis 5 von 5

Thema: 16F59 Pagefehlermeldung, Programm läuft nicht mehr

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.08.2006
    Beiträge
    6

    16F59 Pagefehlermeldung, Programm läuft nicht mehr

    Anzeige

    Praxistest und DIY Projekte
    Seit ich

    Code:
    nop
    goto	main	
    nop
    nop
    eingefügt habe, habe ich folgende Fehlermeldung



    Error - file 'D:\CANON\16f59\main.o', section '.org_0', performs a call to
    symbol 'signalrueck' which is not in the lower half of a page.


    habe mit pagesel probiert, programm läuft trotzdem nicht, habs wieder wegkommentiert.

    Was mach ich falsch?

    gruss Andi



    Code:
    	list		p=16f59 
    	#include	<P16f5x.INC>
    ;----------------------------------------------------------
    ; Configuration Word
    	__CONFIG	_CP_OFF & _WDT_OFF & _HS_OSC
    ;----------------------------------------------------------
    ; Variablen festlegen
    	cblock		0x10 
    	delay1		;equ	0x20	; Wartezeit für WAIT in Millisekunden
    	delay2		;equ	0x21	; interner timer für wait
    	value		; Delayzeit
    	times1		; Anzahl der Wiederholungen bei signalrueck
    	times2		; Anzahl der Wiederholungen bei signalrueck
    	times3		; Anzahl der Wiederholungen bei signalrueck fuer aus
    	steps		; Anzahl der Schritte bei Aufwaermen
    	anzahl		; Anzahl der Aufrufe bei papiereinzug
    	anzahl2		; Anzahl der Aufrufe bei papiereinzug 2
    	endc
    
    ;----------------------------------------------------------
    ; Konstanten festlegen
    
    #define	VorschubV	PORTA,0		; Vorschub vor
    #define	VorschubR	PORTA,1		; Vorschub rueck
    #define	PapierR		PORTA,2		; Papier runter
    #define	PapierH		PORTA,3		; Papier hoch
    
    	org		0x0000					; Programmanfang
    	nop
    	goto	main	
    	nop
    	nop
    	
    ;------------------------------------------------
    main
    	call	Init
    ;-------------------- Fehlerfalle
    	btfsc	VorschubV
    	goto	bypass
    	btfsc	VorschubR
    	goto	bypass
    	btfsc	PapierR
    	goto	bypass
    	btfsc	PapierH
    	goto	bypass
    ;-------------------- Fehlerfalle ende
    	call	printinit
    initready
    	clrf	PORTC
    	nop
    	bsf		PORTC,6
    	bsf		PORTC,7
    ;------------------------------------------------
    ; Aufwaermen oder Drucken
    test
    	btfsc	VorschubR
    	goto	warmupinit
    	btfsc	PapierH
    	goto	print
    	goto	test
    ;------------------------------------------------
    
    ; delay -------------------
    delay
    	movwf	delay2
    loop1
    	movwf	delay1
    loop2
    	decfsz	delay1,1
    	goto	loop2
    	decfsz	delay2,1
    	goto	loop1
    	retlw	0
    ; delay end ---------------
    
    ; Aufwaermen
    warmupinit
    	movlw	0x0b
    	movwf	steps
    warmup
    ;step1
    	movlw	0x0a			; Zeit bis Sensor an
    	movwf	times1
    	movwf	times2
    	decf	steps, 1
    step1
    	btfss	VorschubR
    	goto	step1
    	bsf		PORTC,1
    	movlw	0x0a
    	movwf	value
    	;pagesel	signalrueck
    	call	signalrueck
    	decfsz	times2,1
    	goto	sprung1
    	movlw	0x0a
    	movwf	times2
    	decfsz	times1,1
    	goto	sprung1
    	bsf		PORTB,0
    sprung1
    	btfsc	VorschubR
    	goto	step1
    ;step1 end
    ;---------------------------
    ;step2
    	movlw	0x0a			; Zeit bis Sensor aus
    	movwf	times1
    	movwf	times2
    step2
    	btfss	VorschubR
    	goto	step2
    	bsf		PORTC,2
    	movlw	0x0a
    	movwf	value
    	;pagesel	signalrueck
    	call	signalrueck
    	decfsz	times2,1
    	goto	sprung2
    	movlw	0x0a
    	movwf	times2
    	decfsz	times1,1
    	goto	sprung2
    	bcf		PORTB,0
    sprung2
    	btfsc	VorschubR
    	goto	step2
    	
    	decfsz	steps,1
    	goto	step3
    	goto	print
    ;step2 end
    ;---------------------------
    ;step3
    step3
    	btfss	VorschubR
    	goto	step3
    	bsf		PORTC,3
    	movlw	0x0a
    	movwf	value
    	;pagesel	signalrueck
    	call	signalrueck
    	btfsc	PORTA,1
    	goto	step3
    ;step3 end
    	bcf		PORTC,1
    	nop
    	bcf		PORTC,2
    	nop
    	bcf		PORTC,3
    	decf	steps,1
    	goto	warmup
    
    
    ;---------------------------------------------------------
    ;********************* DRUCKEN ***************************
    print
    ;----LEDs----
    	clrf	PORTC
    	bsf		PORTC,0
    	bsf		PORTC,4
    	bsf		PORTC,5
    ;----Vorschub
    printloop
    	btfss	PapierH		; wenn PapierH gesetzt ...
    	goto	printloop	; ... sonst warten
    	movlw	0x12		; Dauer der Schleife bis Papier unten geladen ist
    	movwf	anzahl2		; Dauer der Schleife uebergeben
    einzug
    	decfsz	anzahl2		; Dekrementieren					
    	goto	jump		; bei 0 ueberspringen sonst Sprung auf jump
    	bcf		PORTB,2		; ... PORTB,2 -> Papier geladen
    	;bcf		PORTB,1		; nur ein test, loeschen ###############
    	;bsf		PORTB,2		; nur ein test, loeschen ###############
    	goto	bypass		; wenn Papier geladen Sprung auf bypass
    jump
    	movlw	0xff		; Dauer2 der Schleife
    	movfw	anzahl		; Dauer2 der Schleife uebergeben
    	movlw	0x03		; Parameteruebergabe ...
    	movwf	value		; ... fuer papiereinzug
    	call	papiereinzug; papiereinzug aufrufen
    	bcf		PORTB,1		; Papier oben angekommen (PORTB,1)
    
    
    ;-------Bypass
    bypass
    	movlw	0xff
    	movwf	anzahl
    	movwf	PORTC
    bypass1
    	movlw	0xff
    	movwf	anzahl2
    bypass2
    	decfsz	anzahl2
    	goto	jump2
    	decfsz	anzahl
    	goto	jump2
    	;bsf		PORTB,2		; Papier unten durch (PORTB,2) ...
    	goto	laststep	; ... sprung auf den letzten Schritt
    jump2
    	movfw	PORTE
    	movwf	PORTD
    	goto	bypass2
    laststep				; Letzter Schritt
    	movfw	PORTE
    	movwf	PORTD
    	btfsc	PapierH
    	goto	print
    	goto	laststep
    
    ;********************* DRUCKEN ENDE **********************
    ;------------------------------------------------
    papiereinzug
    	call	signalrunter
    	decfsz	anzahl
    	goto	papiereinzug
    	goto	einzug
    	retlw	0
    
    
    Init
    	movlw	b'1111'
    	TRIS	PORTA
    
    	movlw	b'00000000'
    	TRIS	PORTB
    	clrf	PORTB
    	bsf		PORTB,1
    	bsf		PORTB,2
    
    	movlw	b'00000000'
    	TRIS	PORTC
    	clrf	PORTC
    
    	movlw	b'00000000'
    	tris	PORTD
    	clrf	PORTD
    
    	movlw	b'11111111'
    	TRIS	PORTE
    	retlw	0
    
    printinit
    	bsf		PORTC,7
    printinit1
    	btfss	VorschubV
    	goto	printinit1
    	btfsc	PapierH
    	;pagesel	papierraus
    	goto	papierraus
    	bsf		PORTC,0
    	movlw	0x0a
    	movwf	value
    	call	signalvor
    	btfsc	PORTA,0
    	goto	printinit1
    printinit2
    	btfss	PapierR
    	goto	printinit2
    	bsf		PORTC,1
    	movlw	0x0c
    	movwf	value
    	call	signalhoch
    	btfsc	PapierR
    	goto	printinit2
    printinit3
    	btfss	PapierH
    	goto	printinit3
    	bsf		PORTC,2
    	movlw	0x0c
    	movwf	value
    	call	signalrunter
    	btfsc	PapierH
    	goto	printinit3
    printinit4
    	btfss	PapierR
    	goto	printinit4
    	bsf		PORTC,3
    	movlw	0x05
    	movwf	value
    	call	signalhoch
    	btfsc	PapierR
    	goto	printinit4
    printinit5
    	btfss	VorschubV
    	goto	printinit5
    	bsf		PORTC,4
    	movlw	0x0a
    	movwf	value
    	call	signalvor
    	btfsc	VorschubV
    	goto	printinit5
    ;----------------------------
    cleaning
    	movlw	0x0a			; Zeit bis Impuls
    	movwf	times1
    	movwf	times2
    printinit6
    	btfss	VorschubR
    	goto	printinit6
    	bsf	PORTC,5
    	movlw	0x0a
    	movwf	value
    	;pagesel	signalrueck
    	call	signalrueck
    	decfsz	times2,1
    	goto	sprung
    	movlw	0x0a
    	movwf	times2
    	decfsz	times1,1
    	goto	sprung
    	bsf		PORTB,0
    	movlw	0x7f			; Impulsdauer
    	movwf	times3
    sprung
    	decfsz	times3,1
    	goto	sens
    	bcf		PORTB,0
    sens
    	btfsc	VorschubR
    	goto	printinit6
    	
    ;----------------------------
    printinit7
    	btfss	VorschubV
    	goto	printinit7
    	bsf		PORTC,6
    	movlw	0x0a
    	movwf	value
    	call	signalvor
    	btfsc	VorschubV
    	goto	printinit7
    ;	..
    
    
    
    	goto	initready
    ; init ende
    
    
    
    signalvor
    	bsf		PORTD,7
    	movfw	value
    	call	delay
    	bsf		PORTD,6
    	movfw	value
    	call	delay
    	bcf		PORTD,7
    	movfw	value
    	call	delay
    	bcf		PORTD,6
    	movfw	value
    	call	delay
    	retlw	0
    
    signalhoch
    	bsf		PORTD,5
    	movfw	value
    	call	delay
    	bsf		PORTD,4
    	movfw	value
    	call	delay
    	bcf		PORTD,5
    	movfw	value
    	call	delay
    	bcf		PORTD,4
    	movfw	value
    	call	delay
    	retlw	0
    
    signalrunter
    	bsf		PORTD,4
    	movfw	value
    	call	delay
    	bsf		PORTD,5
    	movfw	value
    	call	delay
    	bcf		PORTD,4
    	movfw	value
    	call	delay
    	bcf		PORTD,5
    	movfw	value
    	call	delay
    	retlw	0
    	
    	;org		0x200
    signalrueck
    	bsf		PORTD,6
    	movfw	value
    	call	delay
    	bsf		PORTD,7
    	movfw	value
    	call	delay
    	bcf		PORTD,6
    	movfw	value
    	call	delay
    	bcf		PORTD,7
    	movfw	value
    	call	delay
    	retlw	0
    
    
    
    ;--------Papierauswurf bei Fehler-----------
    papierraus
    	btfss	PapierH
    	;pagesel	papierraus1
    	goto	papierraus1
    
    	bsf		PORTD,4
    	bsf		PORTD,7
    	movfw	value
    	call	delay
    	bsf		PORTD,5
    	bsf		PORTD,6
    	movfw	value
    	call	delay
    	bcf		PORTD,4
    	bcf		PORTD,7
    	movfw	value
    	call	delay
    	bcf		PORTD,5
    	bcf		PORTD,6
    	movfw	value
    	call	delay
    	bsf		PORTB,1
    	;pagesel	papierraus
    	goto	papierraus
    
    	;Vorschub Rueck
    	movlw	0x0a			; Zeit bis Impuls
    	movwf	times1
    	movwf	times2
    papierraus1
    	btfss	VorschubR
    	;pagesel	papierraus1
    	goto	papierraus1
    	bsf		PORTC,5
    	movlw	0x0a
    	movwf	value
    	;pagesel	signalrueck
    	call	signalrueck
    	decfsz	times2,1
    	;pagesel	papierraus11
    	goto	papierraus11
    	movlw	0x0a
    	movwf	times2
    	decfsz	times1,1
    	;pagesel	papierraus11
    	goto	papierraus11
    	bsf		PORTB,0
    	movlw	0x7f			; Impulsdauer
    	movwf	times3
    papierraus11
    	decfsz	times3,1
    	;pagesel	papierraus12
    	goto	papierraus12
    	bcf		PORTB,0
    papierraus12
    	btfsc	VorschubR
    	;pagesel	papierraus1
    	goto	papierraus1
    
    papierraus2
    	btfss	VorschubV
    	;pagesel	papierraus2
    	goto	papierraus2
    	bsf		PORTC,6
    	movlw	0x0a
    	movwf	value
    	call	signalvor
    	btfsc	VorschubV
    	;pagesel	papierraus2
    	goto	papierraus2
    	goto print
    ;--------Papierauswurf bei Fehler end-------
    
    	end

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Hallo,
    dann sieh Dir mal folgende Assembler-Beispiele an, insbesondere ab ORG 0000 mit der folgenen Interrupt-Service-Routine, bei der Du einfach nur ein RETI hin machst, wenn kein Int benutzt wird, und dann noch die Initialisierung: http://www.domnick-elektronik.de/picasm.htm#ProgBeg
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.08.2006
    Beiträge
    6
    Ok, ich habs so gelöst

    ; Makros festlegen
    Page0 macro
    bcf STATUS,6
    bcf STATUS,5
    endm

    Page1 macro
    bcf STATUS,6
    bsf STATUS,5
    endm
    ;----------------------------------------------------------

    org 0x0000

    ;programmcode0

    org 0x200

    ;programmcode1



    beim Aufrufen mit call oder goto habe ich für progcode0 Page0 und für progcode1 Page1 vorangestellt und schon läufts.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Code:
    M_Page0	macro
    	bcf    PCLATH,3		; Rom-Page 0
    	bcf    PCLATH,4
    	endm
    
    M_Page1	macro
    	bsf    PCLATH,3		; Rom-Page 1
    	bcf    PCLATH,4
    	endm
    Ja klar, beim 16F59 sind zur Page-Umschaltung andere Bits zuständig, der obige Code ist ja auch für den PIC 16F87X.
    Hauptsache, es funktioniert jetzt.

    PS: Du muß nach CALL in eine andere Page selbst wieder auf die 'Start'-Page zurück-schalten.
    Du kannst mehrere CALL's in eine andere Page nacheinander ausführen und brauchst dann erst wieder zurück-schalten.
    Du bleibst innerhalb einer 'Ziel'-Page, bis auf die 'Quell'-Page oder eine ander Page umgeschaltet wird.
    Code:
    	M_Page1		; Auf Ziel-Page umschalten
    	movlw	1
    	call	SubPage1_1
    	movlw	2
    	call	SubPage1_2
    	movlw	3
    	call	SubPage1_3
    	M_Page0		; Auf Quell-Page zurück-schalten
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.08.2006
    Beiträge
    6
    Alles klar, dank Dir für die Hilfe

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test