전자회로실험

Flip-Flop

Flip-Flop은 순차논리회로로 이전 정보를 기억하는 메모리 소자이다. 주로 컴퓨터의 레지스터에 사용된다. Flip-Flop의 종류에는 RS Flip-Flop, D Flip-Flop, T Flip-Flop, JK Flip-Flop이 있다

- RS Flip-Flop : R이 1이면 리셋, S가 1이면 셋

- D Flip-Flop : 입력을 그대로 출력

- T Flip-Flop : 입력이 들어올 때마다 출력의 상태가 바뀜

- JK Flip-Flop : RS Flip-Flop에 기능을 추가 JK 모두 1일 때 반전

 

오늘 실험에 사용한 칩은 74HC74N으로 Dual D-type Flip-Flop이다. 다음은 74HC74N의 데이터시트이다.


각 핀의 배열과 역할에 관한 데이터시트이다.


각 입력에 대한 출력 진리표이다. Table1을 보면 SD와 RD신호가 각각 LOW 일 때 출력이 셋, 리셋됨을 알 수 있다. 즉 low신호에 각각 셋, 리셋된다. 또한 위의 표에는 없지만 SD와RD에 동시에 High 신호를 입력해 보면 Q에서High신호가 출력되었다.


위 그림은 입력 신호 D가 인가 될 때, 어떤 타이밍에 Q신호가 출력이 되는지 잘 보여주고 있다. Flip-Flop은 기본적으로 클럭에 동기화 되어 동작하기 때문에 입력신호가 들어왔다고 해서 바로 출력이 나오는 것이 아니라 클럭에 맞춰서 출력이 나온다. 위의 칩은 positive-edge trigger이기때문에 클럭의 rising edge에서 출력값이 변하고 있다.

 

이번 실험은 D Flip-Flop의 동작을 직접 눈으로 확인하는 것이였다. 하지만 실험에서는 정확한 D Flip-Flop의 동작을 볼 수 없었다. Flip-Flop은 이진 데이터를 기억하는 소자이다. 실험에서 D에 Low값을 주고, 클럭핀에 신호를 한 번 주면 rising edge에서 출력 LED의 불이 꺼졌다가 falling edge를 만나면 바로 다시 불이 켜져버리는 것이였다. 이는 계속 Low값을 저장되어야 하는데 그렇지 못하다는 것을 뜻한다. 정확한 이유는 알 수 없었으나, 강사님 말씀으로는 정확한 클럭을 인가한게 아니라 임의로 우리가 스위치로 클럭을 만들어서 그럴것이라는 것이였다.

 

c언어

부가연산자 & 복합부가연산자

x = x + 5; 와 x += 5는 같은 의미를 가진다. 전자는 부가연산자(=)를 이용한 것이고, 후자는 복합부가연산자(+=)를 이용한 것이다.

예제소스

#include <stdio.h>

 

int main()

{

        int num = 17;

        printf("num += 5: %d\n", num += 5);

        printf("num -= 5: %d\n", num -= 5);

        printf("num *= 5: %d\n", num *= 5);

        printf("num /= 5: %d\n", num /= 5);

        printf("num %= 5: %d\n", num %= 5);

 

        return 0;

}


 

캐스트 연산자

산술연산이나 대입연산 등을 할 때 두 피연산자는 자료형이 같아야만 한다. 서로 다른 자료형을 산술연산이나 대입연산 등을 해야 되는 경우 캐스트 연산자를 이용하여 명시적으로 두 자료형을 맞춰줄 수 있다.

(자료형)수식

예제소스

#include <stdio.h>

 

int main()

{

        int intA = 14;

        int intB = 3;

        float floatC = 0;

 

        floatC = intA / intB;

        printf("%f\n", floatC);

 

        floatC = (float)intA / intB;

        printf("%f\n", floatC);

 

        return 0;

}


 

변수선언과 초기화

변수를 선언하면 cpu는 변수의 자료형에 맞는 메모리 공간을 확보한다. 이 메모리 공간에는 예전에 사용하던 아무 의미 없는 값들로 채워져 있는데 이를 쓰레기 값이라고 한다. 변수를 초기화 하지 않고 사용하게 되면 이 쓰레기 값들을 볼 수 있다.

예제소스

#include <stdio.h>

 

int main()

{

        int num1, num2;

 

        num2 = num1 + 10;      // num2를초기화하지않고바로사용

        printf("num1 : %d\nnum2 : %d\n", num1, num2);

 

        return 0;

}


 

if문

if문은 아래의 형식으로 사용한다. ~~~ 부분이 참이면(0이아니면) { }안의 명령문들을 실행하고, 거짓이면 { }안의 명령문들은 무시한다.

if(~~~)
{
}

예제소스

#include <stdio.h>

 

int main()

{

        int num1, num2, bigger;

 

        printf("Please enter two integer: ");

        scanf("%d %d", &num1, &num2);

 

        bigger = num1;

 

        if(num1 < num2)

        {

               bigger = num2; // 결국두수중큰수가bigger저장된다

        }

        printf("The larger number is : %3d\n", bigger);

 

        return 0;

}



 

+ Recent posts