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
'마이크로프로세서' 카테고리의 다른 글
LED를 이용해서 2차원 패턴 만들기 (0) | 2020.05.25 |
---|---|
스위치 입력을 사용하는 LED 점등 & 채터링 (0) | 2020.05.25 |
패턴을 변경한 LED 점등 (0) | 2020.05.24 |
출력(LED) & 입력(스위치버튼) 회로 구성 (0) | 2020.04.21 |
ATmega128 개발 도구 (0) | 2020.04.21 |
ATmega128 보드 (0) | 2020.04.21 |
ATmega128의 EEPROM (추가메모리) (0) | 2020.04.21 |