Hola a todos.
Necesito hacer un programa en ensamblador para controlar un RTC, concretamente el pcf 8583. el problema es que no me funciona el protocolo I2C no consigo enviar ni recibir tramas. este es el codigo que utilizo:
esta incompleto, pero hasta aqui deberia tranmitir el 8583, no?
espero que alguien me pueda echar un cable.
muchas gracias!
Necesito hacer un programa en ensamblador para controlar un RTC, concretamente el pcf 8583. el problema es que no me funciona el protocolo I2C no consigo enviar ni recibir tramas. este es el codigo que utilizo:
Código:
#include <p16F877a.inc>
ERRORLEVEL -302
ERRORLEVEL -203
ERRORLEVEL -205
#define fosc d'8000000'
#define clock d'100000'
#define valor_SPADD_baud (fosc/(4*clock))-1
cblock 0X30
DIRECCION
DATO
endc
org 0
GOTO INICIO
org 4
GOTO INT_RECEPCION
#include <INICIALIZACION.asm>
#include <MICRORETARDO.asm>
#include <RETARDO.asm>
#include <P1 E5.asm>
#include <P2 E5.asm>
#include <P3 E1.asm>
INICIO
CALL INICIALIZACION
BANKSEL PORTC
CLRF PORTC
BSF STATUS, RP0
MOVLW 0X06
MOVWF ADCON1 ; Todas las entradas digitales
MOVLW 0x18
MOVWF TRISC ; RC4 y RC3 como entradas
BANKSEL SSPADD
MOVLW valor_SPADD_baud
MOVWF SSPADD ; Oscilador de 100 MHz
BANKSEL SSPSTAT
CLRF SSPSTAT ; CKE a ‘0’, control habilitado, etc.
BANKSEL SSPCON
MOVLW 0X2E
MOVWF SSPCON ; SPEN a ‘1’, Modo maestro-7 bits
BANKSEL SSPCON2
BSF SSPCON2,0 ; condicion de START
TRANSMISION
MOVLW 0X30
MOVWF DIRECCION
BANKSEL SSPSTAT
BTFSC SSPSTAT,2 ; Se comprueba R_W
GOTO TRANSMISION
BANKSEL SSPBUF
MOVLW 0X02 ; Trasmite direccion (¿7 bits?)
MOVWF SSPBUF
; Nivelbajo SCL (automatico?)
ESPERAREC1
BANKSEL SSPCON2
BTFSC SSPCON2,6 ; Comprueba ACK
GOTO ESPERAREC1
BANKSEL SSPBUF
MOVF SSPBUF,0 ; Lee dato (¿incrementa dir?)
MOVWF DATO
; Dir. indirecto?
INCF DIRECCION,1 ; Incr. contador
MOVF DIRECCION,0
SUBLW 0X36
BTFSS STATUS,Z
GOTO ESPERAREC1
BSF SSPCON2,2 ; Genera condicion de STOP
GOTO FINTRANS
FORMATO
FINTRANS
; MOVLW 0X30
; MOVWF DIRECCION_DATO2
; INCF DIRECCION_DATO2
INT_RECEPCION
GOTO FINTRANS
END
esta incompleto, pero hasta aqui deberia tranmitir el 8583, no?
espero que alguien me pueda echar un cable.
muchas gracias!
Última edición por un moderador: