입출력포트 & LED 점등해보기

마이크로프로세서

2020. 4. 21. 20:18

1. 포트 데이터 레지스터 (출력시)

  • 포트에 데이터를 출력하는 레지스터이다. (입/출력 둘다 되지만 출력용으로 자주 사용)
  • PORTx는 A,B,C,D,E,F,G의 모든 레지스터를 가리키기 위해 PORTx(x=A|B|C|D|E|F|G) 라고 하였다
  • 초기값이 0이여서 컨트롤러를 처음에 켜면 LED가 전부 켜져있다. (부논리로 0이 LED on이기 때문)

 

2. 포트 입력 레지스터 (입력시)

  • 포트에 데이터를 입력하는 레지스터이다. (PORTA~G는 출력, PINA~G는 입력으로 쓴다)
  • 마찬가지로 A,B,C,D,E,F,G를 가리키기 위해 PINx라고 표현한다 (PORTx와 비슷한 이유)
  • N/A의 초기값의 경우 어떤 초기값이 입력되어있을지 모르는 경우를 말한다

 

3. 방향 설정 레지스터 (Data Direction Register) : DDRx

  • 특정 핀이 입력으로 쓰일지, 출력으로 쓰일지 결정하는 레지스터
  • 0으로 설정하면 입력, 1로 설정하면 출력할 수 있음

 

4. 레지스터 설정에 따른 입/출력 with PUD

[그림] 레지스터 설정에 따른 입/출력

  • DDxn은 방향, PORTx는 입력, PUD는 풀업 저항 불능 (Pull up disable)을 말한다.
  • PUD가 1이면 풀업이 불가능해져서 입력이 불가능해진다, 0일때만 입력 가능 (2번 케이스)
  • DDx가 0일땐 모두 입력, 1일땐 모두 출력이다 (DDx가 1일 때 PUD는 돈케어이다, 출력은 풀업 노신경)
  • DDx = 0, PORTx = 1, PUD = 0이면 풀업되어 입력상태가 된다
  • DDx = 1, PORTx = 0이면 출력상태에서의 0이기 때문에 SINK : High, SOURCE : Low 출력이다
  • DDx = 1, PORTx = 1이면 출력상태에서의 1이기 때문에 SINK : Low, SOURCE : High 출력이다

 

5. LED 점등해보기

  • 우리가 사용하는 키트는 LED와 출력으로 사용하기로 했던 포트레지스터 A의 0~7핀과 연결되어있다.
  • 때문에 이 PORTA핀의 값을 변경하여 원하는 패턴의 LED를 출력할 것이다.

 

  • 코드는 매우 간단하다 포트A의 모든 방향을 출력으로 설정하고,
  • 위에서 출력으로 사용하기로 했던 PORT 중 A번 포트인 PORTA를 0X5D로 설정한다.
  • while(1)안에서 PORTA가 계쏙 0x5D를 출력하게 하여 지속적으로 LED가 켜져 있게 한다.
  • DDRA나 PORTA 등은 모두 io.h에 선언된 변수들(unsigned char)이다.

 

  • 위와 같이 특정 패턴으로 LED가 점등된다. PORTA에 입력한 0x5D의 패턴으로 출력된 것이다.
  • 0x5D = 0101 1101이다. 그래서 0인 위치의 LED만 점등 되었다 (SINK 타입으로 부논리이다) 

 

6. Reference

 

마이크로 프로세서 및 실습 Ⅰ

마이크로 프로세서 및 실습

www.kocw.net