3.5.3_プログラムリスト(SHTFunc.c)

//
// SHTFunc (WIZ-C)
//

#include "C:\\WIZ_C\\Ver17\\Projects\\THERMOHYGROLOGGER\\THERMOHYGROLOGGER_Auto.h"
#include "C:\\WIZ_C\\Ver17\\Projects\\THERMOHYGROLOGGER\\SHTFunc.h"

BYTE PBBuf;

void SCK_H(void) {
    PBBuf |= (1<<bitSCK);        // SCK="H"
    SHT_PORT = PBBuf;
}

void SCK_L(void) {
    PBBuf &= ~(1<<bitSCK);        // SCK="L"
    SHT_PORT = PBBuf;
}

//
// SHTポートの初期化
//
void SHTInit(void) {
    BYTE buf;
    PBBuf &= ~(1<<bitDATA);        // DATA = "L"
    PBBuf &= ~(1<<bitSCK);        // SCK = "L"
    SHT_PORT = PBBuf;
    buf = SHT_TRIS;
    buf &= ~(1<<bitSCK);        // SCK output ("L")
    buf |= (1<<bitDATA);        // DATA input (HiZ-"H")
    SHT_TRIS = buf;
}

//
// SHT TSシーケンス
//
void SHTTSSeq(void) {
    DATA_H();
    SCK_H();
    DATA_L();
    SCK_L();
    SCK_H();
    DATA_H();
    SCK_L();
}

// SCKの↑エッジで読み込み
BYTE SHTRead(BYTE ack) {
    BYTE i, dat;
    dat = 0;
    DATA_H();                // 入力に切り替え
    // DATAビットの入力
    for(i = 0; i < 8; i++) {
        dat <<= 1;            // 次のビット

        SCK_H();            // ↑edge
        if(SHT_PORT & (1<<bitDATA)) {    // read
            // "1"
            dat |= 1;
        }
        SCK_L();
    }
    // ACKビットの出力
    if(!ack) {
        DATA_L();
    } else {
        DATA_H();
    }
    SCK_H();
    SCK_L();                // ↓edge
    DATA_H();                // 入力に切り替え

    return dat;
}

// SCKの↓エッジでデータ更新
BYTE SHTWrite(BYTE dat) {
    BYTE i, rdat;
    // DATAビットの出力
    for(i = 0; i < 8; i++) {
        SCK_L();
        if(dat & 0x80) {        // MSB
            // "1"
            DATA_H();
        } else {
            // "0"
            DATA_L();
        }
        SCK_H();
        dat <<= 1;            // 次のビット
    }
    SCK_L();
    // ACKビットの入力
    DATA_H();                // 入力に切り替え
    SCK_H();                // ↑edge
    if(SHT_PORT & (1<<bitDATA)) {
        // 1
        rdat = 1;            // NAK
    } else {
        // 0
        rdat = 0;            // ACK
    }
    SCK_L();

    return rdat;
}




トップページヘもどる