// basedef.h
#ifndef BASE_DEF_H
#define BASE_DEF_H
// MCU Clock & Baud Rate
#define CPU_CLOCK 7372800
#define BAUD_RATE 19200
#define BAUD_RATE_L (CPU_CLOCK / (16l * BAUD_RATE)) - 1
#define BAUD_RATE_H ((CPU_CLOCK / (16l * BAUD_RATE)) - 1) >> 8
// TWI 통신시에 Ack를 주고 받는지 여부
#define noACK 0
#define ACK 1
// SHT11 온도/습도 센서의 명령어
#define STATUS_REG_W 0x06 // 상태 레지스터 쓰기/설정
#define STATUS_REG_R 0x07 // 상태 레지스터 읽기
#define MEASURE_TEMP 0x03 // 온도값 읽어오기
#define MEASURE_HUMI 0x05 // 습도값 읽어오기
#define RESET 0x1e // 센서 리셋
// basedef.h
// AVR-GCC용 매크로 함수
#ifndef outb // 포트에 데이터 출력
#define outb(addr, data) addr = (data)
#endif
#ifndef inb // 포트로부터 데이터 읽기
#define inb(addr) (addr)
#endif
#ifndef BV // 비트 쓰기
#define BV(bit) (1<<(bit))
#endif
#ifndef cbi // 비트 클리어
#define cbi(reg,bit) reg &= ~(BV(bit))
#endif
#ifndef sbi // 비트 셋팅
#define sbi(reg,bit) reg |= (BV(bit))
#endif
#ifndef bit_is_set // 셋팅된 비트값 읽어오기
#define bit_is_set(sfr, bit) (inb(sfr) & _BV(bit))
#endif
// basedef.h
// TWI 포트 읽기 모드 설정 (Master <- Slave)
#define setREAD outb(DDRD, 0xFD); sbi(PORTD, 1) // ZigbeeX 모듈용
//#define setREAD outb(DDRD, 0x00); sbi(PORTD, 1) // 일반적인 셋팅
// TWI 포트 쓰기 모드 설정 (Master -> Slave)
#define setWRITE outb(DDRD, 0xFF)
// TWI 포트중 SCK 셋팅 High <-> Low
#define SCK(i) if (i) sbi(PORTD, 0); else cbi(PORTD, 0)
// TWI 포트중 SLA 셋팅 High <-> Low
#define DATA(i) if (i) sbi(PORTD, 1); else cbi(PORTD, 1)
// 센서 모드 설정 TEMP:온도 , HUMI:습도
enum {TEMP, HUMI};
#endif