1 | ;* RFM01: RB0 = nIRQ (PIC als Ein)
|
2 | ;* RB2 = SDI (PIC als Aus)
|
3 | ;* RB3 = nSEL (PIC als Aus)
|
4 | ;* RB5 = SCK (PIC als Aus)
|
5 | ;* RA0 = SDO (PIC als Ein)
|
6 | ;* FSK liegt über 10k an +UB
|
7 |
|
8 | ; Includedatei einbinden
|
9 | list p=16F1827
|
10 | include <P16F1827.INC>
|
11 |
|
12 | ; Makros
|
13 |
|
14 | SPI_Kommando Macro Wert1, Wert2
|
15 | movlw Wert1
|
16 | movwf spi_tmp1
|
17 | movlw Wert2
|
18 | movwf spi_tmp2
|
19 | call SPI_Senden
|
20 | endm
|
21 |
|
22 | ; Konfiguration festlegen
|
23 |
|
24 | __CONFIG _CONFIG1, _BOREN_ON & _CP_OFF & _CPD_OFF & _PWRTE_ON & _WDTE_OFF & _MCLRE_ON & _FOSC_INTOSC
|
25 | __CONFIG _CONFIG2, _LVP_OFF
|
26 |
|
27 | ; Variablen festlegen
|
28 |
|
29 | zaehler equ 0x2f
|
30 |
|
31 | var_warte1 EQU 0x71
|
32 | var_warte2 EQU 0x72
|
33 | spi_tmp1 equ 0x7b
|
34 | spi_tmp2 equ 0x7c
|
35 |
|
36 | ; Konstanten festlegen
|
37 |
|
38 |
|
39 | nSEL equ 3 ; RFM01 Auswahl
|
40 | nIRQ equ 0 ; RFM01 IRQ
|
41 |
|
42 | org 0
|
43 | goto Prog_Start
|
44 | org 4
|
45 | retfie
|
46 |
|
47 |
|
48 |
|
49 |
|
50 | Prog_Start
|
51 | BANKSEL OSCCON
|
52 | movlw b'01101000' ;4 MHz intern
|
53 | ;movlw b'01011000' ;1 MHz intern
|
54 | movwf OSCCON
|
55 |
|
56 | BANKSEL PORTB
|
57 | CLRF PORTB
|
58 | CLRF PORTA
|
59 | BANKSEL LATB
|
60 | CLRF LATB
|
61 | CLRF LATA
|
62 | BANKSEL ANSELB
|
63 | CLRF ANSELB
|
64 | CLRF ANSELA
|
65 | BANKSEL TRISB
|
66 | movlw B'00000001'
|
67 | movwf TRISB ; SPI RB0 Eingang
|
68 | movlw B'00000001' ;
|
69 | movwf TRISA ; SPI RA0 Eingang
|
70 |
|
71 | BANKSEL INTCON
|
72 | bcf INTCON,GIE
|
73 |
|
74 |
|
75 | ; Einstellen SPI
|
76 |
|
77 | BANKSEL SSP2ADD
|
78 | movlw h'09' ; clock = 20/(4*(12+1)) = 385kHz
|
79 | movwf SSP2ADD ; für I2C
|
80 | BANKSEL SSP2CON1 ; BANK 4
|
81 | movlw b'01000000' ; Mode 1,1 SPI, middle of output
|
82 | movwf SSP2STAT ; time sampling
|
83 | movlw b'00110001' ; Mode 1,1 SPI Master Mode, 1/16 Tosc bit time
|
84 | movwf SSP2CON1 ; SSP is on
|
85 |
|
86 |
|
87 | ; RFM01 initialisieren
|
88 |
|
89 | BANKSEL PORTB ; BANK 0
|
90 | movlw d'32'
|
91 | movwf zaehler
|
92 | movlw h'20'
|
93 | movwf FSR0L
|
94 |
|
95 |
|
96 | BANKSEL PORTB
|
97 | bcf PORTB,nSEL
|
98 |
|
99 | movlw D'100'
|
100 | movwf var_warte
|
101 | call Warte
|
102 |
|
103 |
|
104 | SPI_Kommando H'00',H'00'
|
105 | SPI_Kommando H'95',H'7b' ;Configuration: 868MHzband, 12pf, 134kHz bandwidth
|
106 | SPI_Kommando H'a6',H'86' ;Frequency: MHz
|
107 | SPI_Kommando H'c8',H'47' ;Datarate: 4,8 kbit
|
108 | SPI_Kommando H'c6',H'83' ;AFC
|
109 | SPI_Kommando H'c4',H'ac' ;data filter
|
110 | SPI_Kommando H'c2',H'e0' ;low batt./ clock divider
|
111 | SPI_Kommando H'c0',H'42' ;receiver setting:
|
112 | SPI_Kommando H'e0',H'00' ;wake-up timer:
|
113 | SPI_Kommando H'cc',H'00' ;low duty cycle:
|
114 | SPI_Kommando H'ce',H'88' ;fifo config
|
115 | SPI_Kommando H'ce',H'8b' ;fifo enable
|
116 | SPI_Kommando H'c0',H'43' ;enable receiver
|
117 |
|
118 | Haupt
|
119 |
|
120 | ;Warte auf Daten
|
121 | BANKSEL PORTB ; BANK 0
|
122 | btfsc PORTB,nIRQ
|
123 | goto Haupt
|
124 | BANKSEL SSP2BUF ; BANK 4
|
125 | movf SSP2BUF,W ; Hole Daten aus SSPBUF
|
126 | BANKSEL PORTB ; BANK 0
|
127 | movwf INDF0
|
128 | incf FSR0L,F
|
129 | decfsz zaehler
|
130 | goto Haupt
|
131 |
|
132 | SPI_Kommando H'00',h'00' ;read status
|
133 | SPI_Kommando H'ce',h'88'
|
134 | SPI_Kommando H'ce',h'8b' ;fifo enable
|
135 |
|
136 | ;... irgendwas mit den Daten anstellen
|
137 |
|
138 | BANKSEL PORTB ; BANK 0
|
139 | movlw d'32'
|
140 | movwf zaehler
|
141 | movlw h'20'
|
142 | movwf FSR0L
|
143 |
|
144 | goto Haupt
|
145 |
|
146 |
|
147 |
|
148 | Warte
|
149 | movlw .110
|
150 | movwf var_warte2
|
151 | Warte_w1 nop
|
152 | nop
|
153 | nop
|
154 | nop
|
155 | nop
|
156 | nop
|
157 | decfsz var_warte2, F
|
158 | goto Warte_w1
|
159 | decfsz var_warte1, F
|
160 | goto Warte
|
161 | return
|
162 |
|
163 | SPI_Senden
|
164 | BANKSEL SSP2BUF ; BANK 4
|
165 | movfw spi_tmp1
|
166 | movwf SSP2BUF ; Schreibe in SSPBUF
|
167 | SPI_Senden_w1
|
168 | btfss SSP2STAT,BF ; Datentransfer komplett? (Puffer voll?)
|
169 | goto SPI_Senden_w1 ; wenn nicht, erneut prüfen
|
170 | movf SSP2BUF,w ; Hole Daten aus SSPBUF
|
171 | movfw spi_tmp2
|
172 | movwf SSP2BUF ; Schreibe in SSPBUF
|
173 | SPI_Senden_w2
|
174 | btfss SSP2STAT,BF ; Datentransfer komplett? (Puffer voll?)
|
175 | goto SPI_Senden_w2 ; wenn nicht, erneut prüfen
|
176 | movf SSP2BUF,w ; Hole Daten aus SSPBUF
|
177 | return
|
178 |
|
179 |
|
180 |
|
181 | end
|