Hi,

ich hab' noch ein wenig Startschwierigkeiten mit dem 16F877A. Hab' dazu das Lauflichtbeispiel von Sprut für den 16F84 hergenommen und ein wenig umgestrickt für den 16F877A. Ich verwende einen 20MHz-Quarz und 8 LEDs am Port B.

Das sieht dann aus wie folgt:
Code:
        list p=16f877A 
;************************************************************** 
;* 
;* Pinbelegung 
;*      ----------------------------------  
;*      PORTA:  0  
;*              1  
;*              2  
;*              3  
;*              4  
;*      PORTB:  0 LED  
;*              1 LED 
;*              2 LED  
;*              3 LED  
;*              4 LED  
;*              5 LED  
;*              6 LED  
;*              7 LED  
;* 
;************************************************************** 
; 
; sprut (zero) Bredendiek 05/2000 (mod. am 16.01.2002)  
; 
; Lauflicht am Port B  
; 
; Taktquelle: 4MHz 
; 
;************************************************************** 
; Includedatei für den 16F84 einbinden 
; 
        #include <P16f877A.INC> 
; 
; Configuration festlegen 
; 

; 
; ab 4 MHz: Power on Timer, kein Watchdog, HS-Oscillator 
       __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
; 
;************************************************************** 
; Variablennamen vergeben 

loops   Equ     0x70            ; Zähler für Warteschleife  
loops2  Equ     0x71            ; Zähler für Warteschleife  

;************************************************************** 
; los gehts mit dem Programm 
; Port B auf Ausgabe stellen 

Init 
        bcf	INTCON,GIE
		bcf	STATUS, RP1
	bsf     STATUS, RP0     ; auf Bank 1 umschalten 
        movlw   B'00000000'     ; PortB alle output 
        movwf   TRISB 
        bcf     STATUS, RP0     ; auf Bank 0 zurückschalten 
        clrf    PORTB           ; alle LEDs ausschalten 

; 1. LED einschalten  

        bsf     PORTB,0         ; LED an RB0 einschalten 

; Lauflicht 

Loop 
        call    Wait            ; Wartezeit 
        rlf     PORTB,f         ; laufen zur nächsten LED 
        goto    Loop  
  

;********************************************************** 
; Warteschleife 250 ms 

Wait 
        movlw   D'250'          ; 250 ms Pause 
        movwf   loops  

Wai 
        movlw   .110           ; Zeitkonstante für 1ms 
        movwf   loops2 
Wai2    nop                    ;  
        nop 
        nop 
        nop 
        nop 
        nop 
        decfsz  loops2, F      ; 1 ms vorbei? 
        goto    Wai2           ; nein, noch nicht 
                               ; 
        decfsz  loops, F       ; 250 ms vorbei? 
        goto    Wai            ; nein, noch nicht 
        retlw   0              ; das Warten hat ein Ende 

        end
Jetzt zu meinem Problem:
Schalte ich den Strom an, so leuchten nacheinander so drei oder vier LEDs und das wars dann. Anschließend bleiben alle dunkel.
Ich dachte, dass es zu tun hat mit dem LVP-Modus, habe deshalb schon den LVP mittels _LVP_OFF explizit ausgeschaltet.
Außerdem habe ich um sicher zu gehen, sämtliche Interrupts ausgeschaltet mit bcf INTCON,GIE .

Blockkondensatoren habe ich auch am PIC jeweils zwischen Vdd und GND.

Die Schaltung habe ich auch schon mit einem Beispiel von http://www.voti.nl/blink/code/b877-1.hex ausprobiert und da hat dann in meiner Schaltung die LED bei RA0 geblinkt, so wie es sein soll.

Könnte bitte mal jemand über das obige Programm drübergucken und mich auf eventuelle Fehler hinweisen. Dürfte für jemanden mit ein wenig Erfahrung eine kleine Sache sein. Ich möchte nur sicher gehen, dass in der Software kein Fehler ist.

LG Claudi