3.4.9_プログラムリスト(SHTFunc.c)
//
// SHTFunc (WIZ-C) // #include "C:\\WIZ_C\\Ver12\\Projects\\THERMOLOGGER\\THERMOLOGGER_Auto.h" #include "C:\\WIZ_C\\Ver12\\Projects\\THERMOLOGGER\\SHTFunc.h" extern 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; } トップページヘもどる |