TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Leon Pic en 01 de Marzo de 2010, 09:27:42
-
Estoy programando el PIC16F877 usando el módulo MSSP configurado como I2C.
Al momento de simularlo en el MPLAB, la condición de START, el bit SSPIF del registro PIR1, jamás se coloca a 1.
Esta es la configuración del I2C que estoy utilizando:
MOVLW B'10000000'
MOVWF SSPSTAT ;SELECCIONO VELOCIDAD CON NIVELES I2C
MOVLW .9
MOVWF SSPADD ;VELOCIDAD DEL BUS 12C 100KHZ
BCF STATUS,RP0 ;BANCO 0
MOVLW B'00101000'
MOVWF SSPCON ;MÓDULO MSSP EN ON
Y esta es la rutina del envío de la secuencia de Start. Lo que me pasa es que queda el CP en las líneas btfss pir1,sspif. Este bit jamás se coloca a 1.
START_I2C bcf PIR1,SSPIF
bsf STATUS,RP0 ;Selecciona página 1
bsf SSPCON2,SEN ;Activa secuencia de inicio
bcf STATUS,RP0 ;Selecciona página 0
Espera_Start btfss PIR1,SSPIF ;¿Fin de secuencia de tranmisión?
goto Espera_Start ;Espera fin de transmision
return
Al momento de llamar a la rutina START_I2C estoy en el banco 0
-
Yo he implementado exactamente la misma configuración en un 877A, sin ningun inconveniente :( Revisa que los registros se carguen correctamente :undecided:
Saludos!
-
Si, todos los registros se cargan correctamente.
Debe ser un error del MPLAB
Buscaré la solución por ahí. Ahora se que la rutina y la configuración del I2C está bien.
-
Leon Pic,
No se que versión de MPLAB tenes. Hay versiones que tienen errores. Hasta donde se la v8.3 tiene varios errores. Yo trabajo con la 8.0, es media viejita pero funciona bien.
Saludos,
Gustavo
-
Perdón a todos los usuarios. Juraría que había publicado la solución a este inconveniente.
El problema es que el MPLAB no simula el I2C
La única manera de solucionarlo es modificar el bit SSPIF del registro PIR1 por medio de estímulos. En mi caso coloco a 1 este bit cada 32 ciclos de reloj.