1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| i2c_inicializa ;For initializing the MSSP module in I2C mode
bcf STATUS,RP1
bsf STATUS,RP0
bsf TRISC,TRISC3
bsf TRISC,TRISC4
movlw B'10000000'
movwf SSPSTAT
bcf STATUS,RP0
movlw B'00101000'
movwf SSPCON
bsf STATUS,RP0
movlw B'00000000'
movwf SSPCON2
movlw D'9'
movwf SSPADD
return
i2c_espera ;This is an idle subroutine for producing a 1 millisecond delay between I2C commands
call retardo_1ms
return
i2c_inicio ;Sends a START condition
bcf STATUS,RP1
bsf STATUS,RP0
call i2c_espera
bsf SSPCON2,SEN
return
i2c_reinicio ;Sends a RESTART condition
bcf STATUS,RP1
bsf STATUS,RP0
call i2c_espera
bsf SSPCON2,RSEN
return
i2c_parada ;Sends a STOP condition
bcf STATUS,RP1
bsf STATUS,RP0
call i2c_espera
bsf SSPCON2,PEN
return
i2c_envia_dato ;This is for WRITING data to the slave
bcf STATUS,RP1
bcf STATUS,RP0
movwf SSPBUF
call i2c_espera
return
i2c_recibe_dato ;This is for READING data sent by the slave
bcf STATUS,RP1
bsf STATUS,RP0
call i2c_espera
bsf SSPCON2,RCEN
call i2c_espera
bsf SSPCON2,ACKDT
bsf SSPCON2,ACKEN
bcf STATUS,RP1
bcf STATUS,RP0
movf SSPBUF,0
return |