-
        

Ergebnis 1 bis 3 von 3

Thema: Problem mit XORLW [PIC 12F675]

  1. #1
    Neuer Benutzer
    Registriert seit
    05.12.2010
    Alter
    23
    Beiträge
    1

    Problem mit XORLW [PIC 12F675]

    Anzeige

    Hallo!

    Ich bin neu hier und auch neu beim PIC-Programmieren. Seit einigen Tagen beschäftige ich mich mit dem PIC 12F675. Zum Brennen habe ich ein PICkit2. Die Sprut-Seite kenne ich auch schon und habe dort schon viel gelesen. Ebenso versuche ich mich mit dem Datenblatt zu beschäftigen.

    Ich habe jetzt ein Problem, bei dem ich nicht weiterkomme. Vielleicht kann jemand aus dem Forum mir ein wenig auf die Sprünge helfen.

    Ich habe am PIC an GPIO0 eine LED mit Vorwiderstand angeschlossen und möchte die zunächst einmal nur zum Blinken bringen. Als Warteschleife für jeweils 0,5 Sekunden habe ich einen Codeschnipsel aus http://www.piclist.com/techref/picli...egen/delay.htm
    Ich verwende den internen Oszillator.

    Jetzt habe ich mir das folgende Programm zusammengestrickt:
    Code:
            list      p=12f675        ; list directive to define processor
            #include  <p12f675.inc>   ; processor specific variable definitions
    
    	__CONFIG _CP_OFF&_CPD_OFF&_BODEN_OFF&_MCLRE_OFF&_WDT_OFF&_PWRTE_ON&_INTRC_OSC_NOCLKOUT 
    
    	cblock 0x20
    	d1
    	d2
    	d3
    	endc
    
    ;**********************************************************************
    	ORG     0x000             ; processor reset vector
    
    	call    0x3FF             ; retrieve factory calibration value
    	bsf     STATUS,RP0        ; set file register bank to 1 
    	movwf   OSCCAL            ; update register with factory cal value 
    	bcf     STATUS,RP0        ; set file register bank to 0
    
            bsf     STATUS,RP0
            bcf     ANSEL,ANS0
            bcf     TRISIO,GPIO0
    
    Anfang  bcf     STATUS,RP0
            movf    GPIO,0
            xorlw	0x01
            movwf   GPIO
    
    			;499994 cycles
    	movlw	0x03
    	movwf	d1
    	movlw	0x18
    	movwf	d2
    	movlw	0x02
    	movwf	d3
    Delay_0
    	decfsz	d1, f
    	goto	$+2
    	decfsz	d2, f
    	goto	$+2
    	decfsz	d3, f
    	goto	Delay_0
    
    			;6 cycles
    	goto	$+1
    	goto	$+1
    	goto	$+1
    
        goto    Anfang
    
    	END
    Mit dem XORLW nach der Marke "Anfang" will ich einfach bei jedem Durchlauf das Bit vom GPIO0 ändern. Das klappt aber seltsamerweise nicht. Hat da vielleicht jemand eine Erklärung dafür?

  2. #2
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo!

    Ich würde dir empfehlen mit Vestand, also mit Programmablaufdiagram (PAD) zu arbeiten und z.B. mit: http://www.rn-wissen.de/index.php/PI...bler#Das_erste... anfangen, weil dort verwendeter PIC gleiche Pinbelegung hat, wie deiner.

    MfG

  3. #3
    Benutzer Stammmitglied Avatar von stoerpeak
    Registriert seit
    20.06.2010
    Beiträge
    38
    Der benutzte Pin wird nicht als Ausgang geschaltet weil
    die Zeile bcf TRISIO,GPIO0 falsch ist.
    Sie muss entweder bcf TRISIO,TRISIO0 oder bcf TRISIO,0 lauten.
    siehe Datenblatt Seite20
    In diesem Register lauten die Bits nicht GPIO,0-5 sondern TRISIO,0-5

    Weiterhin ist die Delay-Routine fehlerhaft:
    Die Delayvariablen werden nachdem sie Null erreicht haben nicht wieder auf ihren ursprünglichen Wert zurückgesetzt sondern zählen dann von 0xFF rückwärts.

Berechtigungen

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