Données Paramètres:


Description

Ligne compilateur

$(compileravr)batchfiles\avra.bat

Commutateurs compilateur

$(chip:l) "$(outdir)$(target).elf" "$(outdir)$(target).c" "$(outdir)$(target).lst"

Paramètres Puce


Vitesse Horloge
16000000 (Hz)

Il n'a pas été défini de données de configuration


Données Globales:


Composants


Nom
I2C_Master1
UART1
lcd_I2C1

Macros


Renvoie Nom Description
AUCUNE Aff_Temp Affichage de la température sur le LCD
AUCUNE Aff_TH Affichage sur le LCD de  TH
AUCUNE Aff_Tout Affichage de l'état de la sortie T_Out du DS1621
AUCUNE E_Mes Envoi d'un message Bluetooth
AUCUNE Gestion_rs232 Gestion des messages reçus liaison série (bluetooth)
BOOL Init_DS1621 Initialisation du DS1621
BOOL Lect_Temp Lecture de la température du DS1621
AUCUNE Main Programme Principal
AUCUNE Tempo
BOOL Thermostat Réglage du Thermostat

Ports

taper Nom Description
OCTET $PORTD
OCTET $PORTC
OCTET $PORTB

Constantes

taper Nom Description
BOOL false
BOOL true

Variables

taper Nom Description
OCTET lsb
OCTET Old_Tout Ancienne Valeur de T_Out
BOOL Ack Acknoledge DS1621
BOOL Connect
OCTET Char
OCTET Old_MSB
OCTET Old_Th
OCTET Char2
OCTET MSB
OCTET MSB2
OCTET Tout Sortie T_Out du DS1621
CHAINE[8] Temp_s[8] Valeur de la température
CHAINE[8] Th_s[8] Valeur du thermostat
OCTET TH Valeur haute du Thermostat
OCTET Char_recept Caractère reçu
OCTET Old_lsb


Nom Macro: Aff_Temp


Affichage de la température sur le LCD

Code C


/*=----------------------------------------------------------------------=*\
   Use :Affichage de la temp??rature sur le LCD
\*=----------------------------------------------------------------------=*/
void FCM_Aff_Temp()
{

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::Cursor(0, 0)
    FCD_0c591_lcd_I2C1__Cursor(0, 0);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString("Temp= ")
    FCD_0c591_lcd_I2C1__PrintString("Temp= ", 7);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString(Temp_s)
    FCD_0c591_lcd_I2C1__PrintString(FCV_TEMP_S, FCVsz_TEMP_S);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintAscii(0b11011111)
    FCD_0c591_lcd_I2C1__PrintAscii(223);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString("C   ")
    FCD_0c591_lcd_I2C1__PrintString("C   ", 5);

    // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('T', Temp_s)
    FCM_E_Mes('T', FCV_TEMP_S);

    // Nom: Tempo 250ms, Type: Appel d'une Macro: Tempo()
    FCM_Tempo();

}



Nom Macro: Aff_TH


Affichage sur le LCD de  TH

Code C


/*=----------------------------------------------------------------------=*\
   Use :Affichage sur le LCD de  TH
\*=----------------------------------------------------------------------=*/
void FCM_Aff_TH()
{

    // Nom: Calcul, Type: Calcul:
    // Th_s = ToString$ (TH)
    FCI_TOSTRING(FCV_TH, FCV_TH_S,8);

    // Nom: Positionne le curseur au début de la 2é ligne, Type: Appel de la Routine Composant: lcd_I2C1::Cursor(0, 1)
    FCD_0c591_lcd_I2C1__Cursor(0, 1);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString("TH = ")
    FCD_0c591_lcd_I2C1__PrintString("TH = ", 6);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString(Th_s)
    FCD_0c591_lcd_I2C1__PrintString(FCV_TH_S, FCVsz_TH_S);

    // Nom: Affichage de °, Type: Appel de la Routine Composant: lcd_I2C1::PrintAscii(0b11011111)
    FCD_0c591_lcd_I2C1__PrintAscii(223);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString("C  ")
    FCD_0c591_lcd_I2C1__PrintString("C  ", 4);

    // Nom: Envoie de Th_s en bluetooth, Type: Appel d'une Macro: E_Mes('H', Th_s)
    FCM_E_Mes('H', FCV_TH_S);

}



Nom Macro: Aff_Tout


Affichage de l'état de la sortie T_Out du DS1621

Code C


/*=----------------------------------------------------------------------=*\
   Use :Affichage de l'??tat de la sortie T_Out du DS1621
\*=----------------------------------------------------------------------=*/
void FCM_Aff_Tout()
{

    // Nom: Sortie, Type: Sortie: Tout -> B5
    SET_PORT_PIN(B,5,(FCV_TOUT));

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::Cursor(12, 1)
    FCD_0c591_lcd_I2C1__Cursor(12, 1);

    // Nom: Décision, Type: Décision: Tout = 0?
    if (FCV_TOUT == 0)
    {

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString("Off")
        FCD_0c591_lcd_I2C1__PrintString("Off", 4);

        // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('O', "Off")
        FCM_E_Mes('O', "Off");

    } else {

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString("On ")
        FCD_0c591_lcd_I2C1__PrintString("On ", 4);

        // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('O', "On ")
        FCM_E_Mes('O', "On ");

    }

}



Nom Macro: E_Mes


Envoi d'un message Bluetooth

Code C


/*=----------------------------------------------------------------------=*\
   Use :Envoi d'un message Bluetooth
       :
       :Param??tres pour la macro E_Mes :
       :  Commande : MX_UINT8
       :  Message[30] : MX_CHAR
\*=----------------------------------------------------------------------=*/
void FCM_E_Mes(MX_UINT8 FCL_COMMANDE, MX_CHAR *PFCL_MESSAGE)
{

    #define FCLsz_MESSAGE 30
    MX_CHAR FCL_MESSAGE[FCLsz_MESSAGE];
    FCI_CONCATENATE(PFCL_MESSAGE,FCLsz_MESSAGE,"",0,FCL_MESSAGE,FCLsz_MESSAGE);
    //Commentaire:
    //Commentaire
    //Si la connexion bluetooth est établie

    // Nom: Décision, Type: Décision: Connect = 1?
    if (FCV_CONNECT == 1)
    {

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: UART1::SendChar('@')
        FCD_047b1_UART1__SendChar('@');

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: UART1::SendChar(.Commande)
        FCD_047b1_UART1__SendChar(FCL_COMMANDE);

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: UART1::SendString(.Message)
        FCD_047b1_UART1__SendString(FCL_MESSAGE, FCLsz_MESSAGE);

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: UART1::SendChar(0x03)
        FCD_047b1_UART1__SendChar(0x03);

        // Nom: Tempo 250ms, Type: Appel d'une Macro: Tempo()
        FCM_Tempo();

    // } else {

    }

    //Définitions des variables locales
    #undef FCLsz_MESSAGE
}



Nom Macro: Gestion_rs232


Gestion des messages reçus liaison série (bluetooth)

Code C


/*=----------------------------------------------------------------------=*\
   Use :Gestion des messages re??us liaison s??rie (bluetooth)
\*=----------------------------------------------------------------------=*/
void FCM_Gestion_rs232()
{

    // Nom: Interruption, Type: Interruption: Désactiver RXINT0
    UCSR0B &=  ~(1 << RXCIE0);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: Char_recept=UART1::ReceiveChar(50)
    FCV_CHAR_RECEPT = FCD_047b1_UART1__ReceiveChar(50);

    // Nom: Décision, Type: Décision: Char_recept = '@'?
    if (FCV_CHAR_RECEPT == '@')
    {

        // Nom: Calcul, Type: Calcul:
        // Connect = 1
        FCV_CONNECT = 1;

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: Char_recept=UART1::ReceiveChar(100)
        FCV_CHAR_RECEPT = FCD_047b1_UART1__ReceiveChar(100);

        // Nom: Multi-Décision, Type: Multi-Décision: Char_recept?
        switch (FCV_CHAR_RECEPT)
        {
            case 'V':
            {
                // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('V', "BL_DS1621_Uno 22/02/2022")
                FCM_E_Mes('V', "BL_DS1621_Uno 22/02/2022");

                break;
            }
            case 'H':
            {
                // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: Char_recept=UART1::ReceiveChar(100)
                FCV_CHAR_RECEPT = FCD_047b1_UART1__ReceiveChar(100);

                // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: Char2=UART1::ReceiveChar(100)
                FCV_CHAR2 = FCD_047b1_UART1__ReceiveChar(100);

                // Nom: Calcul, Type: Calcul:
                // Old_TH = TH
                FCV_OLD_TH = FCV_TH;

                // Nom: Calcul, Type: Calcul:
                // Char_recept = Char_recept - 0x30
                FCV_CHAR_RECEPT = FCV_CHAR_RECEPT - 0x30;

                // Nom: Calcul, Type: Calcul:
                // Char2 = Char2 - 0x30
                FCV_CHAR2 = FCV_CHAR2 - 0x30;

                // Nom: Calcul, Type: Calcul:
                // TH = Char_recept * 10
                FCV_TH = FCV_CHAR_RECEPT * 10;

                // Nom: Calcul, Type: Calcul:
                // TH = TH + Char2
                FCV_TH = FCV_TH + FCV_CHAR2;

                break;
            }
            case 'E':
            {
                // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: Char_recept=UART1::ReceiveChar(100)
                FCV_CHAR_RECEPT = FCD_047b1_UART1__ReceiveChar(100);

                // Nom: Décision, Type: Décision: Char_recept = '1'?
                if (FCV_CHAR_RECEPT == '1')
                {

                    // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('E', "On ")
                    FCM_E_Mes('E', "On ");

                    // Nom: Sortie, Type: Sortie: 1 -> B1
                    SET_PORT_PIN(B,1,(1));

                } else {

                    // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('E', "Off")
                    FCM_E_Mes('E', "Off");

                    // Nom: Sortie, Type: Sortie: 0 -> B1
                    SET_PORT_PIN(B,1,(0));

                }

                break;
            }
            case 'F':
            {
                // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: Char_recept=UART1::ReceiveChar(100)
                FCV_CHAR_RECEPT = FCD_047b1_UART1__ReceiveChar(100);

                // Nom: Décision, Type: Décision: Char_recept = '1'?
                if (FCV_CHAR_RECEPT == '1')
                {

                    // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('F', "On ")
                    FCM_E_Mes('F', "On ");

                    // Nom: Sortie, Type: Sortie: 1 -> B0
                    SET_PORT_PIN(B,0,(1));

                } else {

                    // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('F', "Off")
                    FCM_E_Mes('F', "Off");

                    // Nom: Sortie, Type: Sortie: 0 -> B0
                    SET_PORT_PIN(B,0,(0));

                }

                break;
            }
            case 'C':
            {
                // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('T', Temp_s)
                FCM_E_Mes('T', FCV_TEMP_S);

                // Nom: Calcul, Type: Calcul:
                // Th_s = ToString$ (TH)
                FCI_TOSTRING(FCV_TH, FCV_TH_S,8);

                // Nom: Appel d'une Macro, Type: Appel d'une Macro: E_Mes('H', Th_s)
                FCM_E_Mes('H', FCV_TH_S);

                // Nom: Entrée, Type: Entrée: C0 -> Tout
                FCV_TOUT = GET_PORT_PIN(C,0);

                // Nom: Appel d'une Macro, Type: Appel d'une Macro: Aff_Tout()
                FCM_Aff_Tout();

                break;
            }
            case 'D':
            {
                // Nom: Calcul, Type: Calcul:
                // Connect = 0
                FCV_CONNECT = 0;

                break;
            }
            // default:

        }

    // } else {

    }

    // Nom: Interruption, Type: Interruption: Activer RXINT0
    sei();
    UCSR0B |= (1 << RXCIE0);

}



Nom Macro: Init_DS1621


Initialisation du DS1621

Code C


/*=----------------------------------------------------------------------=*\
   Use :Initialisation du DS1621
       :
       :Param??tres pour la macro Init_DS1621 :
       :  Adresse : MX_UINT8
       :
       :Renvoie : MX_BOOL
\*=----------------------------------------------------------------------=*/
MX_BOOL FCM_Init_DS1621(MX_UINT8 FCL_ADRESSE)
{
    //Définitions des variables locales
    MX_BOOL FCL_ACK;
    MX_BOOL FCR_RETVAL;


    // Nom: Calcul, Type: Calcul:
    // .Adresse = .Adresse AND 0b11111110
    FCL_ADRESSE = FCL_ADRESSE & 254;

    // Nom: Initialisation I2C, Type: Appel de la Routine Composant: I2C_Master1::Initialise()
    FCD_005f1_I2C_Master1__Initialise();

    // Nom: Start I2C, Type: Appel de la Routine Composant: I2C_Master1::Start()
    FCD_005f1_I2C_Master1__Start();

    // Nom: Adresse I2C du DS1621, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(.Adresse)
    FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(FCL_ADRESSE);

    // Nom: Décision, Type: Décision: .Ack = 0?
    if (FCL_ACK == 0)
    {

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(0xAC)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(0xAC);

        //Commentaire:
        //Commentaire
        //POL = ?0? ==> active low. This bit is nonvolatile.

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(0x00)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(0x00);

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: I2C_Master1::Stop()
        FCD_005f1_I2C_Master1__Stop();

        // Nom: Pause, Type: Pause: 15 ms
        FCI_DELAYBYTE_MS(15);

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: I2C_Master1::Start()
        FCD_005f1_I2C_Master1__Start();

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(.Adresse)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(FCL_ADRESSE);

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(0xEE)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(0xEE);

    // } else {

    }

    // Nom: STOP I2C, Type: Appel de la Routine Composant: I2C_Master1::Stop()
    FCD_005f1_I2C_Master1__Stop();

    // Nom: Pause, Type: Pause: 15 ms
    FCI_DELAYBYTE_MS(15);

    // Nom: Calcul, Type: Calcul:
    // .Return = .Ack
    FCR_RETVAL = FCL_ACK;

    return (FCR_RETVAL);

}



Nom Macro: Lect_Temp


Lecture de la température du DS1621

Code C


/*=----------------------------------------------------------------------=*\
   Use :Lecture de la temp??rature du DS1621
       :
       :Param??tres pour la macro Lect_Temp :
       :  Adresse : MX_UINT8
       :
       :Renvoie : MX_BOOL
\*=----------------------------------------------------------------------=*/
MX_BOOL FCM_Lect_Temp(MX_UINT8 FCL_ADRESSE)
{
    //Définitions des variables locales
    MX_UINT8 FCL_ACK;
    MX_UINT8 FCL_ADRESSE_L;
    MX_BOOL FCR_RETVAL;


    // Nom: Calcul, Type: Calcul:
    // Old_MSB = MSB
    // Old_lsb = lsb
    // .Adresse = .Adresse AND 0b11111110
    // .Adresse_L = .Adresse OR 0b00000001
    FCV_OLD_MSB = FCV_MSB;
    FCV_OLD_LSB = FCV_LSB;
    FCL_ADRESSE = FCL_ADRESSE & 254;
    FCL_ADRESSE_L = FCL_ADRESSE | 1;

    // Nom: Start_I2c, Type: Appel de la Routine Composant: I2C_Master1::Start()
    FCD_005f1_I2C_Master1__Start();

    // Nom: Adresse I2C du DS1621, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(.Adresse)
    FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(FCL_ADRESSE);

    // Nom: Si Acknoledge est à 0, Type: Décision: .Ack = 0?
    if (FCL_ACK == 0)
    {

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(0xAA)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(0xAA);

        // Nom: Stop and Start I2C, Type: Appel de la Routine Composant: I2C_Master1::Restart()
        FCD_005f1_I2C_Master1__Restart();

        // Nom: Adresse en Lecture du DS1621, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(.Adresse_L)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(FCL_ADRESSE_L);

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: MSB=I2C_Master1::ReceiveByte(0)
        FCV_MSB = FCD_005f1_I2C_Master1__ReceiveByte(0);

        // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lsb=I2C_Master1::ReceiveByte(1)
        FCV_LSB = FCD_005f1_I2C_Master1__ReceiveByte(1);

        // Nom: Décision, Type: Décision: MSB < 129?
        if (FCV_MSB < 129)
        {

            //Commentaire:
            //Commentaire
            //Température positive

            // Nom: Calcul, Type: Calcul:
            // Temp_s = "+" + ToString$ (MSB)
            FCI_SHEAD("+",2, FCI_TOSTRING(FCV_MSB, FCI_TMP_STR,20),20, FCV_TEMP_S,8);

            // Nom: Décision, Type: Décision: lsb = 0?
            if (FCV_LSB == 0)
            {

            } else {

                //Commentaire:
                //Commentaire
                //lsb = 128

                // Nom: Calcul, Type: Calcul:
                // Temp_s = Temp_s + ",5"
                FCI_SHEAD(FCV_TEMP_S,FCVsz_TEMP_S, ",5",3, FCV_TEMP_S,8);

            }

        } else {

            // Nom: Calcul, Type: Calcul:
            // MSB2 = MSB
            FCV_MSB2 = FCV_MSB;

            // Nom: Décision, Type: Décision: lsb = 0?
            if (FCV_LSB == 0)
            {

                // Nom: Calcul complément à deux, Type: Calcul:
                // MSB2 = 256 - MSB
                FCV_MSB2 = 256 - FCV_MSB;

                // Nom: Calcul, Type: Calcul:
                // Temp_s = "-" + ToString$ (MSB2)
                FCI_SHEAD("-",2, FCI_TOSTRING(FCV_MSB2, FCI_TMP_STR,20),20, FCV_TEMP_S,8);

            } else {

                // Nom: Calcul, Type: Calcul:
                // MSB2 = 255 - MSB
                FCV_MSB2 = 255 - FCV_MSB;

                // Nom: Calcul, Type: Calcul:
                // Temp_s = "-" + ToString$ (MSB2)
                FCI_SHEAD("-",2, FCI_TOSTRING(FCV_MSB2, FCI_TMP_STR,20),20, FCV_TEMP_S,8);

                // Nom: Calcul, Type: Calcul:
                // Temp_s = Temp_s + ",5"
                FCI_SHEAD(FCV_TEMP_S,FCVsz_TEMP_S, ",5",3, FCV_TEMP_S,8);

            }

        }

    } else {

        // Nom: Calcul, Type: Calcul:
        // Temp_s = "No DS1621 "
        FCI_SCOPY("No DS1621 ",11, FCV_TEMP_S,FCVsz_TEMP_S);

    }

    // Nom: Stop I2C, Type: Appel de la Routine Composant: I2C_Master1::Stop()
    FCD_005f1_I2C_Master1__Stop();

    return (FCR_RETVAL);

}



Nom Macro: Main


Programme Principal

Code C


/*=----------------------------------------------------------------------=*\
   Use :Programme Principal
\*=----------------------------------------------------------------------=*/
void FCM_Main()
{

    // Nom: Sortie --> Initialisation du Port B, Type: Sortie: 0 -> PORTB
    SET_PORT_MASK(B,0x3F,(0));

    // Nom: Calcul --> Initilisation des variables, Type: Calcul:
    // Old_Tout = 0
    // Old_Th = 0
    // Old_lsb = 255
    // Old_MSB = 255
    // Connect = 0
    FCV_OLD_TOUT = 0;
    FCV_OLD_TH = 0;
    FCV_OLD_LSB = 255;
    FCV_OLD_MSB = 255;
    FCV_CONNECT = 0;

    // Nom: Appel Initialisation du DS1621, Type: Appel d'une Macro: Init_DS1621(0x90)
    FCM_Init_DS1621(0x90);

    // Nom: Initialisation de la liaison série, Type: Appel de la Routine Composant: UART1::Initialise()
    FCD_047b1_UART1__Initialise();

    // Nom: Appel --> Initialisation Afficheur LCD, Type: Appel de la Routine Composant: lcd_I2C1::Start()
    FCD_0c591_lcd_I2C1__Start();

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString("Thermostat")
    FCD_0c591_lcd_I2C1__PrintString("Thermostat", 11);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::Cursor(0, 1)
    FCD_0c591_lcd_I2C1__Cursor(0, 1);

    // Nom: Appel de la Routine Composant, Type: Appel de la Routine Composant: lcd_I2C1::PrintString("blewando.fr")
    FCD_0c591_lcd_I2C1__PrintString("blewando.fr", 12);

    // Nom: Pause, Type: Pause: 5 s
    FCI_DELAYBYTE_S(5);

    // Nom: Efface afficheur LCD, Type: Appel de la Routine Composant: lcd_I2C1::Clear()
    FCD_0c591_lcd_I2C1__Clear();

    // Nom: Calcul, Type: Calcul:
    // TH = 18
    FCV_TH = 18;

    // Nom: Appel Réglage Thermostat, Type: Appel d'une Macro: Ack=Thermostat(0x90, TH)
    FCV_ACK = FCM_Thermostat(0x90, FCV_TH);

    // Nom: Appel Affichage de TH, Type: Appel d'une Macro: Aff_TH()
    FCM_Aff_TH();

    //Commentaire:
    //Commentaire
    //La sortie T_Out du DS1621
    //est reliée à PC0

    // Nom: Lecture de T_Out, Type: Entrée: C0 -> Tout
    FCV_TOUT = GET_PORT_PIN(C,0);

    // Nom: Appel Affichage de T_Out, Type: Appel d'une Macro: Aff_Tout()
    FCM_Aff_Tout();

    // Nom: Interruption, Type: Interruption: Activer RXINT0
    sei();
    UCSR0B |= (1 << RXCIE0);

    // Nom: Boucle proramme principal, Type: Boucle: While 1
    while (1)
    {

        //Commentaire:
        //Commentaire
        //Lecture de la température

        // Nom: Appel Lecture de Température, Type: Appel d'une Macro: Ack=Lect_Temp(0x90)
        FCV_ACK = FCM_Lect_Temp(0x90);

        // Nom: Décision, Type: Décision: (Old_MSB = MSB) AND (Old_lsb = lsb)?
        if ((FCV_OLD_MSB == FCV_MSB) & (FCV_OLD_LSB == FCV_LSB))
        {

        } else {

            //Commentaire:
            //Commentaire
            //Affichage de la température 
            //si la valeur a changé

            // Nom: Appel d'une Macro, Type: Appel d'une Macro: Aff_Temp()
            FCM_Aff_Temp();

        }

        // Nom: Décision, Type: Décision: Old_Th = TH?
        if (FCV_OLD_TH == FCV_TH)
        {

        } else {

            //Commentaire:
            //Commentaire
            //Si la valeur du thermostat 
            //a changé (TH)

            // Nom: Appel d'une Macro, Type: Appel d'une Macro: Ack=Thermostat(0x90, TH)
            FCV_ACK = FCM_Thermostat(0x90, FCV_TH);

            // Nom: Appel d'une Macro, Type: Appel d'une Macro: Aff_TH()
            FCM_Aff_TH();

            // Nom: Calcul, Type: Calcul:
            // Old_Th = TH
            FCV_OLD_TH = FCV_TH;

        }

        // Nom: Entrée, Type: Entrée: C0 -> Tout
        FCV_TOUT = GET_PORT_PIN(C,0);

        // Nom: Décision, Type: Décision: Old_Tout = Tout?
        if (FCV_OLD_TOUT == FCV_TOUT)
        {

        } else {

            //Commentaire:
            //Commentaire
            //Si la sortie T_out du DS1621
            //a changé d'état

            // Nom: Appel d'une Macro, Type: Appel d'une Macro: Aff_Tout()
            FCM_Aff_Tout();

            // Nom: Calcul, Type: Calcul:
            // Old_Tout = Tout
            FCV_OLD_TOUT = FCV_TOUT;

        }

        // Nom: Tempo 250ms, Type: Appel d'une Macro: Tempo()
        FCM_Tempo();


    }

}



Nom Macro: Tempo



Code C


/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Tempo()
{

    // Nom: Pause, Type: Pause: 250 ms
    FCI_DELAYBYTE_MS(250);

}



Nom Macro: Thermostat


Réglage du Thermostat

Code C


/*=----------------------------------------------------------------------=*\
   Use :R??glage du Thermostat
       :
       :Param??tres pour la macro Thermostat :
       :  Adr : MX_UINT8
       :  TH : MX_UINT8
       :
       :Renvoie : MX_BOOL
\*=----------------------------------------------------------------------=*/
MX_BOOL FCM_Thermostat(MX_UINT8 FCL_ADR, MX_UINT8 FCL_TH)
{
    //Définitions des variables locales
    MX_UINT8 FCL_ADRESSE;
    MX_UINT8 FCL_ACK;
    MX_UINT8 FCL_TL;
    MX_BOOL FCR_RETVAL;


    // Nom: Calcul, Type: Calcul:
    // Old_Th = TH
    // .Adr = .Adr AND 0b11111110
    FCV_OLD_TH = FCV_TH;
    FCL_ADR = FCL_ADR & 254;

    // Nom: Start I2C, Type: Appel de la Routine Composant: I2C_Master1::Start()
    FCD_005f1_I2C_Master1__Start();

    // Nom: Adresse I2C du DS1621, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(.Adr)
    FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(FCL_ADR);

    // Nom: Décision, Type: Décision: .Ack = 0?
    if (FCL_ACK == 0)
    {

        // Nom: Envoie commande 0xA1, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(0xA1)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(0xA1);

        // Nom: Envoie valeur haute du thermostat (MSB), Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(.TH)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(FCL_TH);

        // Nom: Envoie de la valeur haute du thermostat (lsb), Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(0)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(0);

    // } else {

    }

    // Nom: STOP I2C, Type: Appel de la Routine Composant: I2C_Master1::Stop()
    FCD_005f1_I2C_Master1__Stop();

    //Commentaire:
    //Commentaire
    //Pause > 10ms, écriture en mémoire non-volatile

    // Nom: Pause > 10ms, Type: Pause: 15 ms
    FCI_DELAYBYTE_MS(15);

    // Nom: START I2C, Type: Appel de la Routine Composant: I2C_Master1::Start()
    FCD_005f1_I2C_Master1__Start();

    // Nom: Adresse I2C du DS1621, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(.Adr)
    FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(FCL_ADR);

    // Nom: Décision, Type: Décision: .Ack = 0?
    if (FCL_ACK == 0)
    {

        // Nom: Calcul, Type: Calcul:
        // .TL = .TH - 1
        FCL_TL = FCL_TH - 1;

        // Nom: Envoie commande 0xA2, Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(0xA2)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(0xA2);

        // Nom: Envoie valeur basse  du thermostat (MSB), Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(.TL)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(FCL_TL);

        // Nom: Envoie valeur basse  du thermostat (lsb), Type: Appel de la Routine Composant: .Ack=I2C_Master1::TransmitByte(128)
        FCL_ACK = FCD_005f1_I2C_Master1__TransmitByte(128);

    // } else {

    }

    // Nom: Stop I2C, Type: Appel de la Routine Composant: I2C_Master1::Stop()
    FCD_005f1_I2C_Master1__Stop();

    // Nom: Pause, Type: Pause: 15 ms
    FCI_DELAYBYTE_MS(15);

    return (FCR_RETVAL);

}