본문 바로가기
코스웨어/15년 스마트컨트롤러

20150306-28번-조진석-브레드보드 논리회로 및 데이터시트와 매크로 함수

by 알 수 없는 사용자 2015. 3. 6.
728x90
반응형

오전 H/W

#학습 목표

-기본 논리식의 표현방법을 알아본다.

-불 대수의 법칙을 알아본다.

-논리회로를 노리식으로 논리식을 논리회로로 표현하는 방법을 알아본다.

-곱의 합[SOP]과 합의 곱[POS], 최소항[minterm]과 최대항[maxterm]에 대해 알아본다.

 

기본 논리식의 표현

불 대수 공리

 

교환법칙 : 연산자를 기준으로 좌우 피연산자의 위치를 교환. 식이 복잡해지면 헷갈릴수 있으므로 주의한다.

분배법칙 : 연산자가 두 개 이상이어야만 성립한다.(같은 연산자 두개는 해당안됨.)

분배법칙

 

논리회로의 논리식 변환

원래의 회로에 게이트를 거칠 때마다 게이트의 출력을 적어주면서 한 단계식 출력 쪽으로 나아가면 된다.

논리회로 기호

 

OR+NOT = NOR(NOT OR)

OR : F = A+B -> NOT -> F=!A+!B=!(A+B)

 

 

HD74LS14 - NOT

A1-Y1, A2-Y2처럼 A,Y하나씩 같은 번호끼리 한 쌍.

A에서 입력 받으면, Y로 출력 -> 0이면 소등,1이면 점등

HD74HC32 - OR

A1-B1-Y1처럼 같은 번호끼리 한 쌍.

AB에서 입력받으면, Y로 출력 -> 둘 중 하나라도 1이면 점등. 둘 다 0이면 소등

 

브레드 보드 - NOR

 

 

Proteus 논리회로 회로도

 

 

 

-----------------------------------------------------------------------------------------------------------------------------------------

오후 S/W  - 사진에 네모칸, 밑줄 , 글씨 색  연관있는것들끼리 깔맞춤 최대한 해본거라 깔맞춤 생각하시고 보시면 쪼끔 편해지실듯.

# 조건부 컴파일을 위한 매크로 //교재 569

 

#ifndef..#endif: 정의되지 않았다면

#ifndefnnot을 의미한다.

 

#if - /거짓 판단

#ifdef - define이 되어있나 안되있나 -> #define 정의 여부

#ifndef - define이 되어있지 않으면.

 

 

//#define ADD 1 - #ifndef ADD -> #ifndef ADD 코드는 "#define이 정의 되어 있지 않다면" ->//define ADD 1 은 주석처리 되어있기 때문에

#ifndef ADD가 성립 -> printf출력

 

#define MIN 0 - #ifdef MIN -> #ifdef MIN 코드는 "#define이 정의 되었다면"-> #define MIN 0 은 정의 되어있으므로 #ifdef MIN 성립 -> printf출력

 

해당 전 처리 언어를 한번 실행하고 싶을 경우 주석 처리된 코드를 입력하면 됨.

주석처리된 endif __SMART_H__(우측 2번째줄)오타입니다! ㅠ.ㅠ (define 일꺼에요..밑에 글에는 수정)

#ifndef __SMART_H__ //충돌을 막기위해(전처리된 상태의 언어,assembly) 임의의 언더바를 양쪽에 2개씩 붙인다.

#define __SMART_H__

#endif //__SMART_H__ //#if가 많을때 햇갈리지 않게 주석으로 표시

main.c에서 #include "smart.h" 가 다수 입력되어도 1번만 실행됨.

volatile : 휘발성 의미로 사용 -> 최적화 하지않고 명령할대 바로바로 실행하라.

->최적화 방지 =>지연 코드로 for문 사용시 딜레이 명령

volatile unsigned int uiCnt = 0;

for(uiCnt = 0; uiCnt<60000; ++uiCnt);

volatile을 입력함으로써 최적화를 방지하여 지연코드(딜레이가 생김)가 됨.

 

 ps: 모든 코드는 한 줄로 되어있다. -> 한 줄로 작성할 경우 코드 보기가 힘들어짐.

(직접 해서 확인 해보면 되지만, 정신적 건강에 문제가 생길 수 있음.)

 

 

대표 적인 선행처리 명령문 교재 p.559~

#define: Function-like macro

매크로 확장 - macro expansion

 

square(X) (X)*(X) -> X말고 다른 문자 사용가능

=>X라는 것이 중요한게 아니라, 괄호 안에 존재한다는 사실이 중요한 것.

 

비정상적인 결과 출력의 원인은

3+2를 입력했을때 3+2*3+2로 인식하기 때문에 중간 2*3을 먼저실행하고

나머지 3과 2를 덧셈하므로 원하는 값인 25가 나오는 것이 아니라 11이 나오게됨.

(cl /P main.c 로 확인가능)

빨간줄로 밑줄친 부분은 비정상적인 결과를 방지하는 방법으로

printf안에 보이는것과 같이 SQUARE(3+2)안에 값을 ((3+2)) 이런식으로 괄호를 하나더추가해주는 방법과 #define에 선언한 X*X에 (X*X)와 같이 괄호를 더해주는 방법이 있다.

헤더파일에 전 처리 명령을 함으로써 메인의 코딩을 깔끔하게 할수있음.

 

매크로 정의 시, 먼저 정의된 매크로도 사용이 가능하다.

 

매크로 함수의 장점

-매크로 함수는 일반 함수에 비해 속도가 빠르다.

-자료형에 따라서 별도로 함수를 정의하지 않아도 된다.

함수가 호출되면 다음 사항들이 동반됨.

-호출된 함수를 위한 스택 메모리의 할당

-실행위치의 이동과 매개변수로의 인자 전달

-return 문에 의한 값의 반환

등으로 실행속도의 저하로 이어진다. 반면 매크로 함수는 선행처리기에 의해서 매크로 함수의 몸체 부분이 매크로 함수의 호출문장을 대신하기 때문에 위에서 언급한 사항들을 동반하지 않아 실행속도상의 이점이 있다. 매크로 함수는 전달인자의 자료형에 상관없이 제대로 치환됨.

매크로 함수의 호출문장이 매크로 함수의 몸체 부분으로 단순히 치환되기 때문임.

매크로 함수의 단점

-정의하기가 정말로 까다롭다.(발암..?)

-디버깅하기가 쉽지않다.(메크로를 잘못 정의할 경우 에러메세지는 선행처리 이전의 소스파일을 기준으로 출력되지 않고, 선행처리 이후의 소스파일을 기준으로 출력이됨. 따라서 일반적인 에러 메시지보다 이해하기 힘들다는 단점이 있음)

따라서 이러한 함수들을 매크로로 정의.

-작은 크기의 함수

-호출의 빈도수가 높은 함수

 

 

함수 교재 p.210

전달인자의 유무와 반환 값의 유무에 따라서 함수를 네 개의 형태로 나눔.

그중 유형4번 전달인자 , 반환값 둘다 X

반환 값이 없으면 return;생략 가능 -> 컴파일러 불쌍하니깐 적어주기.(return;만 적음)

 ps : #define LED_ON() PORTA = 0X00;을 만들어서 실행해보고

헤더파일로 옴겨서 실행해보는건 앞에서 다 언급한거라 따로 정리ㄴㄴ

 

수업 시간에 듣는거 제가 편한대로 정리하다가 업무일지올릴려고 좀더 신경써서 해보려고 하는데 잘안되네요.(결국 그냥 원래하던거랑 별차이가없다는..)

정리하면서 수업듣느라 놓치는 부분도 많은거 같습니다.(대체로 복습은 대체로 생략)

틀리거나 잘못된거있으면 말해주세요~  주말 잘보내십시오~ㅋ.ㅋ

 

 

728x90