#include "dipSwitch.h" /* * 회로도 기준: * ADD_1..ADD_5 = P8.1..P8.5 * Pull-up to VCC5, DIP ON -> GND(LOW) => Active-Low */ #define DIP_PORT P8 #define DIP_PM PM8 #define DIP_MASK (0x3Eu) // b0011_1110 = P8.1~P8.5 #define DIP_SHIFT (1u) // P8.1이 bit0로 오도록 void DipSwitch_Init(void) { // 입력 설정: PM bit=1 => input DIP_PM |= DIP_MASK; } uint8_t DipSwitch_ReadAddr_0to31(void) { uint8_t raw = (uint8_t)(DIP_PORT & DIP_MASK); // Active-Low이므로 반전 후, 마스크 적용 uint8_t v = (uint8_t)((~raw) & DIP_MASK); // P8.1~P8.5 -> bit0~bit4 v = (uint8_t)(v >> DIP_SHIFT); return (uint8_t)(v & 0x1Fu); // 0~31 }