#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
void SetPins(){
DDRA = 0b00000011; // PA0, 1만 Out...
PORTA = 0b00000000; // PA0, 일단 0으로...
}
int main(void){
SetPins();
while(1){
PORTA = 0b00000001;
_delay_ms(1000);
PORTA = 0b00000010;
_delay_ms(1000);
}
}
코드 설명
util/delay.h
avr-libc의 문서에 써진 Description을 보면, "Convenience Functions for busy-wait delay loops"라고 되어 있다.
"Busy-Wait을 위한 편리한 기능들"
Busy-Wait? -> 다른 작업 다 때려치우고 다 됐나? 다 됐나? 다 됐나? 다 됐나? 계속 확인하는 것.
F_CPU?
util/delay.h에서 제공하는 Delay functions를 사용하기 위해서는 외부 Xtal의 Clock을 해당 이름으로 Define해 주어야 한다.
하지 않으면 1MHz 속도로 동작한다고 가정하고 컴파일이 되긴 하는데, Warning이 뜬다.
나의 경우...
SetPins 함수에서 핀의 초기 설정을 담당하도록 했다.
PA0, PA1번 핀만 출력으로 설정했다.
=> DDRA = 0b00000011; // PA0, 1만 Out...
그리고 초기 PORTA Register는 전부 0으로!
GND 출력 중인 상태로 세팅!
그리고 Main에서 PA0, 1이 1초 간격으로 번갈아가며 Output-High 되도록 설정. 끝.
코드 ATmega128A에 업로드하는 방법
상단 탭 [Build] > [Build Solution] (단축키 F7)
상단 탭 [Tools] > [Device Programming]
[Tool], [Device], [Interface] 선택 후 [Apply]
해당 창 좌측면 탭, [Memories]
[flash] 메뉴 경로 텍스트 상자 우측 [...] 버튼 클릭
프로젝트 폴더 내에서 빌드된 .hex 파일을 선택.
[Program] 버튼 누르기