السلام عليكم
اتبعت خطوات برمجة الـ PCF8583
ولكن اريد تكملة هذا البرنامج بقراءة الثواني والدقائق والساعات والايام
اليكم البرنامج
كود:
;///////////////////////////////////////////////////////
;////////////// Initialisation ///////////////
;///////////////////////////////////////////////////////
bcf STATUS,RP0 ; bank 0
bcf STATUS,RP1 ; bank 0
movlw B'00101000’ ; module MSSP en service en mode I²C master
movwf SSPCON ; dans registre de contrôle
bsf STATUS,RP0 ; bank 1
bsf TRISC,3 ; SCL en entrée
bsf TRISC,4 ; SDA en entrée
clrf SSPSTAT ; slew rate, niveaux I2C, RAZ de tous les indicateurs
movlw D'12’ ; définir la fréquence
movwf SSPADD ;
;*************************************** Start_cond
Start_cond
bsf SSPCON2,SEN ; lancer le start-condition
ici1
btfsc SSPCON2,SEN ; start-condition terminé ?
goto ici1 ; non, attendre
return
;****************************************envoyer adresse
envoyeradr
bcf STATUS,RP0 ; bank 0
movlw 2 ; charger adresse esclave (b7 à b1) avec b0 = 0
movwf SSPBUF ; lancer l’émission de l’adresse en mode écriture
bsf STATUS,RP0 ; bank 1
ici2
btfsc SSPSTAT,R_W ; tester si émission terminée
goto ici2 ; non, attendre
return
;****************************************envoyer octet
envoyeroctet
ici3
btfsc SSPCON2,ACKSTAT ; tester ACK
goto ici3
envoy
bcf STATUS,RP0 ; bank 0
movf OCTET,0 ; charger octet à envoyer
movwf SSPBUF ; lancer la transmission
bsf STATUS,RP0 ; bank 1
ici4
btfsc SSPSTAT,R_W ; tester si émission terminée
goto ici4 ; non, attendre
return
;*************************** Repeat Start_cond
bsf SSPCON2,RSEN ; lancer le Repeat-Start-condition
ici5
btfsc SSPCON2,RSEN ; start-condition terminé ?
goto ici5 ; non, attendre
;*************************************** Envoyer adresse (lecture)
Envoyeradr2
bcf STATUS,RP0 ; bank 0
movlw 3 ; charger adresse esclave (1) avec b0 = 1
movwf SSPBUF ; lancer l’émission de l’adresse en mode écriture
bsf STATUS,RP0 ; bank 1
ici6
btfsc SSPSTAT,R_W ; tester si émission terminée
goto ici6 ; non, attendre
return
;*************************************** Lire un octet
Lireunoctet
bsf SSPCON2,RCEN ; lancer la réception
ici7
btfsc SSPCON2,RCEN ; réception terminée ?
goto ici7 ; non, attendre
bcf STATUS,RP0 ; bank 0
movf SSPBUF,w ; charger l'octet reçu dans l'accumulateur
return
;*************************************** Envoyer NOACK
EnvoyerNOACK
bsf STATUS,RP0 ; bank 1
bsf SSPCON2,ACKDT ; NOACK
bsf SSPCON2,ACKEN ; lancer l’acknowledge (= ACKDT = 1 =NOACK)
ici8
btfsc SSPCON2,ACKEN ; tester si NOACK terminé
goto ici8 ; non, attendre
return
;************************************** Envoyer stoP_cond
EnvoyerstoP_cond
bsf SSPCON2,PEN ; lancer le stop-condition
ici9
btfsc SSPCON2,PEN ; stop-condition terminé ?
goto ici9 ; non, attendre
return
end