Hallo
Direkt dazu fällt mir nichts ein, allerdings hatte ich ein ähnliches
Problem. Wie ich es genau gelösst habe weiss ich leider nichtmehr,
allerdings bin ich mir ziemlich sicher das es etwas mit dem ICSP zutun
hatte. Data & CLK sind ja auf RB6 & RB7...
Auch wenn dir meine Antwort möglicherweise keine grosse hilfe ist, hier
mal meine Initialisierung für meinen PIC16F887... auf meinem Board
funktioniert's perfekt:
1 | list p=16F887 ; Definiere den Prozessor PIC16F887
|
2 | include <p16f887.inc> ; Include File
|
3 |
|
4 | __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTOSCIO & _DEBUG_OFF
|
5 | __CONFIG _CONFIG2, _WRT_OFF & _BOR21V
|
1 | InitPic
|
2 |
|
3 |
|
4 | banksel OSCCON
|
5 | ;--- System Clock
|
6 | movlw b'01110101' ; Bei Internem Oscillator
|
7 | ; ||||||||
|
8 | ; |||||||+--- Interner Oscillator als Quelle
|
9 | ; ||||||+---- LF OSC Stabil?
|
10 | ; |||||+----- HF OSC Stabil?
|
11 | ; ||||+------ 0=Intern oder 1=Externer Oszilator?
|
12 | ; |+++------- Frequenz: 8MHz
|
13 | ; +---------- Wird nicht benutzt
|
14 | movwf OSCCON ; interner Clock auf 8MHz
|
15 |
|
16 |
|
17 | ; Startwerte Definieren
|
18 | ; ------------------------------------
|
19 |
|
20 | movlw b'00000000' ; Setze Port A auf 0
|
21 | movwf PORTA
|
22 | movlw b'00000000' ; Setze Port B auf 0
|
23 | movwf PORTB
|
24 | movlw b'00000000' ; Setze Port C auf 0
|
25 | movwf PORTC
|
26 | movlw b'00000000' ; Setze Port D auf 0
|
27 | movwf PORTD
|
28 |
|
29 |
|
30 | ; Einstellung Eingang / Ausgang
|
31 | ; ---------------------------
|
32 |
|
33 | bsf STATUS,RP0 ; Selektion Bank1
|
34 |
|
35 | movlw b'00001111' ; 0: Ausgang, 1: Eingang
|
36 | movwf TRISA ; Port A Konfiguration (RA0 bis RA7)
|
37 | movlw b'00000000' ; 0: Ausgang, 1: Eingang
|
38 | movwf TRISB ; Port B Konfiguration (RB0 bis RB7)
|
39 | movlw b'00000000' ; 0: Ausgang, 1: Eingang
|
40 | movwf TRISC ; Port C Konfiguration (RC0 bis RC7)
|
41 | movlw b'00000000' ; 0: sortie, 1: entrée
|
42 | movwf TRISD ; Port D Konfiguration (RD0 bis RD7)
|
43 |
|
44 | bcf STATUS,RP0
|
45 |
|
46 | banksel ANSEL ; Wechsle bank zu Ansel Register
|
47 | clrf ANSEL ; Setze Ansel Register auf 0
|
48 | banksel ANSELH ; Wechsle Bank zu AnselH Register
|
49 | clrf ANSELH ; Setze AnselH Register auf 0
|
50 |
|
51 | banksel 0x00
|
52 |
|
53 | return ; Zurück zum Hauptprogramm
|
Mit dieser Initialisation, habe ich für dich eben folgendes Code
geschrieben um ihn zu testen: (PORTA,0 = Schalter auf meinem Board!)
1 | Loop
|
2 |
|
3 | btfsc PORTA,0 ; Teste PORTA Schalter 0 (Low Aktiv)
|
4 | goto Nicht_gedrückt
|
5 | goto Gedrückt
|
6 |
|
7 | Nicht_gedrückt
|
8 | bcf PORTB,6 ; Reset RB6 & RB7
|
9 | bcf PORTB,7
|
10 | goto Loop ; Zurück zum Anfang
|
11 |
|
12 | Gedrückt
|
13 | bsf PORTB,6 ; Set RB6 & RB7
|
14 | bsf PORTB,7
|
15 | goto Loop ; Zurück zum Anfang
|
Hab den Code dann direkt mal Kompiliert und mit einem Multimeter die
Spannung an RB6 & RB7 gemessen. Bei mir schalten die Ausgänge problemlos
von 0V auf 4,75V! Vielleicht kannst du versuchen, deinen Code auf meinem
zu basieren... wo das dein Fehler genau liegt, weiss ich nicht. Evtl.
reicht es auch schon, wenn du nur meine CONFIG Einstellungen übernimmst.
Hoffe ich konnte dir helfen.