; LIBI2CUS.TXT

;
;    Bibliotheque de sous-programmes d'interface avec des composants I2C
;    -------------------------------------------------------------------
;
;                            (C) E+E CHAMOUARD 2000
;

; Include dans le programme principal le gestionnaire I2C :
;   INCLUDE libi2c.asm

; Pour utiliser le PCF8583 :
;   - definir I2CPCF8583Write et I2CPCF8583Read :
;       byte    I2CPCF8583Write,#010100000b
;       byte    I2CPCF8583Read, #010100001b
;   - definir les registres de stockage des informations :
;       direct  RHS, 10h     ; Registre pour les secondes            0 a 59 (en BCD)
;       direct  RHM, 11h     ; Registre pour les minutes             0 a 59 (en BCD)
;       direct  RHH, 12h     ; Registre pour les heures              0 a 23 (en BCD)
;       direct  RHJ, 13h     ; Registre pour les jours (0=lundi)     0 a  6 (en BCD)
;   - si besoin initialiser les interruptions I2C et ecrire la routine de traitement :
;       IE1Trt:              ; Traitement de l'IT I2C
;       push    PSW
;       push    ACC
;       lcall   PCF8583ReadHeure
;       pop     ACC
;       pop     PSW
;       reti
;   - initialiser le PCF8583 au boot avec un lcall PCF8583Init

; Pour utiliser le DS1621 :
;   - definir I2CDS1621Write et I2CDS1621Read :
;       byte    I2CDS1621Write,    #10010000b
;       byte    I2CDS1621Read,     #10010001b
;   - initialiser le DS1621 au boot avec un lcall DS1621Init
;   - pour effectuer une mesure :
;       Appeler DS1621Trigger
;       Attendre la disponibilite de la mesure au besoin en appelant DS1621MesOK
;       Lire la mesure par une DS1621ReadTemp ou DS1621ReadTemp2 (DS1621ReadTemp donne une
;           mesure au demi degre pres alors que DS1621ReadTemp2 permet d'atteindre le dixieme
;           de degre aux temperatures usuelles)

; Cette nouvelle version utilise la compilation conditionnelle, c'est  dire que la definition 
;   de l'adresse d'ecriture I2C du composant provoque la compilation de la partie de la
;   bibliotheque correspondante. Si cette adresse n'est pas definie, les sous-programmes
;   correspondants ne sont pas assembles ce qui evite une inutile surcharge du code
;   operationnel de l'application

;
; Partie PCF8583
;

PCF8583Init:
    Fonction  :   Init du PCF8583
    Entree(s) :   Rien
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
    Utilise   :   ACC et PSW non sauvegardes
    Pile      :   6 avec l'appel
    Cycles    :   ?

PCF8583WriteHeure:
    Fonction  :   Ecriture de l'heure sur le PCF8583
    Entree(s) :   RHS : secondes en BCD
                  RHM : minutes en BCD
                  RHH : heures en BCD
                  RHJ : jour (0=lundi)
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
    Utilise   :   ACC et PSW non sauvegardes
    Pile      :   6 avec l'appel
    Cycles    :   ?

PCF8583ReadHeure:
    Fonction  :   Lecture de l'heure sur le PCF8583
    Entree(s) :   Rien
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
                  RHS : secondes en BCD
                  RHM : minutes en BCD
                  RHH : heures en BCD
                  RHJ : jour (0=lundi)
    Utilise   :   ACC et PSW non sauvegardes
    Pile      :   6 avec l'appel
    Cycles    :   ?

PCF8583WriteData:
    Fonction  :   Ecriture d'une donnee dans la RAM du PCF8583
    Entree(s) :   Donnee a ecrire dans ACC
                  Adresse d'ecriture dans B (valide de 10h a ffh)
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
    Utilise   :   ACC et PSW non sauvegardes (B inchange)
    Pile      :   7 avec l'appel
    Cycles    :   ?

PCF8583ReadData:
    Fonction  :   Lecture d'une donnee dans la RAM du PCF8583
    Entree(s) :   Adresse d'ecriture dans B (valide de 10h a ffh)
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
                  Donnee lue dans A
    Utilise   :   ACC et PSW non sauvegardes (B inchange)
    Pile      :   6 avec l'appel
    Cycles    :   ?

;
; Partie DS1621
;

DS1621Init:
    Fonction  :   Init du DS1621
    Entree(s) :   Rien
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
    Utilise   :   ACC et PSW non sauvegardes
    Pile      :   8 avec l'appel
    Cycles    :   ?

DS1621Trigger:
    Fonction  :   Declenche une mesure de temperature par le DS1621
    Entree(s) :   Rien
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
    Utilise   :   ACC et PSW non sauvegardes
    Pile      :   6 avec l'appel
    Cycles    :   ?

DS1621MesOK:
    Fonction  :   Verifie si mesure DS1621 prete
    Entree(s) :   Rien
    Sortie(s) :   C=0 si mesure prete et echanges corrects
                  C=1 si mesure pas prete ou pas d'acquitement I2C
    Utilise   :   ACC et PSW non sauvegardes
    Pile      :   8 avec l'appel
    Cycles    :   ?

DS1621ReadTemp:
    Fonction  :   Lecture de la temperature sur le DS1621
    Entree(s) :   Rien (pas de verification d'une fin de conversion !)
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
                  B :   octet haut ( C en binaire)
                  ACC : octet bas  (fractions de  en binaire)
                  ACC=0 ou 80h (resolution d'un demi )
    Utilise   :   ACC, B et PSW non sauvegardes
    Pile      :   6 avec l'appel
    Cycles    :   ?

DS1621ReadTemp2:
    Fonction  :   Lecture de la temperature sur le DS1621 version 2
    Entree(s) :   Rien (pas de verification d'une fin de conversion !)
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
                  B :   octet haut ( C en binaire)
                  ACC : octet bas  (fractions de  en binaire)
                  Cette version calcule la temperature avec plus de
                  precision (environ le dixieme de  a T "normale")
    Utilise   :   ACC, B et PSW non sauvegardes
                  DPH et DPL sauvegardes
    Pile      :   8 avec l'appel
    Cycles    :   ?

DS1621ReadStatus:
    Fonction  :   Read status du DS1621
    Entree(s) :   Rien
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
                  ACC=status (octet de configuration)
    Utilise   :   ACC et PSW non sauvegardes
    Pile      :   6 avec l'appel
    Cycles    :   ?

DS1621WriteStatus:
    Fonction  :   Write status du DS1621
    Entree(s) :   ACC=Nouveau status
    Sortie(s) :   C=0 si echanges corrects
                  C=1 si pas d'acquitement I2C
    Utilise   :   ACC et PSW non sauvegardes
    Pile      :   7 avec l'appel
    Cycles    :   ?
