You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

32 lines
669 B

#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
}