Salve,
sto cercando di implementare un codice assembly, che faccia funzionare una periferica RTC tramite protocollo I2C.
Essendo, per me, la prima esperienza con tale protocollo, sto riscontrando, giànelle fasi iniziali, una serie diproblemi.
Allego uno stralcio del codice e chiedo, a chi più esperto, un aiuto affinchè possa correggere eventuali errori. Preciso che il problema riscontrato tramite un analizzatore di stati logici, è il mancato invio della prima stringa successiva al bit start! Quindi potrebe trattarsi o un errore nel settaggio dei registri oppure un problema successivo.
Spero possiate aiutarmi, grazie.
PROCESSOR 16F877A
RADIX DEC
INCLUDE \"P16F877A.INC\"
ERRORLEVEL -302
__CONFIG 0x3D39 ;_CP_OFF _DEBUG_OFF _WRT_ENABLE_OFF
; _CPD_OFF _LVP_OFF _BODEN_OFF _PWRTE_OFF _WDT_OFF _XT_OSC
CBLOCK 30H
Dly0
Dly1
Timer1 ; contatore per DelayP
Timer2 ; \" \"
Timer3 ; \" \"
DispTemp ; contenitore temporaneo per calcoli routine display
DispCnt
TabTemp
Varie ; subroutine bip
F20
Temp
ADD_DS1307_PICRX ; indirizzo nel caso in cui il up legga i dati dall\'orologio
ADD_DS1307_PICTX ; indirizzo nel caso in cui il up scriva i dati sull\'orologio
ENDC
;***************************************************************
; PROGRAMMA PRINCIPALE
;***************************************************************
Start
org 0x00
;***************************************************************
; Inizializzazione sistema e variabili
;***************************************************************
Inizializzazione
BCF STATUS,RP0 ; BANK0
BCF STATUS,RP1
clrf PORTA ; port A = 0
clrf PORTB ; port B = 0
clrf PORTC ; port C = 0
;-------------------c
movlw 00000000b
movwf ADCON0
BSF STATUS,RP0 ; BANK1
movlw 00000111b
movwf ADCON1
;--------------------------------------------------------------------------------------------------
; 0=uscita 1=ingresso
;--------------------------------------------------------------------------------------------------
movlw 00000000b ;
movwf TRISA
movlw 00001111b
movwf TRISB
movlw 00011000b
movwf TRISC
movlw 00011000b
movwf TRISD
movlw 00000000b
movwf TRISE
;------------------
movlw 0x09
movwf SSPADD ; (SSPADD) = (FOSC / (4*f SCL)) - 1 = 0x09
;------------------
bcf SSPSTAT,SMP ;
bcf SSPSTAT,CKE ;
L'aiuto più veloce è di leggere le AN 736 mostrano codice sia in c che in asm
meglio essere un granello di pepe che una cacca d'asino
picmicro675
postato il: 08.09.2018, alle ore 13:55
Cerca l' AN736 della microchip. C'è del codice in assembly per dialogare con l' I2C.
Visto come è scritto mi sembra che manchi ancora altre impostazioni.
Hai notato che la finestra del codice non permette larghezza oltre i canonici 80 caratteri ?
Ora riscrivo le routine del PDF. Poi le pubblico....
Anno nuovo, forum nuovo.
Mi sa che lascio.
picmicro675
postato il: 08.09.2018, alle ore 13:58
Se poi ti dedicassi al proton basic, magari ti trovi a maggior agio. Facendo come faccio io, scrivi in basic e quindi vai a studiare l' assembly.
Per il 16F877, c'è la versione free
Anno nuovo, forum nuovo.
Mi sa che lascio.
angelole
postato il: 08.09.2018, alle ore 14:21
agric: L'aiuto più veloce è di leggere le AN 736 mostrano codice sia in c che in asm
ho scaricato il documento, nel pomeriggio cercherò di decifrarlo... Grazie
angelole
postato il: 08.09.2018, alle ore 14:22
Hai notato che la finestra del codice non permette larghezza oltre i canonici 80 caratteri ?
Non capisco... spiegami per favore
angelole
postato il: 08.09.2018, alle ore 14:23
picmicro675: Se poi ti dedicassi al proton basic, magari ti trovi a maggior agio. Facendo come faccio io, scrivi in basic e quindi vai a studiare l' assembly.
Per il 16F877, c'è la versione free
Ottima idea per casi del genere, quasi quasi... è gratuito, dove lo trovo? quale versione?
Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito