전자회로실험
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;
}