Está en la página 1de 6

Comunicacin Serie: Ejemplos-Interface I2C

COMUNICACIN I2C en ENSAMBLADOR


FICHERO MSSP_I2C.ASM
(Funciones para I2C implementadas mediante MSSP)

Subrutinas para la ejecucin de los principales comandos de un Maestro


en un bus I2C mediante el hardware disponible en el mdulo MSSP y para
realizar el interface con una EEPROM serie del tipo 24xxx de Microchip
En la inicializacin del programa principal, debe definirse el mdulo MSSP
como Maestro de I2C con reloj Fosc/(4*(SSPADD+1))
El presente fichero debe ser incluido en el cdigo fuente principal:
include "MSSP_I2C.ASM

Microcontroladores PIC

ATE-Universidad de Oviedo

Comunicacin Serie: Ejemplos-Interface I2C

En el programa principal se deben definir una serie de variables que se utilizan


para entrada y salida de las subrutinas que se definen en este fichero.
A continuacin se definen las posiciones a definir en el fichero fuente principal:
ADDRH

EQU

ADDRL

EQU

SLAVE

EQU

NUM_BYTES

EQU

TXBUF
TIPOERROR

EQU
EQU

?
?

Microcontroladores PIC

;Almacena la parte alta de la Direccin de la


;EEPROM a la que se quiere acceder
;Almacena la parte baja de la Direccin de la
;EEPROM a la que se quiere acceder
;Almacena la direccin que tiene asignada la
;EEPROM como Esclavo del bus
;Almacenar el nmero de bytes que se quieren
;leer o escribir en la EEPROM
;Posicin que almacena bytes a enviar
;Tipo de Error que se ha producido

ATE-Universidad de Oviedo

Comunicacin Serie: Ejemplos-Interface I2C

Establecer una condicin de START en las lneas SDA y SCL (bit SEN)
Rutina B_START
B_START

S_START

bsf
bcf

STATUS,RP0
STATUS,RP1

; El registro SSPCON2 est en el banco 1


; nos situamos en ese banco primero

bsf
nop
btfsc

SSPCON2,SEN

; Activamos la generacin de START

SSPCON2,SEN

goto

S_START

; Cuando se haya dado la condicin de START


; se pondr a 0
; Si no, seguimos esperando

bcf
return

STATUS,RP0

; Volvemos al banco 0
; Salimos del subprograma

Este subprograma genera un bit de START y lo comprueba,


espera hasta que se produzca y aparezca tal condicin en el bus

Microcontroladores PIC

ATE-Universidad de Oviedo

Comunicacin Serie: Ejemplos-Interface I2C

Generar una condicin de STOP en SDA y SCL (bit PEN)


Rutina B_STOP
B_STOP

S_STOP

bsf
bcf

STATUS,RP0
STATUS,RP1

; El registro SSPCON2 est en el banco

bsf
nop
btfsc

SSPCON2,PEN

; Activamos la generacin de STOP

SSPCON2,PEN

goto

S_STOP

; Cuando se haya dado la condicin de STOP


; se pondr a 0
; Si no, seguimos esperando

bcf
return

STATUS,RP0

; Volvemos al banco 0
; Salimos del subprograma

Este subprograma genera un bit de STOP y lo comprueba,


espera hasta que se produzca y aparezca tal condicin en el bus

Microcontroladores PIC

ATE-Universidad de Oviedo

Comunicacin Serie: Ejemplos-Interface I2C

Escribir un dato en SSPBUF para iniciar una transmisin de dato o direccin


Rutina TX
TX
ENVIANDO

movf
movwf
bsf
btfsc
goto

TXBUF,W
SSPBUF
STATUS,RP0
SSPSTAT,R_W
ENVIANDO

movlw

0x01

btfsc
call
bcf
return

; Cargamos en W el byte a enviar


; Y se lo pasamos al buffer para el envo
; Pasamos al banco 1 donde est SSPSTAT
; para comprobar que acab el envo
; Hasta que no se complete, esperando

; Cargamos 0x01 en W como cdigo de error


; por si no se recibe ACK
SSPCON2,ACKDT ; Comprobamos recepcin final de ACK
S_ERROR
; Si no se recibi ACK, llamamos a rutina
; de Error llevando en W el cdigo
STATUS,RP0
; Volvemos al banco 0

Este subprograma enva por bus I2C el byte almacenado en la posicin


TXBUF, verifica que se ha dado reconocimiento (ACK) tras el envo.
Usa como parmetro el registro TXBUF donde guarda el byte a enviar.
Microcontroladores PIC

ATE-Universidad de Oviedo

Comunicacin Serie: Ejemplos-Interface I2C

Configurar la entrada I2C para recibir datos (bit RCEN)


Rutina RX

RX

LLEGANDO

bsf
bcf

STATUS,RP0
STATUS,RP1

; Nos situamos en el banco 1 que es donde


; est el registro SSPCON2

bsf
nop
btfsc
goto
bcf
movf
movwf
incf
return

SSPCON2,RCEN

; Iniciamos la lectura con el bit RCEN

SSPCON2,RCEN
LLEGANDO
STATUS,RP0
SSPBUF,W
INDF
FSR

; Verificamos que se ha completado la


; recepcin
; Volvemos al banco 0
; Recojo el dato de SSPBUF y
; lo cargo en la direccin apuntada por FSR
; Lo incremento para la siguiente

Este subprograma recibe por bus I2C un byte y lo almacena en la posicin


a la que apunte FSR, incrementando ste en una unidad

Microcontroladores PIC

ATE-Universidad de Oviedo

Comunicacin Serie: Ejemplos-Interface I2C

Generar un pulso de reconocimiento (ACK) (bit ACKEN)


Rutina B_ACK
B_ACK

S_ACK

bsf
bcf

STATUS,RP0
STATUS,RP1

bcf
bsf
btfsc

SSPCON2,ACKDT ; Cargamos 0 en ACKDT para sacarlo luego


SSPCON2,ACKEN ; Iniciamos la secuencia con ACKEN=1
SSPCON2,ACKEN ; Cuando se haya dado la condicin de START
; se pondr a 0
S_ACK
; Si no, seguimos esperando

goto
bcf
return

STATUS,RP0

; El registro SSPCON2 est en el banco 1


; nos situamos en ese banco primero

; Volvemos al banco 0
; Salimos del subprograma

Este subprograma genera un bit de ACK y lo comprueba,


espera hasta que se produzca y aparezca tal condicin en el bus

Microcontroladores PIC

ATE-Universidad de Oviedo

Comunicacin Serie: Ejemplos-Interface I2C

Generar un pulso de no reconocimiento (NACK) (bit ACKEN)


Rutina B_NOACK
B_NOACK

S_NOACK

bsf
bcf

STATUS,RP0
STATUS,RP1

bsf
bsf
btfsc

SSPCON2,ACKDT ; Cargamos 1 en ACKDT para sacarlo luego


SSPCON2,ACKEN ; Iniciamos la secuencia con ACKEN=1
SSPCON2,ACKEN ; Cuando se haya dado la condicin de START
; se pondr a 0
S_NOACK
; Si no, seguimos esperando

goto
bcf
return

STATUS,RP0

; El registro SSPCON2 est en el banco 1


; nos situamos en ese banco primero

; Volvemos al banco 0
; Salimos del subprograma

Este subprograma genera un bit de NO ACK y lo comprueba,


espera hasta que se produzca y aparezca tal condicin en el bus

Microcontroladores PIC

ATE-Universidad de Oviedo

Comunicacin Serie: Ejemplos-Interface I2C


bit 7

<- Para activar un control


en la pendiente de cambio de salidas

SMP

Bits Asociados con el modo I2C

<- Para niveles elctricos SMBus o I2C


(SMBus es una variante de I2C)

Registro SSPSTAT
(0x94)

bit 0

Microcontroladores PIC

ATE-Universidad de Oviedo

Bits Asociados con el modo I2C

Comunicacin Serie: Ejemplos-Interface I2C

Microcontroladores PIC

Registro SSPCON
(0x14)

ATE-Universidad de Oviedo

10

Comunicacin Serie: Ejemplos-Interface I2C

Bits Asociados con el modo I2C

Registro SSPCON2
(0x91)

Microcontroladores PIC

ATE-Universidad de Oviedo

11

Comunicacin Serie: Ejemplos-Interface I2C

Registros y bits Asociados


con el Modo I2C

Microcontroladores PIC

ATE-Universidad de Oviedo

12

También podría gustarte