카테고리 없음

BCD 코드와 2진수 관계

abc0123 2018. 6. 17. 16:44
반응형

BCD 코드와 2진수 관계

요즘 한창 재미를 붙여서 공부를 하고 있는 PLC에서 사용되는 숫자는 우리가 알아보기 쉬운 10진수나 16진수로 입력을 해도 내부에서 모두 0과 1로 변환되어 2진수로 사용되는데요. 한자리의 10진수를 2진수로 표현하면 간단하기 때문에 쉽게 알아볼 수 있지만 숫자가 커지면 한 번에 알아보기가 꽤 번거롭더라고요.

 

예를 들어 십진수 5를 2진수로 변환하면 [0000 0101] 이잖아요. 그런데 한자리만 더 높여서 26을 변환하면 [0001 1010]이 됩니다. 십 단위만 돼도 한 번에 읽기가 꽤 불편하죠? 이런 불편함을 해소할 수 있는 게 BCD 코드입니다. 변환하는 방법을 살펴볼게요.

 

2진수


만약 십진수 26을 BCD 코드로 변환한다면 각각의 자리 즉, 2와 6을 각각 2진수 네 자리로 변환을 해버리면 됩니다. 앞에 숫자 2는 2진수로 [0010]이고 뒤에 6은 [0110]이잖아요? 결국은 26을 변환하면 [0010 0110]이 되는 것입니다. 그리고 각각의 자리를 1~9까지만 변환하면 되기 때문에 2진수는 0000(십진수 0)부터 1001(십진수 9)까지만 사용할 수 있습니다. 1010부터 1111까지는 사용하면 안 된다는 이야기가 됩니다.

 

 

이해하기 쉽게 좀 더 긴 숫자 243을 각각 2진수와 BCD 코드로 변환해보겠습니다. 243을 2진수로 변환하면 [1111 0011]이 됩니다. 만약 이걸 저한테 한 번에 읽어보라고 한다면 저는 펜과 종이를 꺼내서 계산을 해봐야 할거 같아요. 고수님들은 한 번에 읽으실 수도 있겠지만 저는 아직 초보라서...ㅎㅎ


 BCD코드


여하튼 2진수로 변환을 해봤고요. 243을 BCD 코드로 변환하면 다음과 같습니다.

[0010 0100 0011] 어떤 의미인지 알겠죠? 앞에부터 4비트 단위로 2, 4, 3으로 변환된 걸 확인할 수 있습니다. 그리고 이 녀석의 역할도 대충 감이 잡히네요. 사람과 기계 모두가 쉽게 알아볼 수 있도록 전달해주는 역할 정도만 한다고 생각하면 될 거 같습니다.

 

다음으로 몇 가지 특징을 살펴보자면 이 녀석은 음수를 표현할 수 없으며 산술적인 의미는 담겨있지 않고 단순히 코드로만 사용된다는 점입니다.

 

지금까지 10진수의 숫자를 BCD 코드로 변환하는 방법을 알아봤는데요. 이렇게 변환해서 PLC로 보내면 넘어온 BCD 코드를 다시 2진수로 변환을 해서 사용해야 하는데 제가 공부하고 있는 XBC PLC의 경우 BIN 명령어를 사용해서 다시 2진수로 변환한 후 사용합니다.

 

 

BIN

 

형식을 보면 [BIN S D]로 되어 있잖아요? S로 들어온 BCD 코드를 2진수로 다시 변환해서 D 데이터 레지스트에 저장하게 됩니다. 그리고 각각의 명령어별로 BIN은 16비트, DBIN은 32비트, BIN4는 4비트, BIN8은 8비트를 처리한다는 의미입니다.

 

이렇게 해서 BCD 코드의 기본 개념을 정리해봤습니다. 수고하셨어요.

반응형