본문 바로가기

임베디드시스템/STM32cube IDE

| STM32 | 디코더 3x8 74LS138 구현

74LS138 란?

3bit 바이너리 데이터를 8bit로 변환 하는 데 사용되는 복잡한 TTL 기반 논리 장치 입니다.
실제로 디멀티플렉싱 또는 기계어로 디코딩 장치를 할수 있게 설계하였고, 3개의 입력 데이터를 받아 8bit의 데이터로 변환한다.

디코딩 영향을 최소화 시키기 위해 메모리에서 디코더를 많이 사용하는데 칩에는 3개의 활성화 핀과 , 3개의 입력핀 및 8개의 출력핀으로 구현한다.



/* USER CODE BEGIN 2 */
void decoder74138() {
       uint8_t input_A[4] = { 0, },
                  input_B[4] = { 0, },
                  num[4] = { 0, };
          short i = 0;

//역순차 shift  이후 and 1 연산
                  input_A[0] = !((GPIOE->IDR >> 6) & 1);
            input_A[1] = !((GPIOE->IDR >> 5) & 1);
            input_A[2] = !((GPIOE->IDR >> 4) & 1);
            input_A[3] = !((GPIOE->IDR >> 3) & 1);
//순차 shift 이후 and 1연산
            input_B[0] = !((GPIOG->IDR >> 0) & 1);
            input_B[1] = !((GPIOG->IDR >> 1) & 1);
            input_B[2] = !((GPIOG->IDR >> 2) & 1);
            input_B[3] = !((GPIOG->IDR >> 3) & 1);

            for (i = 3; i >= 0; i--) {
                num[i] = input_A[i] + input_B[i] + carryOut;

               if((num[i] >= 2) ? 1 : 0){
                   carryOut;
               }

               num[i] %= 2;
            }
    // PD 0~7 LED 
            GPIOD->ODR &= 0x3; 
            GPIOD->ODR |= (num[3] << 7) + (num[2] << 6) + (num[1] << 5)
                  + (num[0] << 4) + (carryOut << 3) + (carryIn << 2);
   }

 }
/* USER CODE END 2 */

while (1) {
carryIn = carryOut = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_8); 
 if(carryIn & carryOut){
      decoder74138();
  }
}
728x90