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:
Jetzt zu meinem Problem: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
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







Zitieren

Lesezeichen