관리 메뉴

드럼치는 프로그래머

[H/W] [MCU] 8bit CPU에서 16bit 데이터 입출력[2] ] 본문

★─Programing/☆─HardWare

[H/W] [MCU] 8bit CPU에서 16bit 데이터 입출력[2] ]

드럼치는한동이 2008. 5. 1. 21:04
사용자 삽입 이미지

    < 16비트 병렬 입력 인터페이스 회로 >

    (2) 16비트 병렬 입력 인터페이스
    8비트 CPU에서 16비트의 병렬 입력장치를 접속하기 위한 16비트 병렬 입력 인터페이스 회로에서는 2회의 8비트 입력 동작 사이의 시차 때문에 입력 데이터가 변할 수 있으므로, 실제로 입력장치에서 입력하는 데이터를 동시에 순간적으로 16비트로 저장시켜 놓고 입력하는 것이 중요하다.


    예를 들어 지금 16비트의 카운터를 읽어들이기 위하여 하위 바이트에 트리 스테이트 버퍼1을 접속하고 상위바이트에 버퍼2를 접속하였으며, 8비트 마이크로프로세서는 하위 8비트 데이터를 먼저 입력하고 상위 8비트 데이터를 나중에 입력한다고 가정하자. 지금 만약 카운터의 값이 00FFH인 상태라면 버퍼1을 통하여 FFH, 버퍼2를 통하여 00H가 읽혀져야 한다. 그러나, 여기서 마이크로프로세서가 하위 바이트인 FFH를 읽어들이는 동안 카운터에 새로운 펄스가 입력되어 카운터값이 1증가한다면 2차로 버퍼2에서 상위 바이트가 01H로 읽혀지므로 마이크로프로세서는 01FFH를 읽어들인 것으로 처리된다. 이것은 카운터가 변하기 전의 00FFH나 변한 후의 0100H와는 매우 다른 입력값이다.


    이러한 바람직하지 않은 현상은 입력신호가 변할 수 있는 값이라면 아무리 빠른 마이크로프로세서를 사용하더라도 피할 수가 없으므로 이를 근본적으로 없애는 회로를 사용해야만 한다.


    이를 위해서는 위의 그림에 보인 것처럼 하위 바이트의 데이터를 읽는 순간에 16비트의 데이터를 저장시키면서 1차로 하위 바이트의 데이터를 먼저 입력하고, 2차에서는 이미 1차에서 저장시켜 놓았던 상위 바이트의 데이터를 입력하면 된다. 즉, 1차에서는 8비트 입력명령으로 CPU의 데이터 버스 D0∼D7을 통하여 짝수번지(A0=0)에서 하위 바이트를 입력한다. 그러면 이 하위 바이트의 데이터는 8비트 3상태 버퍼인 U1을 통하여 읽혀짐과 동시에 8비트 플립플롭인 U2에 상위 바이트가 저장된다. 2차에서는 역시 8비트 입력명령으로 CPU의 데이터 버스 D0∼D7을 통하여 홀수번지(A0=1)에서 상위 바이트를 입력한다. 이 상위 바이트의 데이터는 하위 바이트를 읽어들이는 순간에 함께 저장되어 있던 것이므로 그 동안에 입력장치로부터 전송되는 데이터가 변화하였더라도 아무 영향이 없이 읽혀진다.


   이러한 입력회로는 빠르게 변화하는 10비트, 12비트 또는 16비트의 카운터 등을 읽어들일 때 매우 유용하다.

Comments