3.4.13_プログラムリスト(THERMOLOGGER_User.c)(H22/1/4)

修正箇所(自動生成ファイルに記述追加)は、以下の青色の箇所です。
#include "C:\\WIZ_C\\Ver12\\Projects\\THERMOLOGGER\\THERMOLOGGER_Auto.h"
#include "C:\\WIZ_C\\Ver12\\Projects\\THERMOLOGGER\\i2c.h"
#include "C:\\WIZ_C\\Ver12\\Projects\\THERMOLOGGER\\SHTFunc.h"

#include <stdlib.h>
#include <Strings.h>
#include <Delays.h>

#__config _CONFIG1H, 0x02
#__config _CONFIG1L, 0x00
#__config _CONFIG2H, 0x0E
#__config _CONFIG2L, 0x0E
#__config _CONFIG3H, 0x01
#__config _CONFIG3L, 0x00
#__config _CONFIG4H, 0x00
#__config _CONFIG4L, 0x81

#define CalcTMP10() (ADValTmp-4000+5)/10;        // SHT11 温度変換マクロ(10倍値)

WORD    ADValHR, hr10, hr;        //SHT11 測定A-D値(hr10:測定湿度値を10倍した値)
WORD    EE_LogNo, EE_diffLogNo, EE_CtrlLogNo, EE_CtrldiffLogNo, EE_adrsLogWrite, EE_adrsLogRead, EE_Work1, EE_Work2, EE_Work3;
int    ADValTmp, Temp10, temp;        //SHT11 測定A-D値(Temp10:測定温度値を10倍した値)
int    EE_SampReadLogNo, EE_SampdiffLogNo;
BYTE    out_str1[17], out_str2[17], Transmit_Buf[8], Receive_Buf[8], clock_Buf[7], data_Work[8], data_Buf[8], ctrl_Buf[8], EE_Erase[128];
BYTE    TimerCount1, TimerCount2, TimerCount3, TimerCount4, StrCount, cursorNo_Set;
BYTE    sec, min, hour, day, week, month, year, samp, premin, time_Work1;
BYTE    sec_Set, min_Set, hour_Set, day_Set, month_Set, year_Set;
BYTE    temp_ndp, temp_ndp_disp, temp_dp, hr_ndp, hr_dp, bdat_H, bdat_L, PBBuf, dt1, dt2;
bool    MeasHR, MeasTmp;                //SHT11測定中フラグ
bit    temp_mainus, LeftKey, RightKey, UpKey, DownKey, ModeKey, SetKey, Hosyu1Key, Hosyu2Key, SetMode;
bit    Flag20mSec, Flag100mSec, Flag500mSec, Flag1000mSec;
bit    write_Set, EE_InitError, EE_LogWrite, EE_CtrlWrite, EE_Samp, Cmd_SampRead1, Cmd_SampRead2, Cmd_CtrlRead;

WORD CalcHR10(void);                    //SHT11 湿度変換関数(10倍値)
void I2C_RTC_Write(BYTE *data);
void I2C_RTC_Read(BYTE *data);
void I2C_ROM_AdrsSet(WORD adrs);
void I2C_ROM_Write(WORD adrs, BYTE *data, WORD size);
void I2C_ROM_Read(WORD adrs, BYTE *data, WORD size);
void TxStr(BYTE *Transmit_Buf);
void CmdProc();
void DispCursor(BYTE cursorNo_Set);


//
// This file includes all user definable routines. It may be changed at will as
// it will not be regenerated once the application has been generated for the
// first time.
//

//*******************************************************************************
//
// Insert your interrupt handling code if required here.
// Note quick interrupts are used so code must be simple
// See the manual for details of quick interrupts.
//

void UserInterrupt()
{
    // Insert your code here
    if(PIR1 & (1<<CCP1IF))
    {
        PIR1 &= ~(1<<CCP1IF);
        TimerCount1 = TimerCount1 + 1;
        TimerCount2 = TimerCount2 + 1;
        TimerCount3 = TimerCount3 + 1;
        TimerCount4 = TimerCount4 + 1;
        if(TimerCount1 == 2)
        {
            Flag20mSec = 1;
            TimerCount1 = 0;
        }
        if(TimerCount2 == 10)
        {
            Flag100mSec = 1;
            TimerCount2 = 0;
        }
        if(TimerCount3 == 50)
        {
            Flag500mSec = 1;
            TimerCount3 = 0;
        }
        if(TimerCount4 == 100)
        {
            Flag1000mSec = 1;
            TimerCount4 = 0;
        }
    }

#asmline goto UserIntReturn    ; PIC Assembler - go back to interrupt routine
}


//*******************************************************************************
//
// Insert your initialisation code if required here.
// Note that when this routine is called Interrupts will not be enabled - the
// Application Designer will enable them before the main loop
//

void UserInitialise()
{
    samp = 10;    //sampling cycle(10min)
    I2C_ROM_Read(0x0000, data_Work, 4);
    dt1 = data_Work[0];
    dt2 = data_Work[1];
    EE_Work1 = (WORD)dt2 << 8;
    EE_Work2 = EE_Work1 | dt1;
    if(EE_Work2 > 8191)
    {
        EE_InitError = 1;
        EE_LogNo = 0;
    }
    else
        EE_LogNo = EE_Work2;
    dt1 = data_Work[2];
    dt2 = data_Work[3];
    EE_Work1 = (WORD)dt2 << 8;
    EE_Work2 = EE_Work1 | dt1;
    if(EE_Work2 > 8191)
    {
        EE_InitError = 1;
        EE_diffLogNo = 0;
    }
    else
        EE_diffLogNo = EE_Work2;
    if(EE_InitError)
    {
        ctrl_Buf[0] = EE_LogNo & 0x00FF;
        ctrl_Buf[1] = EE_LogNo >> 8;
        ctrl_Buf[2] = EE_diffLogNo & 0x00FF;
        ctrl_Buf[3] = EE_diffLogNo >> 8;
        ctrl_Buf[4] = 0;
        ctrl_Buf[5] = 0;
        ctrl_Buf[6] = 0;
        ctrl_Buf[7] = 0;
        I2C_ROM_Write(0x0000, ctrl_Buf, 8);
        Wait(20);
    }
    EE_CtrlLogNo = EE_LogNo;
    EE_CtrldiffLogNo = EE_diffLogNo;
    LCDClear();
    INTCON |= 1<<PEIE;
    PIE1 |= 1<<CCP1IE;

}

//*******************************************************************************
//
// Insert your main loop code if required here. This routine will be called
// as part of the main loop code
//

void UserLoop()
{
    if(Flag20mSec)
    {
        Flag20mSec = 0;
        //LogData Read
        if((EE_CtrlWrite == 0) && (EE_LogWrite == 0) && (EE_Samp == 0))
        {
            if(Cmd_CtrlRead)
            {
                ctrl_Buf[0] = EE_CtrlLogNo & 0x00FF;
                ctrl_Buf[1] = EE_CtrlLogNo >> 8;
                ctrl_Buf[2] = EE_CtrldiffLogNo & 0x00FF;
                ctrl_Buf[3] = EE_CtrldiffLogNo >> 8;
                ctrl_Buf[4] = 0;
                ctrl_Buf[5] = 0;
                ctrl_Buf[6] = 0;
                ctrl_Buf[7] = 0;
                TxStr(ctrl_Buf);
                Cmd_CtrlRead = 0;
            }
            if(Cmd_SampRead1 || Cmd_SampRead2)
            {
                if(EE_SampdiffLogNo != 0)
                {
                    if(EE_SampReadLogNo < 1)
                        EE_SampReadLogNo = 8191;
                    if(EE_SampReadLogNo > 8191)
                        EE_SampReadLogNo = 1;
                    EE_adrsLogRead = WORD(EE_SampReadLogNo) * 8;
                    I2C_ROM_Read(EE_adrsLogRead, Transmit_Buf, 8);
                    TxStr(Transmit_Buf);
                    EE_SampReadLogNo = EE_SampReadLogNo + 1;
                    EE_SampdiffLogNo = EE_SampdiffLogNo - 1;
                    if(Cmd_SampRead1)
                        EE_diffLogNo = EE_diffLogNo - 1;
                }
                else
                {
                    if(Cmd_SampRead1)
                    {
                        Cmd_SampRead1 = 0;
                        EE_CtrlWrite = 1;
                    }
                    Cmd_SampRead2 = 0;
                }
            }        
        }
        //Sampling Data Edit
        if(EE_Samp)
        {
            EE_Samp = 0;
            EE_LogNo = EE_LogNo + 1;
            EE_diffLogNo = EE_diffLogNo + 1;
            if(EE_LogNo > 8191)
                EE_LogNo = 1;
            if(EE_diffLogNo > 8191)
                EE_diffLogNo = 8191;
            EE_adrsLogWrite = EE_LogNo * 8;
            data_Buf[0] = year;
            data_Buf[1] = month;
            data_Buf[2] = day;
            data_Buf[3] = hour;
            data_Buf[4] = min;
            data_Buf[5] = temp_ndp;
            data_Buf[6] = hr_ndp;
            data_Buf[7] = ((temp_dp << 4) & 0xF0) + (hr_dp & 0x0F);
            EE_LogWrite = 1;
        }
        //EEPROM LogWrite
        if(EE_CtrlWrite)
        {
            EE_CtrlLogNo = EE_LogNo;
            EE_CtrldiffLogNo = EE_diffLogNo;
            ctrl_Buf[0] = EE_LogNo & 0x00FF;
            ctrl_Buf[1] = EE_LogNo >> 8;
            ctrl_Buf[2] = EE_diffLogNo & 0x00FF;
            ctrl_Buf[3] = EE_diffLogNo >> 8;
            ctrl_Buf[4] = 0;
            ctrl_Buf[5] = 0;
            ctrl_Buf[6] = 0;
            ctrl_Buf[7] = 0;
            I2C_ROM_Write(0x0000, ctrl_Buf, 8);
            EE_CtrlWrite = 0;
        }
        if(EE_LogWrite)
        {
            I2C_ROM_Write(EE_adrsLogWrite, data_Buf, 8);
            EE_LogWrite = 0;
            EE_CtrlWrite = 1;
        }
    }

    if(Flag100mSec)
    {
        Flag100mSec = 0;
        if(write_Set)
        {
            //clock write(RTC)
            time_Work1 = sec_Set / 10;
            clock_Buf[0] = (time_Work1 << 4) + (sec_Set % 10);
            time_Work1 = min_Set / 10;
            clock_Buf[1] = (time_Work1 << 4) + (min_Set % 10);
            time_Work1 = hour_Set / 10;
            clock_Buf[2] = (time_Work1 << 4) + (hour_Set % 10);
            time_Work1 = day_Set / 10;
            clock_Buf[3] = (time_Work1 << 4) + (day_Set % 10);
            time_Work1 = month_Set / 10;
            clock_Buf[5] = (time_Work1 << 4) + (month_Set % 10);
            time_Work1 = year_Set / 10;
            clock_Buf[6] = (time_Work1 << 4) + (year_Set % 10);
            I2C_RTC_Write(clock_Buf);
            sec = sec_Set;
            min = min_Set;
            hour = hour_Set;
            day = day_Set;
            month = month_Set;
            year = year_Set;
            SetMode = 0;
            write_Set = 0;
        }
        else
        {
            //clock read(RTC)
            I2C_RTC_Read(clock_Buf);
            time_Work1 = clock_Buf[0];
            sec = ((time_Work1 >> 4) & 0x07) * 10 + (time_Work1 & 0x0F);
            time_Work1 = clock_Buf[1];
            min = ((time_Work1 >> 4) & 0x07) * 10 + (time_Work1 & 0x0F);
            time_Work1 = clock_Buf[2];
            hour = ((time_Work1 >> 4) & 0x03) * 10 + (time_Work1 & 0x0F);
            time_Work1 = clock_Buf[3];
            day = ((time_Work1 >> 4) & 0x03) * 10 + (time_Work1 & 0x0F);
            time_Work1 = clock_Buf[5];
            month = ((time_Work1 >> 4) & 0x01) * 10 + (time_Work1 & 0x0F);
            time_Work1 = clock_Buf[6];
            year = ((time_Work1 >> 4) & 0x0F) * 10 + (time_Work1 & 0x0F);
        }
        // SHT11温度、湿度の測定完了チェック
        if(MeasHR)
        {
            // 湿度測定中
            if(!(SHT_PORT & (1<<bitDATA)))
            {    // 測定完了チェック
                // SHT11湿度測定終了
                MeasHR = 0;
                //湿度を読み出す
                bdat_H = SHTRead(0);    // read high byte(ACK)
                bdat_L = SHTRead(1);    // read low byte(NOACK)
                ADValHR = ((WORD)bdat_H << 8) | bdat_L;
                // SHT11温度測定開始(14bit)
                SHTTSSeq();        // TSシーケンス開始
                SHTWrite(0x03);        // measure temperature
                MeasTmp = 1;        // 温度測定中
            }
        }
        else if(MeasTmp)
        {
            // SHT11温度測定中
            if(!(SHT_PORT & (1<<bitDATA)))
            {    // 測定完了チェック
                // SHT11温度測定終了
                MeasTmp = 0;
                // 温度を読み出す
                bdat_H = SHTRead(0);    // read high byte(ACK)
                bdat_L = SHTRead(1);    // read low byte(NOACK)
                ADValTmp = ((int)bdat_H << 8) | bdat_L;
            }
        }
    }

    if(Flag500mSec)
    {
        Flag500mSec = 0;
        if(SetMode)
        {
            //LCD display
            sprintf(out_str1,"Clock %02d/%02d/%02d ",year_Set, month_Set, day_Set);
            sprintf(out_str2,"Set %02d:%02d:%02d ",hour_Set, min_Set, sec_Set);
            LCDPrintAt(0,0);
            LCDString(out_str1);
            LCDPrintAt(0,1);
            LCDString(out_str2);
            DispCursor(cursorNo_Set);
        }
        else
        {
            //LCD display
            if(temp_mainus)
            {
                if(temp_ndp_disp <= 9)
                    sprintf(out_str1,"%02d/%02d/%02d -%01d.%01d%cC",year,month,day, temp_ndp_disp, temp_dp, 0xdf);
                else
                    sprintf(out_str1,"%02d/%02d/%02d -%02d.%01d%cC",year,month,day, temp_ndp_disp, temp_dp, 0xdf);
            }
            else
                sprintf(out_str1,"%02d/%02d/%02d %3d.%01d%cC",year,month,day, temp_ndp_disp, temp_dp, 0xdf);
            sprintf(out_str2,"%02d:%02d:%02d %3d.%01d%% ",hour,min,sec, hr_ndp, hr_dp);
            LCDPrintAt(0,0);
            LCDString(out_str1);
            LCDPrintAt(0,1);
            LCDString(out_str2);
        }
    }

    if(Flag1000mSec)
    {
        Flag1000mSec = 0;
        //10min SAMPLING
        if(min != premin)
        {
            premin = min;
            if( (min == 0) || (min == 10) || (min == 20) || (min == 30) || (min == 40) || (min == 50) )
                EE_Samp = 1;
        }
        // SHT11湿度測定開始(12bit)
        SHTTSSeq();            // TSシーケンス開始
        SHTWrite(0x05);            // measure humidity
        MeasHR = 1;            // 湿度測定中
        hr10 = CalcHR10();        // 湿度の工学値変換
        Temp10 = CalcTMP10();
        if((hr10 < 1000) && (Temp10 < 1000))
        {
            hr = hr10;
            temp = Temp10;
            hr_ndp = BYTE(hr10 / 10);
            hr_dp = BYTE(hr10 % 10);
            temp_ndp_disp = BYTE(cabs(Temp10 / 10));
            temp_dp = BYTE(cabs(Temp10 % 10));
            if(((Temp10 % 10) >= 0) && ((Temp10 / 10) >= 0))
            {
                temp_mainus = 0;
                temp_ndp = temp_ndp_disp;
            }
            else
            {
                temp_mainus = 1;
                temp_ndp = temp_ndp_disp | 0x80;
            }
        }
    }

    if(ModeKey)
    {
        ModeKey = 0;
        if(SetMode)
            SetMode = 0;
        else
            SetMode = 1;
        if(SetMode)
        {
            sec_Set = sec;
            min_Set = min;
            hour_Set = hour;
            day_Set = day;
            month_Set = month;
            year_Set = year;
            cursorNo_Set = 0;
        }
        LCDClear();
    }

    if(Hosyu1Key)
    {
        Hosyu1Key = 0;
    }

    if(Hosyu2Key)
    {
        Hosyu2Key = 0;
    }
    
    if(SetMode)
    {
        if(LeftKey)
        {
            LeftKey = 0;
            if(cursorNo_Set == 0)
                cursorNo_Set = 5;
            else
                cursorNo_Set = cursorNo_Set - 1;
        }
        if(RightKey)
        {
            RightKey = 0;
            if(cursorNo_Set == 5)
                cursorNo_Set = 0;
            else
                cursorNo_Set = cursorNo_Set + 1;
        }
        if(UpKey)
        {
            UpKey = 0;
            switch(cursorNo_Set)
            {
                case 0:
                    if(year_Set >= 99)
                        year_Set = 0;
                    else
                        year_Set = year_Set + 1;
                    break;
                case 1:
                    if(month_Set >= 12)
                        month_Set = 1;
                    else
                        month_Set = month_Set + 1;
                    break;            
                case 2:
                    if(day_Set >= 31)
                        day_Set = 1;
                    else
                        day_Set = day_Set + 1;
                    break;
                case 3:
                    if(hour_Set >= 23)
                        hour_Set = 0;
                    else
                        hour_Set = hour_Set + 1;
                    break;
                case 4:
                    if(min_Set >= 59)
                        min_Set = 0;
                    else
                        min_Set = min_Set + 1;
                    break;
                case 5:
                    if(sec_Set >= 59)
                        sec_Set = 0;
                    else
                        sec_Set = sec_Set + 1;
                    break;
            }
        }
        if(DownKey)
        {
            DownKey = 0;
            switch(cursorNo_Set)
            {
                case 0:
                    if(year_Set == 0)
                        year_Set = 99;
                    else
                        year_Set = year_Set - 1;
                    break;
                case 1:
                    if((month_Set == 1) || (month_Set == 0))
                        month_Set = 12;
                    else
                        month_Set = month_Set - 1;
                    break;
                case 2:
                    if(day_Set == 1 || (day_Set == 0))
                        day_Set = 31;
                    else
                        day_Set = day_Set - 1;
                    break;
                case 3:
                    if(hour_Set == 0)
                        hour_Set = 23;
                    else
                        hour_Set = hour_Set - 1;
                    break;
                case 4:
                    if(min_Set == 0)
                        min_Set = 59;
                    else
                        min_Set = min_Set - 1;
                    break;
                case 5:
                    if(sec_Set == 0)
                        sec_Set = 59;
                    else
                        sec_Set = sec_Set - 1;
                    break;
            }
        }
        if(SetKey)
        {
            SetKey = 0;
            write_Set = 1;
        }
    }

}

//
// 湿度の工学値変換(計算結果の単位は X10%)
//
WORD CalcHR10(void)
{
    WORD ad, x1, x2, x3, x4, cd10, b10;
    // 桁ごとの数値を取り出す
    ad = ADValHR;
    x1 = ad / 1000;
    ad = ad - 1000 * x1;
    x2 = ad / 100;
    ad = ad - 100 * x2;
    x3 = ad / 10;
    x4 = ad - 10 * x3;
    // 桁ごとにA-D値を掛け算する
    x1 = ADValHR * x1;
    x2 = (ADValHR * x2 + 5) / 10;        // 小数点以下四捨五入
    x3 = (ADValHR * x3 + 50) / 100;        // 小数点以下四捨五入
    x4 = (ADValHR * x4 + 500) / 1000;    // 小数点以下四捨五入
    x1 = x1 + x2 + x3 + x4;            // 計算結果を合成
    x2 = (x1 + 5) / 10;            // 1/10する. 小数点以下四捨五入
    cd10 = (28 * x2 + 50) / 100;
    x1 = (ADValHR * 4 + 5) / 10;
    x2 = (ADValHR * 5 + 500) / 1000;
    b10 = x1 + x2;
    return -40 + b10 - cd10;        // 湿度値を10倍した整数値
}

void DispCursor(BYTE cursorNo_Set)
{
    BYTE    x, y;
    switch(cursorNo_Set)
    {
        case 0:
            x = 8;
            y = 0;
            break;
        case 1:
            x = 11;
            y = 0;
            break;
        case 2:
            x = 14;
            y = 0;
            break;
        case 3:
            x = 8;
            y = 1;
            break;
        case 4:
            x = 11;
            y = 1;
            break;
        case 5:
            x = 14;
            y = 1;
            break;
    }
    LCDPrintAt(x, y);
    LCDOnOff(1, 0, 1);
}


//
// User occurrence code
//

//
// Occurrence - A key has been pressed (or is repeating)
//

void KeyPress()
{
    switch(KP4Value)
    {
        case 0:UpKey = 1;break;
        case 1:DownKey = 1;break;
        case 2:LeftKey = 1;break;
        case 3:RightKey = 1;break;
        case 4:ModeKey = 1;break;
        case 5:SetKey = 1;break;
        case 6:Hosyu1Key = 1;break;
        case 7:Hosyu2Key = 1;break;
    }

}

//
// Occurrence - Byte received on serial interface
//

void GetRX()
{
    BYTE ch;
    if(GetRxSize() > 0)
    {
        ch = WaitRx();
        if((ch == '\r') || (ch == '\n'))                //'\r'(0x0D)
        {
            Receive_Buf[StrCount] = 0;    //NULL
            StrCount = 0;
            CmdProc();
        }
        else
        {
            Receive_Buf[StrCount] = ch;
            StrCount = StrCount + 1;
            if(StrCount > 7)
                StrCount = 7;
        }
    }

}

void CmdProc()
{
    if(strcmp(Receive_Buf,"SAR1") == 0)
    {
        if((Cmd_CtrlRead == 0) && (Cmd_SampRead1 == 0) && (Cmd_SampRead2 == 0))
        {
            Cmd_SampRead1 = 1;
            EE_SampdiffLogNo = int(EE_CtrldiffLogNo);
            EE_SampReadLogNo = int(EE_CtrlLogNo) - EE_SampdiffLogNo + 1;
            if(EE_SampReadLogNo < 1)
                EE_SampReadLogNo = EE_SampReadLogNo + 8191;
        }
    }
    if(strcmp(Receive_Buf,"SAR2") == 0)
    {
        if((Cmd_CtrlRead == 0) && (Cmd_SampRead1 == 0) && (Cmd_SampRead2 == 0))
        {
            Cmd_SampRead2 = 1;
            EE_SampdiffLogNo = 144;
            EE_SampReadLogNo = int(EE_LogNo) - EE_SampdiffLogNo + 1;
            if(EE_SampReadLogNo < 1)
                EE_SampReadLogNo = EE_SampReadLogNo + 8191;
        }
    }
    if(strcmp(Receive_Buf,"SAR3") == 0)
    {
        if((Cmd_CtrlRead == 0) && (Cmd_SampRead1 == 0) && (Cmd_SampRead2 == 0))
        {
            Cmd_SampRead2 = 1;
            EE_SampdiffLogNo = 1008;
            EE_SampReadLogNo = int(EE_LogNo) - EE_SampdiffLogNo + 1;
            if(EE_SampReadLogNo < 1)
                EE_SampReadLogNo = EE_SampReadLogNo + 8191;
        }
    }
    if(strcmp(Receive_Buf,"SAR4") == 0)
    {
        if((Cmd_CtrlRead == 0) && (Cmd_SampRead1 == 0) && (Cmd_SampRead2 == 0))
        {
            Cmd_SampRead2 = 1;
            EE_SampdiffLogNo = 8191;
            EE_SampReadLogNo = int(EE_LogNo) - EE_SampdiffLogNo + 1;
            if(EE_SampReadLogNo < 1)
                EE_SampReadLogNo = EE_SampReadLogNo + 8191;
        }
    }
    if(strcmp(Receive_Buf,"CTR") == 0)
        if((Cmd_CtrlRead == 0) && (Cmd_SampRead1 == 0) && (Cmd_SampRead2 == 0))
            Cmd_CtrlRead = 1;
    if(strcmp(Receive_Buf,"ERASE") == 0)
    {
        if((Cmd_CtrlRead == 0) && (Cmd_SampRead1 == 0) && (Cmd_SampRead2 == 0))
        {
            //LCD display
            sprintf(out_str1," EEPROM ERASE!! ");
            sprintf(out_str2," ");
            LCDPrintAt(0,0);
            LCDString(out_str1);
            LCDPrintAt(0,1);
            LCDString(out_str2);
            //EE-PROM ERASE
            BYTE    i;
            WORD    j, k;
            for(i = 0; i < 128; i++)
                EE_Erase[i] = 0;
            for(j = 0; j < 512; j++)
            {
                k = 128 * j;
                I2C_ROM_Write(k, EE_Erase, 128);
                Wait(10);
            }
            EE_LogNo = 0;
            EE_diffLogNo = 0;
            EE_CtrlLogNo = 0;
            EE_CtrldiffLogNo = 0;
            Cmd_CtrlRead = 0;
            Cmd_SampRead1 = 0;
            Cmd_SampRead2 = 0;
            EE_LogWrite = 0;
            EE_CtrlWrite = 0;
            EE_Samp = 0;
        }
    }
    strcpy(Receive_Buf,"");
    StrCount = 0;
}

void TxStr(BYTE *Transmit_Buf)
{
    BYTE i;
    for(i = 0; i < 8; i++)            //8byte送信
        AddTx(Transmit_Buf[i]);
}

//
// I2C-RTC DATA WRITE (7byte Write: sec, min, hour, day, week, month, year)
//
void I2C_RTC_Write(BYTE *data)
{
    BYTE i;
    I2CStart(I2C_START_NORM);
    I2CWrite(0xA2);                // control byte (write)
    I2CWrite(0x02);                // Address set (sec)
    for(i = 0; i < 7; i++)
    {
        I2CWrite(*data);
        data++;
    }
    I2CStop();
}

//
// I2C-RTC DATA READ (7byte Read: sec, min, hour, day, week, month, year)
//
void I2C_RTC_Read(BYTE *data)
{
    BYTE i;
    I2CStart(I2C_START_NORM);
    I2CWrite(0xA2);                // control byte (write)
    I2CWrite(0x02);                // Address set (sec)
    I2CStart(I2C_START_CONT);
    I2CWrite(0xA3);                // control byte (read)
    for(i = 0; i < 7; i++)
    {
        if(i != 6)
            *data = I2CRead(I2C_READ_ACK);
        else
            *data = I2CRead(I2C_READ_NOACK);
        data++;
    }
    I2CStop();
}

//
// I2C-EEPROM DATA WRITE
//
void I2C_ROM_Write(WORD adrs, BYTE *data, WORD size)
{
    WORD i;
    I2C_ROM_AdrsSet(adrs);
    for(i = 0; i < size; i++)
    {
        I2CWrite(*data);
        data++;
    }
    I2CStop();
}

//
// I2C-EEPROM DATA READ
//
void I2C_ROM_Read(WORD adrs, BYTE *data, WORD size)
{
    WORD i;
    I2C_ROM_AdrsSet(adrs);
    I2CStart(I2C_START_CONT);
    I2CWrite(0xA1);                // control byte (read)
    for(i = 0; i < size; i++)
    {
        if(i != (size - 1))
            *data = I2CRead(I2C_READ_ACK);
        else
            *data = I2CRead(I2C_READ_NOACK);
        data++;
    }
    I2CStop();
}

//
// I2C-EEPROM DATA READ/WRITE ADDRES SET
//
void I2C_ROM_AdrsSet(WORD adrs)
{
    I2CStart(I2C_START_NORM);
    I2CWrite(0xA0);                // control byte (write)
    I2CWrite(adrs>>8);            // EEPROM Address(H)
    I2CWrite(adrs);                // EEPROM Address(L)
}





トップページヘもどる