Hallo,
ich versuche jetzt seit ein paar Tagen verzweifelt mit einem PIC16F18344
einen I2C Bus als Master anzusteuern.
www.microchip.com/wwwproducts/en/PIC16F18344
Jedoch gibt es ein Problem, dass ich beim besten Willen nicht lösen
kann.
Ich verwende die MPLAB IDE in Kombination mit MPASM.
Und zwar möchte ich erstmal einfach nur das Start Signal schicken.
Jedoch wird die SSP1IF, nachdem ich die SEN Flag gesetzt nie gesetzt und
somit habe ich eine Endlosschleife.
Auch, wenn ich stattdessen darauf warte, dass die SEN Flag wieder
gelöscht wird passiert das nie.
Ich habe das ganze an echter Hardware sowie im Simulator getestet und
habe in beiden dasselbe Problem.
Hier mein vereinfachter Quellcode:
1 | #include "p16F18344.inc"
|
2 |
|
3 |
|
4 | ; CONFIG1
|
5 | __CONFIG _CONFIG1, _FEXTOSC_OFF & _RSTOSC_LFINT & _CLKOUTEN_OFF & _CSWEN_ON & _FCMEN_OFF
|
6 |
|
7 | ; CONFIG2
|
8 | __CONFIG _CONFIG2, _MCLRE_OFF & _PWRTE_OFF & _WDTE_OFF & _LPBOREN_OFF & _BOREN_OFF & _BORV_HIGH & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF
|
9 |
|
10 | ; CONFIG3
|
11 | __CONFIG _CONFIG3, _WRT_OFF & _LVP_OFF
|
12 |
|
13 | ; CONFIG4
|
14 | __CONFIG _CONFIG4, _CP_OFF & _CPD_OFF
|
15 |
|
16 |
|
17 | CODE 0x0
|
18 |
|
19 |
|
20 | lReset:
|
21 |
|
22 | ; ========================================================================
|
23 | ; Analoge I/O deaktivieren.
|
24 | ; ========================================================================
|
25 | BANKSEL ANSELA
|
26 | CLRF ANSELA
|
27 |
|
28 | BANKSEL ANSELB
|
29 | CLRF ANSELB
|
30 |
|
31 | BANKSEL ANSELC
|
32 | CLRF ANSELC
|
33 | ; ========================================================================
|
34 |
|
35 |
|
36 |
|
37 | ; ========================================================================
|
38 | ; MSSP initialisieren Mehtode A.
|
39 | ; ========================================================================
|
40 | ; BANKSEL SSP1CON1
|
41 | ; MOVLW B'00101000'
|
42 | ; MOVWF SSP1CON1
|
43 |
|
44 | ; BANKSEL SSP1ADD
|
45 | ; MOVLW H'9'
|
46 | ; MOVWF SSP1ADD
|
47 |
|
48 | ; BANKSEL PIR1
|
49 | ; BCF PIR1, SSP1IF
|
50 | ; ========================================================================
|
51 |
|
52 |
|
53 |
|
54 | ; ========================================================================
|
55 | ; MSSP initialisieren Mehtode B.
|
56 | ; ========================================================================
|
57 | BANKSEL SSP1CON1
|
58 | MOVLW B'00101000'
|
59 | MOVWF SSP1CON1
|
60 |
|
61 | BANKSEL SSP1CON2
|
62 | MOVLW B'00000000'
|
63 | MOVWF SSP1CON2
|
64 |
|
65 | BANKSEL SSP1CON3
|
66 | MOVLW B'00000000'
|
67 | MOVWF SSP1CON3
|
68 |
|
69 | BANKSEL SSP1ADD
|
70 | MOVLW H'9'
|
71 | MOVWF SSP1ADD
|
72 |
|
73 | BANKSEL PIR1
|
74 | BCF PIR1, SSP1IF
|
75 | ; ========================================================================
|
76 |
|
77 |
|
78 |
|
79 | ; ========================================================================
|
80 | ; Start generieren.
|
81 | ; ========================================================================
|
82 | BANKSEL SSP1CON2
|
83 | BSF SSP1CON2, SEN
|
84 | ; ========================================================================
|
85 |
|
86 |
|
87 | lWait:
|
88 |
|
89 | ; ========================================================================
|
90 | ; Methode A
|
91 | ; Funktioniert nicht, weil SSP1IF niemals gesetzt wird.
|
92 | ; ========================================================================
|
93 | ; BANKSEL PIR1
|
94 | ; BTFSS PIR1, SSP1IF
|
95 | ; GOTO vWait
|
96 | ; ========================================================================
|
97 |
|
98 | ; ========================================================================
|
99 | ; Methode B
|
100 | ; Funktioniert nicht, weil SEN niemals gelöscht wird.
|
101 | ; ========================================================================
|
102 | BANKSEL SSP1CON2
|
103 | BTFSC SSP1CON2, SEN
|
104 | GOTO lWait
|
105 | ; ========================================================================
|
106 |
|
107 | lLoop:
|
108 |
|
109 | GOTO lLoop
|
110 |
|
111 | END
|
Die PPS (Peripheral Pin Select) Einstellungen habe ich hier mal
weggelassen, da diese ja nur beim testen auf echter Hardware relevant
sind.