#include <avr/io.h>이런 헤더를 많이들 보게 될 텐데, 이 헤더는 AVR Pin I/O를 설정하는 'DDRx'라고 불리는 레지스터와, I/O 세부설정을 위한 'PORTx'라고 불리는 레지스터들을 설정하기 위한 헤더다.
학교에서 가르쳐주는 기초 C만 배워서 생소했는데, <[Directory]/[Filename]>의 형식인 거다.
avr 디렉터리 하위의 io.h 파일.
Pin I/O Mapping
DDRx I/O Direction Register
x 문자의 자리에는 A-G 사이의 문자가 들어간다.
PA, PB, PC, PD... 요렇게 핀 맵이 있으니까...
DDRA, DDRB, DDRC, DDRD ...
어떤 핀을 입력으로 쓸 건지, 출력으로 쓸 건지 설정한다.
해당 비트 1로 설정 -> 출력으로 쓰겠다.
해당 비트 0으로 설정 -> 입력으로 쓰겠다.
(당연하게도) DDRA, DDRB ... 레지스터에는 각각 한 바이트씩 들어간다.
DDRA를 예시로 들면, 1, 3, 6번 핀을 출력으로 쓰고, 나머지는 입력으로 쓰고 싶다면...
PA7 -> 0
PA6 -> 1
PA5 -> 0
PA4 -> 0
PA3 -> 1
PA2 -> 0
PA1 -> 1
PA0 -> 0
DDRA = 0b01001010
// 또는
DDRA = 0x4A아하!!!!!!!!!
PORTx, I/O 설정 Register
x 자리에는 A - G 사이의 문자가 들어간다.
상동!
PORTx는 DDRx의 설정을 어떻게 했느냐에 따라 설정 시 동작이 다른데...
출력 핀이라면...
PORTx의 해당 비트가 1이면 -> Output High(5v)
PORTx의 해당 비트가 0이면 -> Output Low(GND)
=> 해당 비트를 1, 0으로 바꾸면 핀 출력 전압을 제어할 수 있다!
입력 핀이라면...
PORTx의 해당 비트가 1이면 -> Pull-Up 저항 사용 => 별다른 신호가 없다면 1 간주.
초기값이 뭔지 몰라서 확실한 상태로 만들고 싶다면...
PORTx의 해당 비트가 0이면 -> Pull-Up X => Tri-State(Hi-Z)